Информация о сертификате от Сервиса WCF с помощью Транспортного режима безопасности

Есть ли любой способ вытянуть информацию, о которой клиентский сертификат использовался в моем методе веб-сервиса при использовании <security mode="Transport>? Я отсеял через OperationContext. Текущий, но ничто не мог найти очевидным.

Моя конфигурация сервера следующие:

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

Я работаю с третьим лицом pub/sub система, кто, к сожалению, использует DataPower для аутентификации. Походит, если я использую WCF с этой конфигурацией, затем я не могу подобрать любую информацию о вызывающей стороне (так как никакие учетные данные на самом деле не отправляются).

Я так или иначе должен смочь выяснить чей, выполнив звонки к моему сервису, не изменяя мою конфигурацию или прося, чтобы они изменили их полезную нагрузку.

5
задан Langdon 27 May 2010 в 17:38
поделиться

1 ответ

Да, но это не интуитивно понятно.

Во-первых, обязательно укажите сборку 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);
    }
}

Надеюсь, это поможет!

5
ответ дан 14 December 2019 в 19:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: