我的背景:
- .Net RESTful 网络服务
- 客户端(混合平台、技术、库功能)已获得 SAML 令牌
- 尝试接受令牌以在 REST 服务中进行身份验证/授权
- 在 HTTP Authorization / X-Authorization 标头中
- 作为查询参数
- 稍后还将支持 SWT,但需要获取 SAML 令牌
细节:
我在字符串中有一个 SAML 令牌:
<saml:Assertion xmlns:saml="..." ...> ..etc... </>
在 HttpModule 中,我想将其转换为 ClaimsPrincipal 以便我的服务可以将通常的 Thread.CurrentPrincipal 用作 IClaimsPrincipal 的东西。
我发现了几个诱人的页面/博客/等...看起来很有帮助:
我一直试图将 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);
感谢您帮助我摆脱困境!
泰勒