是否有任何方法可以在使用Web服务方法内使用哪个客户端证书的信息 <security mode="Transport>?我筛选了操作context.current,但找不到任何明显的东西。

我的服务器配置如下:

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

我正在与不幸的是使用DataPower进行身份验证的第三方酒吧/子系统合作。好像我将WCF与此配置一起使用,那么我将无法收集有关呼叫者的任何信息(因为实际上没有发送凭据)。

我以某种方式需要能够弄清谁在不更改配置或要求他们更改有效载荷的情况下拨打我的服务。

有帮助吗?

解决方案

是的,但这不是直觉。

首先,请确保并从您的服务库中引用系统。

现在,将类似的内容添加到您的服务方法中,您想了解客户端证书:

// 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