2012-11-21 30 views
13

我正在遷移使用Active Federation和WIF 3.5以使用.Net 4.5的ASP.Net站點。 Windows Identity Foundation(WIF 3.5)的功能現已完全集成到.Net 4.5框架中。如何訪問WIF 4.5中的SecurityTokenHandlers集合?

由於類已經轉移到三個不同的名稱空間,所以主要是機械翻譯。我遇到問題的部分是將STS發行的GenericXmlSecurityToken翻譯成索賠負責人,致電SessionAuthenticationModule.WriteSessionTokenToCookie。該文檔缺乏,我只需要找到WIF 4.5的方式來訪問FederatedAuthentication.ServiceConfiguration.SecurityTokenHandlers

這裏是WIF 3.5代碼無法編譯WIF 4.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); 

回答

14

修復結果相當簡單(如果不是很明顯)。

FederatedAuthentication.ServiceConfiguration.SecurityTokenHandlers 

轉化爲WIF 4.5作爲

FederatedAuthentication.FederationConfiguration.IdentityConfiguration.SecurityTokenHandlers 

唯一的其他變化與new ClaimsPrincipal(identity)更換ClaimsPrincipal.CreateFromIdentity(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); 
+1

'FederatedAuthentication.FederationConfiguration.IdentityConfiguration.SecurityTokenHandlers' - 什麼是***命名空間***和*** ***組裝? – Kiquenet

+0

@Kiquenet'System.IdentityModel.Services',它是一個獨立的程序集 –