我正在构建一个小型 ASP.NET Core 应用程序。其中一项要求是授予用户通过证书而不是使用登录名/密码对登录的能力。
登录页面示例
我找到了几个例子,通常它们基于以下方法
用户为选定的 Web 浏览器安装 CSP(加密服务提供商)插件(插件提供通过 JavaScript API 调用直接从浏览器访问用户证书存储、签名数据等的功能)
登录表单包含隐藏的输入字段,其中包含预先生成的 XML 文档。
xml文档示例
<loginrequest>
<currentTimestamp>123456789012345678</currentTimestamp>
<requestGuid>ba3d3b37-319f-4551-8c15-1abe4dce854e</requestGuid>
</loginrequest>
- 用户从证书列表中选择证书
- 用户按下登录按钮(登录按钮具有通过 CSP 浏览器插件签署 Xml 文档的 onClick 处理程序)
- 表单已提交(表单字段包括 - 签名的 xml 文档数据、选定的证书指纹、原始 xml 文档)
- 在服务器端签名的 xml 文档已根据指纹进行验证。如果签名有效,系统通过匹配指纹在数据库中搜索相应的用户(数据库中的每个用户都有指纹列)。如果发现用户,服务器会在让他进入时发出 JWT 访问令牌。
我对以下问题感兴趣
- 这种方法是否有任何类型的规范(如 OAuth 2.0 中的 Mutual-TLS),其中包含有关 Xml 生成文档的内容以及如何正确验证它的详细信息?
- 还有其他方法可以通过 ASP.NET Core Web 应用程序中的证书对用户进行身份验证吗?
