我正在迁移一个使用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);
答案 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);