我在.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");
}
}
然后安装了一个自签名证书并添加到Trusted Root中,以实现客户端身份验证目的。
但是变量 cert 总是空的,并且当我请求页面时浏览器甚至没有提示我使用证书。
我想是因为我必须在某个地方设置Web服务器必须要求客户端证书,因为它可以在IIS中设置,但在我的开发环境中,我使用的是IIS Express。
如何强制IIS Express请求客户端证书?
4条答案
按热度按时间30byixjq1#
为了使用ASP.NET核心身份验证堆栈进行正确的证书身份验证,您还可以通过Barry Dorrans自己检查idunno.Authentication.Certificate。它允许您为应用程序启用证书身份验证,并像处理任何其他身份验证方案一样处理它,因此您可以将实际的基于证书的逻辑排除在业务逻辑之外。
这个项目包含了ASP.NET核心的证书身份验证的实现。证书身份验证发生在TLS级别,早在它到达ASP.NET核心之前,所以,更准确地说,这是一个验证证书的身份验证处理程序,然后给你一个事件,你可以在那里将证书解析为ClaimsPrincipal。
您必须为证书身份验证配置您的主机,无论是IIS、Kestrel、Azure Web应用程序还是您正在使用的任何其他主机。
请确保也检查了“documentation”关于如何正确设置它,因为它需要主机的配置才能正常工作,就像你对IIS Express所做的那样。
svgewumm2#
为了使IIS Express能够开始请求客户端证书并将其传递到服务器端,必须编辑配置文件:
整个配置位于.vs\config\applicationhost.config中的解决方案文件夹内
确保设置了以下值:
和
plicqrtu3#
对于本地测试,可以从Visual Studio在IIS Express中启用SSL。在“属性”窗口中,将“SSL已启用”设置为True。注意SSL URL的值。使用此URL测试HTTPS连接。
适用于需要Details here的用户
envsm3lx4#
对于.NET 3.1+,现在有官方软件包支持此功能:
服务器端也需要进行配置,请参阅:
https://learn.microsoft.com/en-us/aspnet/core/security/authentication/certauth?view=aspnetcore-6.0