如何访问WIF 4.5中的SecurityTokenHandlers集合?

时间:2012-11-21 18:07:50

标签: .net wif .net-4.5

我正在迁移一个使用Active Federation和WIF 3.5的ASP.Net站点来使用.Net 4.5。 Windows Identity Foundation(WIF 3.5)的功能现已完全集成到.Net 4.5 Framework中。

由于类已移至三个不同的名称空间,因此主要是机械翻译问题。我遇到问题的部分是将STS发出的GenericXmlSecurityToken翻译为声明委托人以致SessionAuthenticationModule.WriteSessionTokenToCookie。缺少文档,我只需要找到WIF 4.5访问FederatedAuthentication.ServiceConfiguration.SecurityTokenHandlers

的方法

以下是无法在WIF 4.5中编译的WIF 3.5代码片段(为简洁省略了WSTrust通道创建):

var genericToken = channel.Issue(rst) as GenericXmlSecurityToken;

var handlers = FederatedAuthentication.ServiceConfiguration.SecurityTokenHandlers;

var token = handlers.ReadToken(new XmlTextReader(new StringReader(genericToken.TokenXml.OuterXml)));
var identity = handlers.ValidateToken(token).First();

var sessionToken = new SessionSecurityToken(ClaimsPrincipal.CreateFromIdentity(identity),
                                            TimeSpan.FromMinutes(20));

FederatedAuthentication.SessionAuthenticationModule.WriteSessionTokenToCookie(sessionToken);

1 个答案:

答案 0 :(得分:15)

修复结果相当简单(如果不是很明显)。

FederatedAuthentication.ServiceConfiguration.SecurityTokenHandlers

转换为WIF 4.5     

FederatedAuthentication.FederationConfiguration.IdentityConfiguration.SecurityTokenHandlers

唯一的其他变化是用ClaimsPrincipal.CreateFromIdentity(identity)替换new ClaimsPrincipal(identity)工厂方法调用。

以下是工作片段:

var handlers = FederatedAuthentication.FederationConfiguration.IdentityConfiguration.SecurityTokenHandlers;

var token = handlers.ReadToken(new XmlTextReader(new StringReader(genericToken.TokenXml.OuterXml)));
var identity = handlers.ValidateToken(token).First();

var sessionToken = new SessionSecurityToken(new ClaimsPrincipal(identity),
                                            TimeSpan.FromMinutes(20));

FederatedAuthentication.SessionAuthenticationModule.WriteSessionTokenToCookie(sessionToken);