【发布时间】:2011-02-03 11:10:34
【问题描述】:
我的背景:
- .Net RESTful Web 服务
- 客户端(混合平台、技术、库功能)已获得 SAML 令牌
- 尝试接受令牌以在 REST 服务中进行身份验证/授权
- 在 HTTP 授权/X-Authorization 标头中
- 作为查询参数
- 稍后也会支持 SWT,但需要让 SAML 令牌运行
详情:
我在字符串中有一个 SAML 令牌:
<saml:Assertion xmlns:saml="..." ...> ..etc... </>
在 HttpModule 中,我想将其转换为 ClaimsPrincipal 以便我的服务可以像 IClaimsPrincipal 一样执行通常的 Thread.CurrentPrincipal。
我发现了一些看起来很有帮助的诱人页面/博客/等:
- Cibrax's Idea for passing the token in the HTTP Authorization header
- Dominick Baier on something similar for SWT, with mention of easily doing same for SAML
我一直在试图将 SAML 令牌转换为 ClaimsPrincipal(通过 SecurityToken 中间步骤或直接......无论哪种方式都很高兴)。 Cibrax 想法的示例代码使用以下关键验证和反序列化步骤:
SecurityTokenSerializer securityTokenSerializer
= new SecurityTokenSerializerAdapter(
FederatedAuthentication.SecurityTokenHandlers,
MessageSecurityVersion.Default.SecurityVersion,
false, new SamlSerializer(), null, null);
SecurityToken theToken
= WSFederationAuthenticationModule.GetSecurityToken(
theSamlTokenInStringForm, securityTokenSerializer);
我遇到的障碍是 WIF 的 RTM 版本没有公开 GetSecurityToken 的这种重载......它只公开:
WSFederationAuthenticationModule fam = new WSFederationAuthenticationModule();
SecurityToken theToken = fam.GetSecurityToken(HttpRequest theRequest);
SecurityToken theToken = fam.GetSecurityToken(SignInResponseMessage message);
感谢您帮助我摆脱困境!
泰勒
【问题讨论】:
-
我正在寻找可以处理加密 SWT 和 SAML 令牌的类似解决方案。我最感兴趣的是获得一个不会修改我现有会话凭据的安全令牌。
-
你得到最终解决方案了吗?未标记答案...
-
@LamonteCristo 类似的解决方案?