質問

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

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

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

私は、残念ながらデータパワーを認証に使用しているサードパーティのパブ/サブシステムと協力しています。この構成でWCFを使用している場合、発信者に関する情報を収集することはできないようです(実際には資格情報が送信されないため)。

私はどういうわけか、構成を変更したり、ペイロードを変更するように依頼することなく、サービスに誰が電話をかけるかを把握できる必要があります。

役に立ちましたか?

解決

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

まず、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);
    }
}

お役に立てれば!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top