2013-07-09 15 views
6

Ich bin nicht sicher, warum, aber meine FederatedAuthentication.SessionAuthenticationModule auflöst als NULL und stürzt meine Anwendung, wenn ich versuche, meine ClaimsTransformer() Modul auszuführen:Was bewirkt, dass das FederatedAuthentication.SessionAuthenticationModule NULL zurückgibt?

public void EstablishSession(ClaimsPrincipal principal) 
    { 
     var sessionToken = new SessionSecurityToken(principal, TimeSpan.FromHours(8)) 
     { 
      IsPersistent = false, // make persistent 
      IsReferenceMode = true // cache on server 
     }; 


     FederatedAuthentication.SessionAuthenticationModule.WriteSessionTokenToCookie(sessionToken); 
     // FederatedAuthentication.SessionAuthenticationModule == null and I throw an error :(
    } 

Hier ist, was in meinem web.config ist:

<configSections> 
    <section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> 
    <section name="system.identityModel.services" type="System.IdentityModel.Services.Configuration.SystemIdentityModelServicesSection, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> 
</configSections> 
<system.web> 
    <authentication mode="None" /> 
</system.web> 
<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
    <remove name="RoleManager" /> 
    <remove name="FormsAuthentication" /> 
    <remove name="SessionAuthenticationModule" /> 
    <add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    </modules> 
</system.webServer> 
<system.identityModel> 
    <identityConfiguration> 
    <claimsAuthenticationManager type="Web.Infrastructure.Authentication.ClaimsTransformer, Web" /> 
    </identityConfiguration> 
</system.identityModel> 
<system.identityModel.services> 
    <federationConfiguration> 
    <cookieHandler requireSsl="false" /> 
    </federationConfiguration> 
</system.identityModel.services> 

Dies macht mich wahnsinnig, da ich den Code in einem (Proof of Concept) Projekt ohne Probleme läuft, und erscheint ist alles was ich brauche, um diese Funktionalität funktioniert, aber aus irgendeinem seltsamen Grund, wenn ich versuche zu implementieren In unserem realen Projekt ist mein FederatedAuthentication.SessionAuthenticationModule immer NULL.

Was fehlt mir hier? Irgendwelche Ideen? Warum wird das SessionAuthenticationModule nicht korrekt initialisiert?

+0

Warum Sie drei hinzufügen 'entfernen' Knoten vor SessionAuthenticationModule Zugabe? –

+0

Falls die Einstellung an einer anderen Stelle in der .config-Kette hinzugefügt wurde. Entfernen Sie dann habe ich vorher gesehen habe, und da mein Code nicht funktioniert, war ich alles versucht ... – user1265146

Antwort

11

Ich habe fast gleiches Verhalten mit bereits bestehenden Projekt und FederatedAuthentication.WSFederationAuthenticationModule.

Problem gelöst mein Umschalten von IIS Express vollständiger IIS (schlechte Verschmelzung der für die Projektdatei).

Sie können auch versuchen, dieses Modul nicht nur auf einen Abschnitt hinzuzufügen, aber:

<system.web> 
<httpModules> 
<add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 

Sie auf diese MSDN article für eine Probe beziehen.

+0

Ja .. ich das Casini Problem nur den anderen Tag entdecken, nur durch Zufall als ein anderer Entwickler IIS wurde mit und benötigen den Port lokal auf dem Projekt zu ändern, und es wurde in TFS :) – user1265146

+2

IIS * Express * (oder Voll IIS) geprüft funktioniert für mich, nur nicht den Visual Studio Development Server („Cassini“). – tjrobinson

1

Ich habe dieses Problem wurde und löste es nur, indem Sie die folgend meine web.config. Einen Versuch wert, wenn jemand anderes das gleiche Problem hat.

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <remove name="FormsAuthenticationModule" /> 
     <add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"></add> 
    </modules> 
    </system.webServer> 
0

Überprüfen Sie Ihre web.config:

<configSections> 
    <section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> 
    <section name="system.identityModel.services" type="System.IdentityModel.Services.Configuration.SystemIdentityModelServicesSection, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> 
</configSections> 

<system.webServer> 
    <modules> 
     <add name="SessionAuthenticationModule" 
      type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    </modules> 
</system.webServer> 

<system.identityModel.services> 
    <federationConfiguration> 
     <cookieHandler requireSsl="false" /> 
    </federationConfiguration> 
</system.identityModel.services>