Есть ли любой способ вытянуть информацию, о которой клиентский сертификат использовался в моем методе веб-сервиса при использовании <security mode="Transport>
? Я отсеял через OperationContext. Текущий, но ничто не мог найти очевидным.
Моя конфигурация сервера следующие:
<basicHttpBinding>
<binding name="SecuredBasicBindingCert">
<security mode="Transport">
<message clientCredentialType="Certificate" />
</security>
</binding>
</basicHttpBinding>
Я работаю с третьим лицом pub/sub система, кто, к сожалению, использует DataPower для аутентификации. Походит, если я использую 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);
}
}
Надеюсь, это поможет!