2013-04-11 15 views
13

Ho un problema strano intermittente con MVC4/IIS/Autenticazione moduli.MVC4/IIS/Autenticazione moduli Autenticazione SSO

Ho un paio di siti che passano il controllo l'un l'altro utilizzando SSO. La maggior parte delle volte il passaggio di consegne avviene correttamente e l'utente viene reindirizzato al sito successivo come previsto. Tuttavia, in alcuni casi, all'utente viene chiesto di accedere nuovamente, anche se le informazioni SSO valide sono state inviate. Il metodo SSO è decorato con l'attributo [AllowAnonymous] e il numerodispone anche di una posizione che garantisce l'accesso a /account/sso a tutti gli utenti.

Sembra che si verifichi quando il sito di destinazione viene colpito per la prima volta, una volta che il pool di applicazioni si è riscaldato, il problema scompare.

Alcuni altri punti:

1 entrambi i siti sono .net 4, quindi non ci dovrebbero essere problemi di crittografia legacy.
2. questo problema accade molto raramente (< il 10% del tempo) in modo che il codice stesso dovrebbe essere sana
3. Hosting è IIS 7.5 sul win7x64 localmente, e azzurro - avviene in entrambi i luoghi
4. sembra essere indipendente dal browser

<location path="account/sso"> 
    <system.web> 
     <authorization> 
      <allow users="*" /> 
     </authorization> 
    </system.web> 
</location> 

[Authorize] 
public class AccountController : BaseControllerTestable 
{ 
    public AccountController() 
     : base() 
    { 
    } 

    [AllowAnonymous] 
    public ActionResult SSO(string AuthToken, string Target) 
    { 
     //SSO logic here 

    } 
} 

Qualche idea?

+0

La schermata di accesso viene visualizzata all'avvio di una nuova sessione? Come è impostato il timeout della sessione per entrambe le app Web? hanno pool di applicazioni diversi? queste piscine hanno un ambiente di riciclaggio? ha reso definibili i contatori delle prestazioni dei siti e ha registrato i contatori delle prestazioni rilevanti del sito come il timeout della sessione, le ricompilazioni? – Siraf

+0

Sembra decisamente non un problema di codice. La mia ipotesi potrebbe essere il timeout dei cookie se si utilizzano i cookie o il riciclo del pool di app.Metti un po 'di traccia nella tua logica di autenticazione, il metodo SSO viene eseguito quando si verifica il problema? – Sergey

risposta

0

Penso di aver finalmente risolto esso (sapremo solo per sicuro che una volta che abbiamo avuto un buon tempo senza recidiva dato che era intermittente comunque)

un paio di fattori è entrato in gioco. Innanzitutto ho notato alcuni elementi statici (file css + js in gran parte) che venivano catturati nel ciclo di autenticazione anche se dovevano essere liberamente accessibili, quindi ho aggiunto una regola di posizione in web.config per assicurarmi che fossero consentiti agli utenti anonimi. Ho anche aggiunto un'eccezione di route per ignorare anche le richieste di favicon.ico. Questo sembrava impedire al codice di inciampare su se stesso durante l'autenticazione per la prima volta. Infine, il motivo per cui il problema era intermittente era dovuto a un altro bug in cui, se erano aperte altre sessioni (guidato da db), il problema non si verificava. questo spiegava perché il bug si verificava solo nelle prime ore del mattino, cioè: tutte le sessioni del giorno precedente erano scadute.

0

Qual è il tuo BaseControllerTestable? Hai degli attributi di autorizzazione? La tua classe Base verrà immediatamente creata prima che raggiunga gli altri tuoi metodi nella classe derivata. Quindi se per caso hai [Autorizza] sul controller di base che potrebbe essere un problema per te.

1

Si dispone di un attributo Autorizza sulla classe Controller che indica che il metodo SSO avrebbe applicato AllowAnonymous e Authorize. In questo caso l'attributo Authorize sembra che debba essere rimosso.

Problemi correlati