2012-11-21 6 views
13

Ich migriere eine ASP.Net-Site, die Active Federation und WIF 3.5 verwendet, um .Net 4.5 zu verwenden. Die Funktionalität von Windows Identity Foundation (WIF 3.5) wurde jetzt vollständig in das .NET 4.5 Framework integriert.Wie komme ich zur SecurityTokenHandlers-Sammlung in WIF 4.5?

Da Klassen in drei verschiedene Namespaces verschoben wurden, handelt es sich hauptsächlich um eine mechanische Übersetzung. Der Teil, mit dem ich Probleme habe, übersetzt die GenericXmlSecurityToken, die von der STS ausgestellt wurde, zu einem Claims Principal für den Anruf zu SessionAuthenticationModule.WriteSessionTokenToCookie. Die Dokumentation fehlt und ich brauche nur die WIF 4.5 Weg zu finden FederatedAuthentication.ServiceConfiguration.SecurityTokenHandlers

Hier zuzugreifen, ist ein Ausschnitt des WIF 3.5 Code, der nicht WIF 4.5 (WS-Trust-Kanal Schaffung der Kürze halber weggelassen) nicht kompiliert in:

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

Antwort

14

Das Update erwies sich als ziemlich einfach (wenn nicht sofort offensichtlich).

FederatedAuthentication.ServiceConfiguration.SecurityTokenHandlers 

übersetzt WIF 4.5 als

FederatedAuthentication.FederationConfiguration.IdentityConfiguration.SecurityTokenHandlers 

Die einzige andere Änderung der ClaimsPrincipal.CreateFromIdentity(identity) Fabrik Methodenaufruf mit new ClaimsPrincipal(identity) wurde ersetzt.

Unten ist die Arbeits Schnipsel:

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' - Was ist *** Namensraum *** und *** Montage ***? – Kiquenet

+0

@Kiquenet 'System.IdentityModel.Services', das eine separate Assembly ist –