2012-11-21 8 views
13

Przeprowadzam migrację witryny ASP.Net, która używa Active Federation i WIF 3.5 do korzystania z .Net 4.5. Funkcjonalność Windows Identity Foundation (WIF 3.5) została w pełni zintegrowana z .Net 4.5 Framework.Jak dostać się do kolekcji SecurityTokenHandlers w WIF 4.5?

Ponieważ klasy przeniosły się do trzech różnych przestrzeni nazw, jest to głównie kwestia mechanicznego tłumaczenia. Część, z którą mam problem, jest tłumaczeniem numeru GenericXmlSecurityToken wydanego przez STS na Główcę Roszczeń w celu uzyskania połączenia z SessionAuthenticationModule.WriteSessionTokenToCookie. Dokumentacja brakuje i po prostu trzeba znaleźć drogę WIF 4.5, aby uzyskać dostęp FederatedAuthentication.ServiceConfiguration.SecurityTokenHandlers

Oto urywek z WIF 3.5 kodu, który nie kompiluje w WIF 4.5 (tworzenie kanału WSTrust pominięty dla zwięzłość):

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

Odpowiedz

14

Poprawka okazała się dość prosta (jeśli nie jest od razu oczywista).

FederatedAuthentication.ServiceConfiguration.SecurityTokenHandlers 

przekłada się WIF 4.5 jako

FederatedAuthentication.FederationConfiguration.IdentityConfiguration.SecurityTokenHandlers 

Jedyną zmianą było zastąpienie ClaimsPrincipal.CreateFromIdentity(identity) fabryczną metodę połączenia z new ClaimsPrincipal(identity).

Poniżej znajduje się fragment pracy:

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' - Czym jest przestrzeń nazw *** *** *** i montaż ***? – Kiquenet

+0

@Kiquenet 'System.IdentityModel.Services', który jest osobnym zestawem –

Powiązane problemy