Получить сертификат клиента TLS в методе службы WCF REST - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть приложение службы WCF REST в .NET 4.7.2.Предположим, что в интерфейсе ServiceContract есть метод:

[ServiceContract]
public interface MyService
{
    [OperationContract]
    [WebGet(UriTemplate = "DoSomething", ResponseFormat = WebMessageFormat.Json)]
    ResponseDto DoSomething();
}

Предположим, что IIS, на котором запущена реализация этой службы, настроен на прием только HTTPS-соединений с клиентским сертификатом.Также предположим, что реализация DoSomething() строго зависит от сертификата клиента TLS.

Есть ли способ получить этот сертификат клиента TLS внутри реализации службы?

public class MyServiceImpl : MyService
{
    public ResponseDto DoSomething()
    {
        // Something like GetClientCertFromTlsSession() 
        // to get the X509Certificate2 instance?
    }
}

Примечание. Конечно, я мог бы передать закодированный сертификат клиента в качестве параметра DoSomethingВызов REST, но нет очевидного способа сопоставить тот, который передается вызову REST, и тот, который используется для установления рукопожатия TLS.

1 Ответ

0 голосов
/ 07 декабря 2018

Вы сможете получить сертификат X509 следующим образом:

X509Certificate2 cert = null;
try
{
    if (OperationContext.Current.ServiceSecurityContext.AuthorizationContext.ClaimSets.Count > 0)
    {
        cert = ((X509CertificateClaimSet)OperationContext.Current.ServiceSecurityContext.AuthorizationContext.ClaimSets[0]).X509Certificate;
    }
    else
    {
        throw new Exception("missing cert...");
    }
}
catch (Exception ex)
{
    //log something and handle exception
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...