2015-11-27 2 views
0

Я хочу использовать сертификаты проверки подлинности клиентов в приложении web.api, работающем на IIS без https. Это может быть достигнуто с помощью WCF, но, похоже, это невозможно с web.api. В статье ниже категорически говорится об этом, но я хотел понять, почему это невозможно.ASP.NET web.api. Могу ли я использовать сертификаты проверки подлинности клиентов без https?

http://southworks.com/blog/2014/06/16/enabling-ssl-client-certificates-in-asp-net-web-api/

Примечание: Я понимаю, почему это не должно быть сделано в производстве. Требование заключается в том, чтобы запустить службу в тестовой среде, где SSL недоступен.

Благодаря

ответ

0

Да, это возможно, если вы позволите приложение проверки сертификата вместо IIS.

Убедитесь, что в настройках SSL установлены сертификаты клиента «Принять» в IIS. Это обеспечит передачу сертификата в приложение. «Требовать SSL» не нужно указывать.

Затем вы можете выполнить собственную проверку сертификата в коде. Например: http://leastprivilege.com/2013/11/11/client-certificate-authentication-middleware-for-katana

public class ClientCertificateAuthenticationHandler : 
    AuthenticationHandler<ClientCertificateAuthenticationOptions> 
{ 
    protected override Task<AuthenticationTicket> AuthenticateCoreAsync() 
    { 
     var cert = Context.Get<X509Certificate2>(“ssl.ClientCertificate”); 


     if (cert == null) 
     { 
      return Task.FromResult<AuthenticationTicket>(null); 
     } 

     try 
     { 
      Options.Validator.Validate(cert); 
     } 

     catch 
     { 
      return Task.FromResult<AuthenticationTicket>(null); 
     } 

     var claims = GetClaimsFromCertificate(
      cert, cert.Issuer, Options.CreateExtendedClaimSet); 

     var identity = new ClaimsIdentity(Options.AuthenticationType); 

     identity.AddClaims(claims); 

     var ticket = new AuthenticationTicket(
      identity, new AuthenticationProperties()); 

     return Task.FromResult<AuthenticationTicket>(ticket); 
    } 
}