Dot-Net
如何訪問 WIF 4.5 中的 SecurityTokenHandlers 集合?
我正在遷移一個使用 Active Federation 和 WIF 3.5 的 ASP.Net 站點以使用 .Net 4.5。Windows Identity Foundation (WIF 3.5) 的功能現已完全集成到 .Net 4.5 框架中。
由於類已移至三個不同的名稱空間,因此主要是機械翻譯問題。我遇到問題的部分是
GenericXmlSecurityToken將 STS 發布的內容轉換為 Claims Principal 以呼叫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);
修復結果相當簡單(如果不是很明顯)。
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);