Информация о сертификации от службы WCF с использованием режима безопасности транспортных средств
-
05-10-2019 - |
Вопрос
Есть ли способ вытянуть информацию о том, какой клиентский сертификат использовался внутри моего метода веб-сервиса при использовании <security mode="Transport>
? Я просеивался через experialContext.Courent, но не смог найти ничего очевидно.
Мой конфигурация сервера выглядит следующим образом:
<basicHttpBinding>
<binding name="SecuredBasicBindingCert">
<security mode="Transport">
<message clientCredentialType="Certificate" />
</security>
</binding>
</basicHttpBinding>
Я работаю с третьей стороной PUB / Sub System, который, к сожалению, использует 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);
}
}
Надеюсь это поможет!