【问题标题】:.Net Core Web API with Client Certificate Authentication具有客户端证书身份验证的 .Net Core Web API
【发布时间】:2018-12-13 12:16:54
【问题描述】:

我在 .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 请求客户端证书?

【问题讨论】:

  • 浏览器不关心windows受信任的根目录,他们有自己的列表,但是本地运行的IIS会:-)
  • 看来证书需要从 CurrentUser/My 路径读取。如果我在这里错了,请纠正我。

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


【解决方案1】:

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

这个项目包含一个针对 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 或一般反向代理等其他服务器的说明。

【讨论】:

    【解决方案2】:

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

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

    确保设置了以下值:

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

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

    【讨论】:

    • 您好在我的情况下,在 \.vs\config\applicationhost.config 更改后调试根本没有开始 - VS 显示错误:“无法启动进程 C:\program files\dotnet\dotnet .exe。Web 服务器请求失败,状态码为 403。Forbidden.." 而 IIS express 也没有。
    【解决方案3】:

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

    适合需要的人 Details here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      • 2011-09-26
      相关资源
      最近更新 更多