5

有没有办法在使用时提取有关在我的 Web 服务方法中使用了哪个客户端证书的信息<security mode="Transport>?我筛选了 OperationContext.Current 但找不到任何明显的东西。

我的服务器配置如下:

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

我正在与第三方发布/订阅系统合作,该系统不幸地使用 DataPower 进行身份验证。似乎如果我在此配置中使用 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 回答