使用<security mode="Transport>
时,有没有办法提取有关我的Web服务方法中使用的客户端证书的信息?我通过OperationContext.Current筛选,但找不到任何明显的东西。
我的服务器配置如下:
<basicHttpBinding>
<binding name="SecuredBasicBindingCert">
<security mode="Transport">
<message clientCredentialType="Certificate" />
</security>
</binding>
</basicHttpBinding>
我正在与第三方发布/订阅系统合作,不幸的是,他使用DataPower进行身份验证。好像我在这个配置中使用WCF,然后我无法收集有关调用者的任何信息(因为实际上没有发送凭据)。
我需要能够在不改变配置或要求他们更改有效负载的情况下找出谁调用我的服务。
答案 0 :(得分: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);
}
}
希望这有帮助!