加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – Web API中的客户端证书和基于声明的身份

发布时间:2020-12-16 06:32:09 所属栏目:asp.Net 来源:网络整理
导读:如果访问通过HTTPS实现为ASP.NET Web API Controller的端点的客户端提供客户端证书,则该证书可通过Request.GetClientCertificate获得.但是,我想知道:是否有可能以基于声明的模型的形式提供与.NET 4.5中的安全模型集成的信息? 我想这样做的主要原因是我需要
如果访问通过HTTPS实现为ASP.NET Web API Controller的端点的客户端提供客户端证书,则该证书可通过Request.GetClientCertificate获得.但是,我想知道:是否有可能以基于声明的模型的形式提供与.NET 4.5中的安全模型集成的信息?

我想这样做的主要原因是我需要不同的客户端才能以不同的方式进行身份验证以访问相同的服务,因此我更愿意从证书等细节中抽象出来.我希望我的控制器能够根据当前用户的索赔做出决策,而不必担心这些索赔的起源.

我知道有一个X509CertificateClaimSet类型,这使得它看起来像自然流程:

>通过TLS / SSL传递的客户端证书通过某种令牌映射过程表示为X509CertificateClaimSet(类似于您可以用于ACS的联合提供程序生成的传入cookie由SessionSecurityTokenHandler处理的方式)
>声明转换模块(从ClaimsAuthenticationManager派生并使用< claimsAuthenticationManager>元素配置)检查来自证书的声明集,并将其转换为特定于非令牌的特定于应用程序的声明
>处理程序查找特定于应用程序的声明.

甚至还有一个X509SecurityTokenHandler,听起来应该这样做.但是,据我所知,这是针对在发送的消息中处理基于证书的身份验证的情况而设计的 – 它似乎没有任何支持证书的所有权证明发生在传输级别,即作为TLS / SSL握手的一部分.

我想知道是否需要编写自己的模块来执行此操作.从理论上讲,看起来可能只是处理AuthenticateRequest事件,查看证书请求,如果存在,则从证书构建X509CertificateClaimSet.但是……那又怎样?我只是创建自己的ClaimsPrincipal并替换现有用户吗?或者是否有一些“正确”的方式将我发现的声明添加到集合中? (客户端证书不一定是声明的唯一来源 – 我的应用程序已经在使用与ACS集成的声明.是否有一种标准机制来确保所有可能的声明来源都正确合并?)

它看起来像SessionAuthenticationModule(SAM)是当前提供声明主体的身份模型组件,它只是替换先前在上下文中的那个以及当前线程的用户.但它似乎提供了可扩展性 – 如果覆盖其ValidateSessionToken,则返回构成主体的ClaimsIdentity对象集.所以在理论上,我可以覆盖它并在那时添加任何其他声明.

但我不确定这是不行的方式.据我所知,SAM在ClaimsAuthenticationManager完成其声明转换后执行此操作.或者声称转换错误的模型与这里一起去?

解决方法

看看 here:客户端证书身份验证和声明生成是Thinktecture.IndetityModel的一部分.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读