5

Sto utilizzando System.IdentityModel per autenticare gli utenti in un'applicazione Web ASP.NET MVC4 utilizzando i moduli auth con un'entità sinistri. (codice basato su questo articolo: http://brockallen.com/2013/01/26/replacing-forms-authentication-with-wifs-session-authentication-module-sam-to-enable-claims-aware-identity/)SessionAuthenticationModule Cookie Handler che non crea cookie HttpOnly sicuro

My ClaimsBasedAuthenticationService classe emette il cookie SAM dal SessionSecurityToken, e tutto è andato bene ... tranne che ho appena notato che non sta creando i cookie di sessione come HTTPOnly o che richiede loro per richiedere SSL. Quando eseguo il debug del codice, posso vedere che quelle proprietà sull'oggetto CookieHandler sono impostate correttamente nel debugger, ma il cookie della sessione finale che viene creato semplicemente non ha i contrassegni HTTPOnly e Secure.

ho le linee web.config per impostare questi true esplicitamente come tale:

<system.web> 
    <httpCookies httpOnlyCookies="true" requireSSL="true" /> 
    <authentication mode="Forms"> 
    <forms ... requireSSL="true" /> 
    </authentication> 
... 
</system.web> 
<system.identityModel.services> 
    <federationConfiguration> 
    <cookieHandler requireSsl="true" hideFromScript="true" /> 
    </federationConfiguration> 
</system.identityModel.services> 

Qualcuno può dirmi se c'è qualche altra cosa che mi manca in modo che i miei biscotti FedAuth per essere nascosto dallo script (HTTPOnly) e richiedono SSL?

+0

qualcuno ha suggerito di aggiungere l'attributo lockItem = "true" all'elemento httpCookies, ma che non ha fare qualsiasi cosa –

risposta

0

Sto utilizzando la stessa implementazione e non vedo il problema utilizzando Fiddler2. Tuttavia, forse il problema è legato al tuo strumento di debug? Negli strumenti di debug di IE10 i flag di sicurezza e solo http vengono visualizzati solo quando i cookie vengono ricevuti per la prima volta. Se controlli utilizzando gli strumenti di debug di Chrome, dovresti vedere i flag visualizzati correttamente su tutte le richieste.

+0

Gli strumenti di sviluppo di Chrome non lo mostrano. Ho provato w/Fiddler2, ma non mostrerò nemmeno l'intera richiesta, solo un "tunnel" per il nome host. Non sono sicuro del perché Fiddler non mostri i dettagli della richiesta/risposta come gli strumenti di sviluppo. –

+0

Hai configurato Fiddler per decrittografare il traffico HTTPS? Vedi Strumenti | Opzioni Fiddler quindi la scheda HTTPS); efficacemente un uomo nell'attacco centrale, ma puoi vedere ciò che devi vedere per il debugging. –

0

Hai funzionato? Ho usato praticamente lo stesso codice e va tutto bene.

non riesco a vedere che i seguenti suggerimenti hanno nulla a che fare con qualsiasi cosa, ma le uniche cose che posso suggerire, sono per impostare la durata dei cookie

<cookieHandler hideFromScript="true" requireSsl="true" persistentSessionLifetime="30" /> 

<forms loginUrl="/Whereever" timeout="30" requireSSL="true" /> 

e

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

Non lavoro su quel progetto da un po 'di tempo, ma se ricordo, penso che l'attributo fosse impostato correttamente, e gli strumenti di sviluppo stavano mentendo:) ... o almeno questo è quello che mi piace pensare. –

Problemi correlati