Mar*_*son 15 .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中.
由于类已移至三个不同的名称空间,因此主要是机械翻译问题.我遇到问题的部分是将GenericXmlSecurityTokenSTS发布的部分翻译成索赔委托人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);
Run Code Online (Sandbox Code Playgroud)
Mar*_*son 16
结果很简单(如果不是很明显的话).
FederatedAuthentication.ServiceConfiguration.SecurityTokenHandlers
Run Code Online (Sandbox Code Playgroud)
转换为WIF 4.5 as
FederatedAuthentication.FederationConfiguration.IdentityConfiguration.SecurityTokenHandlers
Run Code Online (Sandbox Code Playgroud)
唯一的另一个变化是用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);
Run Code Online (Sandbox Code Playgroud)