2013-07-09 16 views
6

Io non so perché ma il mio FederatedAuthentication.SessionAuthenticationModule sta risolvendo come NULL e schiantarsi mia app quando provo a eseguire il mio ClaimsTransformer) modulo (:Cosa rende FederatedAuthentication.SessionAuthenticationModule restituito NULL?

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 :(
    } 

Ecco cosa c'è nel mio 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.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> 

questo mi sta facendo impazzire come io ho il codice in esecuzione in un (proof of concept) progetto senza alcun problema, e sembra è tutto quello che ho bisogno di ottenere questa funzionalità di lavoro, ma per qualche strana ragione, quando cerco di implementare nel nostro vero progetto, il mio FederatedAuthentication.SessionAuthenticationModule è sempre NULL.

Cosa mi manca qui? Qualche idea? Perché il SessionAuthenticationModule non si sta inizializzando correttamente?

+0

Perché si aggiungono tre 'rimuovere' nodo prima di aggiungere SessionAuthenticationModule? –

+0

Nel caso in cui l'impostazione sia stata aggiunta da qualche altra parte nella catena .config. Rimuovendo poi aggiunto che ho visto prima, e visto che il mio codice non funzionava, stavo provando tutto ... – user1265146

risposta

11

Ho lo stesso comportamento con il progetto già funzionante e FederatedAuthentication.WSFederationAuthenticationModule.

Problema risolto il passaggio da IIS Express a IIS completo (unione errata di file di progetto).

Inoltre è possibile provare a inserire questo modulo non solo a una sezione, ma:

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

Si può fare riferimento a questo MSDN article per un campione.

+0

Sì .. Ho scoperto il problema Casini solo l'altro giorno, solo per caso come un altro sviluppatore stava usando IIS, e necessario per cambiare la porta localmente sul progetto e questa è stata verificata in TFS :) – user1265146

+2

IIS * Express * (o IIS completo) funziona per me, solo non Visual Studio Development Server ("Cassini"). – tjrobinson

1

Ho riscontrato questo problema e l'ho appena risolto aggiungendo quanto segue al mio web.config. Vale la pena provare se qualcun altro ha lo stesso problema.

<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

Controlla la tua 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> 
Problemi correlati