5

を使用しているときに、Web サービス メソッド内で使用されたクライアント証明書に関する情報を取得する方法はあります<security mode="Transport>か? OperationContext.Current をふるいにかけましたが、明らかなものは見つかりませんでした。

私のサーバー構成は次のとおりです。

  <basicHttpBinding>
    <binding name="SecuredBasicBindingCert">
      <security mode="Transport">
        <message clientCredentialType="Certificate" />
      </security>
    </binding>
  </basicHttpBinding>

残念ながら、認証に DataPower を使用しているサード パーティの pub/sub システムを使用しています。この構成で WCF を使用している場合、呼び出し元に関する情報を収集できないようです (資格情報が実際に送信されないため)。

構成を変更したり、ペイロードの変更を依頼したりせずに、誰が自分のサービスを呼び出しているかをどうにかして把握できるようにする必要があります。

4

1 に答える 1

5

はい、しかし直感的ではありません。

まず、サービス ライブラリから System.IdentityModel アセンブリを必ず参照してください。

ここで、クライアント証明書について知りたいサービス メソッドに次のようなものを追加します。

// Find the certificate ClaimSet associated with the client
foreach (ClaimSet claimSet in OperationContext.Current.ServiceSecurityContext.AuthorizationContext.ClaimSets)
{
    X509CertificateClaimSet certificateClaimSet = claimSet as X509CertificateClaimSet;
    if (certificateClaimSet != null)
    {
        // We found the ClaimSet, now extract the certificate
        X509Certificate2 certificate = certificateClaimSet.X509Certificate;

        // Do something interesting with information contained in the certificate
        Debug.Print("Certificate Subject: " + certificate.Subject);
    }
}

お役に立てれば!

于 2010-06-03T01:39:21.587 に答える