我在.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.NET Core 身份验证堆栈进行正确的证书身份验证,您还可以查看idunno.身份验证.证书 https://www.nuget.org/packages/idunno.Authentication.Certificate by 巴里·多兰斯 https://twitter.com/blowdart他自己。它允许您为应用程序启用证书身份验证,并像任何其他身份验证方案一样处理它,因此您可以将实际的基于证书的逻辑保留在业务逻辑之外。
这个项目有点包含一个实现证书认证 https://www.rfc-editor.org/rfc/rfc5246#section-7.4.4对于 ASP.NET Core。证书身份验证发生在 TLS 级别,早在它到达 ASP.NET Core 之前,因此,更准确地说,这是一个验证证书的身份验证处理程序,然后为您提供一个事件,您可以在其中将该证书解析为 ClaimsPrincipal。
你必须配置你的主机 https://github.com/blowdart/idunno.Authentication/blob/master/src/idunno.Authentication.Certificate/README.md#hostConfiguration用于证书身份验证,无论是 IIS、Kestrel、Azure Web 应用程序还是您正在使用的任何其他内容。
请务必查看“文档” https://github.com/blowdart/idunno.Authentication/blob/master/src/idunno.Authentication.Certificate/README.md关于如何正确设置它,因为它需要主机的配置 https://github.com/blowdart/idunno.Authentication/blob/master/src/idunno.Authentication.Certificate/README.md#configuring-your-host-to-require-certificates正常工作,就像使用 IIS Express 一样。其中包括针对其他服务器(例如原始 Kestrel、IIS、Azure 或一般反向代理)的说明。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)