首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Web中的客户端证书和基于声明的标识

Web中的客户端证书和基于声明的标识
EN

Stack Overflow用户
提问于 2013-02-15 09:32:59
回答 2查看 2.9K关注 0票数 4

如果通过HTTPS访问作为ASP.NET Web实现的端点的客户端提供客户端证书,则该证书可通过Request.GetClientCertificate获得。但是,我想知道:是否有可能获得与.NET 4.5中的安全模型集成的基于索赔的模型提供的信息?

我想这样做的主要原因是,我需要不同的客户端才能以不同的方式访问相同的服务,所以我更倾向于从证书之类的细节中抽象出来。我希望我的控制器能够根据当前用户的索赔做出决定,而不必担心这些索赔的来源。

我知道有一种X509CertificateClaimSet类型,它看起来像是自然流:

  1. 通过TLS/SSL传递的客户端证书通过某种令牌映射过程被表示为X509CertificateClaimSet (类似于SessionSecurityTokenHandler如何处理由联邦提供者生成的传入cookie )。
  2. 索赔转换模块(从ClaimsAuthenticationManager派生并配置为<claimsAuthenticationManager>元素)检查来自证书的索赔集,并将其转换为非特定于令牌的应用程序声明。
  3. 处理程序查找特定于应用程序的声明。

甚至还有一个X509SecurityTokenHandler,听起来应该这样做。但是,据我所知,这是为在发送的消息中处理基于证书的身份验证的场景而设计的--它似乎不支持在传输级别(即作为TLS/SSL握手的一部分)证明证书所有权的场景。

我想知道我是否需要编写自己的模块来完成这个任务。理论上,它看起来可能只是处理AuthenticateRequest事件,查看对证书的请求,如果证书存在,则从证书构造一个X509CertificateClaimSet。But...then什么?我只是创建自己的ClaimsPrincipal并替换现有的用户吗?或者有什么“正确”的方法来把我发现的说法添加到片场里?(客户端证书不一定是索赔的唯一来源-我的应用程序已经使用了与ACS集成的索赔。是否有确保所有可能的索赔来源正确合并的标准机制?)

看起来,SessionAuthenticationModule (SAM)是当前提供声明主体的身份模型组件,它只是替换了以前在上下文中的组件以及当前线程的用户。但是它似乎提供了扩展性--如果覆盖它的ValidateSessionToken,则返回组成主体的一组ClaimsIdentity对象。所以在理论上,我可以推翻这一点,并在这一点上添加任何额外的声明。

但我不确定这是不是该走的路。据我所知,SAM是在ClaimsAuthenticationManager完成其声明转换之后才这样做的。或者在这里,声明转换是错误的模式吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-15 13:15:36

请看一下这里:client和索赔生成是Thinktecture.IndetityModel的一部分。

票数 6
EN

Stack Overflow用户

发布于 2013-02-15 11:10:03

如果我是您,我会将身份验证具体化--让其他一些服务提供身份验证,然后只返回带有所需声明的SAML令牌。

这样,在您的应用程序中,您并不真正地考虑证书,您只是希望联邦身份提供者能够提出一些具体的声明。

然后,您实现了一个身份提供程序来实际接受证书,但是传出的SAML隐藏了这个实现细节,并将证书转换为对应用程序有用的声明集。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14900150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档