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

Gio*_*iox 6 asp.net certificate asp.net-core

我已经在.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");
    }

}
Run Code Online (Sandbox Code Playgroud)

那么我已经安装了自签名证书,并将其添加到“受信任的根”中,从而启用了“客户端身份验证”目的。

在此处输入图片说明

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

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

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

pok*_*oke 5

对于使用ASP.NET核心认证堆栈适当证书认证,您还可以检查出idunno.Authentication.Certificate巴里·多兰斯自己。它允许您为应用程序启用证书身份验证并像处理任何其他身份验证方案一样处理它,因此您可以将实际的基于证书的逻辑排除在业务逻辑之外。

这个项目类型包含ASP.NET Core证书身份验证的实现。证书身份验证发生在 TLS 级别,早在它到达 ASP.NET Core 之前,因此,更准确地说,这是一个身份验证处理程序,用于验证证书,然后为您提供一个事件,您可以在其中将该证书解析为 ClaimsPrincipal。

您必须为证书身份验证配置您的主机,无论是 IIS、Kestrel、Azure Web 应用程序还是您正在使用的任何其他应用程序。

请务必查看有关如何正确设置的“文档”,因为它需要配置主机才能正常工作,就像您使用 IIS Express 所做的一样。包括原始 Kestrel、IIS、Azure 或一般反向代理等其他服务器的说明。