具有客户端证书身份验证的.Net Core Web API

时间:2018-12-13 12:16:55

标签: asp.net asp.net-core certificate

我已经在.Net Core 2.1中开发了一个简单的WEB API服务

我正在尝试实现客户端证书身份验证,因此我只能向在其计算机上安装了特定证书的客户端授予对API的访问权限。

客户端使用浏览器(Chrome,Edge,IE11或Firefox)访问API。

我已在API方法中添加了对证书的请求:

[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{

    X509Certificate2 cert = Request.HttpContext.Connection.ClientCertificate;
    if (cert!=null && cert.Verify())
    {
        //more verification here...
        return Content("....", "application/json");
    }
    else
    {
        return Content("....", "application/json");
    }

}

然后,我安装了自签名证书,并将其添加到“受信任的根”中,以实现客户端身份验证目的。

enter image description here

,但是变量 cert 始终为null,并且在我请求页面时浏览器甚至没有提示我使用证书。

我想是因为我必须在某个地方设置Web服务器必须请求客户端证书,因为可以在IIS中进行设置,但是在我的开发环境中,我使用的是IIS Express。

如何强制IIS Express请求客户端证书?

3 个答案:

答案 0 :(得分:2)

要使用ASP.NET Core身份验证堆栈进行正确的证书身份验证,您还可以自己idunno.Authentication.Certificate签出Barry Dorrans。它允许您为应用程序启用证书身份验证,并像处理其他任何身份验证方案一样处理它,因此可以将实际的基于证书的逻辑排除在业务逻辑之外。

  

这种项目包含针对ASP.NET Core的Certificate Authentication的实现。证书身份验证发生在TLS级别,远远早于进入ASP.NET Core的时间,因此,更准确地说,这是一个身份验证处理程序,它可以验证证书,然后为您提供一个事件,您可以在其中将证书解析为ClaimsPrincipal。      

您必须configure your host进行证书身份验证,无论是IIS,Kestrel,Azure Web应用程序还是您正在使用的其他任何东西。

请确保也检查“documentation”的正确设置方法,因为它需要configuration of the host才能正常工作,就像使用IIS Express一样。包括对其他服务器(例如原始Kestrel,IIS,Azure或常规反向代理)的说明。

答案 1 :(得分:0)

为了使IIS Express可以开始请求客户端证书并将其传递到服务器端,必须编辑配置文件:

整个配置位于.vs \ config \ applicationhost.config中的解决方案文件夹中

确保设置以下值:

<security>
   <access sslFlags="Ssl, SslNegotiateCert, SslRequireCert" />

<iisClientCertificateMappingAuthentication enabled="true"></iisClientCertificateMappingAuthentication>

答案 2 :(得分:0)

对于本地测试,可以在Visual Studio的IIS Express中启用SSL。在“属性”窗口中,将“已启用SSL”设置为True。注意SSL URL的值;使用此URL来测试HTTPS连接。

针对谁的需求 Details here