2012-11-21 9 views
13

Sto migrando un sito ASP.Net che utilizza Active Federation e WIF 3.5 per utilizzare .Net 4.5. La funzionalità di Windows Identity Foundation (WIF 3.5) è ora completamente integrata nel .Net Framework 4.5.Come si accede alla raccolta SecurityTokenHandlers in WIF 4.5?

Poiché le classi si sono spostate su tre diversi spazi dei nomi, è principalmente una questione di traduzione meccanica. La parte con cui ho problemi è la traduzione dello GenericXmlSecurityToken emesso dal servizio token di sicurezza presso un preside di reclamo per la chiamata allo SessionAuthenticationModule.WriteSessionTokenToCookie. La documentazione è carente e ho solo bisogno di trovare il modo WIF 4.5 per accedere FederatedAuthentication.ServiceConfiguration.SecurityTokenHandlers

Ecco un frammento del 3.5 codice di WIF che non viene compilato in WIF 4.5 (creazione del canale WSTrust omesse per brevità):

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); 

risposta

14

La correzione si è rivelata abbastanza semplice (se non immediatamente ovvia).

FederatedAuthentication.ServiceConfiguration.SecurityTokenHandlers 

traduce in WIF 4.5 come

FederatedAuthentication.FederationConfiguration.IdentityConfiguration.SecurityTokenHandlers 

L'unico altro cambiamento stava sostituendo la chiamata al metodo ClaimsPrincipal.CreateFromIdentity(identity) fabbrica con new ClaimsPrincipal(identity).

riportano di seguito le frammento di lavoro:

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' - Che cosa è *** namespace *** e *** *** assemblaggio? – Kiquenet

+0

@Kiquenet 'System.IdentityModel.Services', che è un assembly separato –

Problemi correlati