首页 > 解决方案 > 具有客户端证书身份验证的 .Net Core Web API

问题描述

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

}

然后我安装了一个自签名证书并添加到受信任的根目录中,从而启用客户端身份验证目的。

在此处输入图像描述

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

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

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

标签: asp.netasp.net-corecertificate

解决方案


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

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

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

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


推荐阅读