我需要将 IE 中的 ActiveX 智能卡身份验证升级为 .NET 5 中的 Blazor Web 身份验证。必须通过带有 PIN 的智能卡进行身份验证。我设置了identityServer4作为在ASP.NET Core中配置证书身份验证,但是当调用登录页面时,智能卡读卡器不会读取客户端中插入的智能卡。我需要根据要在客户端智能卡中读取的证书来验证服务器上的登录。
有没有办法通过 Blazor 客户端页面来实现这一目标?
如果您想从身份服务器中的控制器读取智能卡信息,您可以使用:
var cert = Request.HttpContext.Connection.ClientCertificate;
我也在进行同样的斗争。 我能够让 IdentityServer4 进行智能卡身份验证,但它不会传回令牌。 我将其修改为使用不同的身份验证方法,但我从智能卡中获取了信息。 这对我来说有点作用。 我希望有更好的方法。
客户要求放弃身份服务器,我被迫想办法解决问题。 我创建了一个 WebApi 并将其配置为需要证书,如 https://learn.microsoft.com/en-us/aspnet/core/security/authentication/certauth?view=aspnetcore-5.0 。 您在WebApi中公开的任何方法都需要证书并且您可以通过它
X509Certificate2 clientCertificate = await HttpContext.Connection.GetClientCertificateAsync();
并根据您的需要进行处理,即返回指纹。
在服务器上,您需要在受信任的证书根中安装与您的智能卡相关的证书颁发机构才能使 webapi 正常工作,否则您会收到“禁止”响应(https://learn.microsoft.com/en-us/ skype-sdk/sdn/articles/installing-the-trusted-root-certificate)。
在 Blazor 客户端端,您只需调用 webapi 端点,智能卡就会被读取,然后您输入正确的安全代码即可获得您需要的响应