2
我正在构建自己的处理不同种类协议(WS-Federation,OAuth等)的STS。我被困在处理由ADFS 2发布给我的STS的RSTR令牌。使用WIF反序列化来自RSTR令牌的声明
我已成功反序列化声明的代码,但是我必须添加部分microsoft.identityModel配置部分才能使其工作,并且我需要在Trusted People商店中添加ADFS 2签名证书。
我有我自己的配置部分,我使用microsoft.identityModel指定的东西是多余的。
代码:
var request = System.Web.HttpContext.Current.Request;
var message = SignInResponseMessage.CreateFromFormPost(request) as SignInResponseMessage;
var rstr = new WSFederationSerializer().CreateResponse(message, new WSTrustSerializationContext());
var serviceConfig = new ServiceConfiguration();
IClaimsIdentity claimsIdentity = null;
using (var reader = XmlReader.Create(
new StringReader(rstr.RequestedSecurityToken.SecurityTokenXml.OuterXml)))
{
var token = serviceConfig.SecurityTokenHandlers.ReadToken(reader);
claimsIdentity = serviceConfig.SecurityTokenHandlers.ValidateToken(token).FirstOrDefault();
}
return claimsIdentity;
,我想避免必要的配置:
<microsoft.identityModel>
<service>
<audienceUris mode="Never">
</audienceUris>
<issuerNameRegistry type="Microsoft.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<trustedIssuers>
<add thumbprint="27d3db77a9716ad370a7e9c632d5b98dcc5b1479" name="https://UrlToAdfs/adfs/ls/" />
</trustedIssuers>
</issuerNameRegistry>
</service>
</microsoft.identityModel>
这就是做到这一点的方法,但我仍然需要在配置中指定它。 我已经看到了Azure ACS,我必须说它有一些很棒的功能。问题是我们正在研究创建自己的STS有多困难。谢谢您的帮助。 – shizik