2009-09-21 12 views
5

Sto cercando di creare un'applicazione che utilizza <autorizzazione> regole per limitare i gruppi che sono autorizzati ad accedere all'applicazione. Sto usando l'autenticazione di Windows e il provider di ruolo di Windows per ASP.NET (AspNetWindowsTokenRoleProvider). Sto usando gruppi locali per definire i ruoli, come il dominio su cui sto sviluppando, e il dominio in cui l'app verrà distribuita sarà diverso.ASP.NET di Windows provider di ruoli (AspNetWindowsTokenRoleProvider) non accorgersi di un utente che si aggiunge a un nuovo gruppo

Quando ho impostato inizialmente la mia applicazione su un server IIS7 e ho configurato il sito per l'utilizzo dell'autenticazione di base, con il dominio predefinito appropriato, tutto funzionava correttamente per gli utenti che erano già assegnati ai gruppi autorizzati. Tuttavia, quando ho tentato di aggiungere un nuovo utente a uno dei gruppi autorizzati, questo utente non è mai stato autorizzato ad accedere all'applicazione. Ho fatto tutto salvo per il riavvio della macchina. Ho riavviato IIS così come cancellato tutti i file temporanei e i cookie sul lato client, senza alcun risultato.

Si deve affermare che si tratta di un'app ASP.Net MVC, anche se non pensavo che avrebbe fatto davvero alcuna differenza. Qui ci sono le voci pertinenti dal mio web.config:

<!-- use windows authentication --> 
<authentication mode="Windows" /> 

<!-- use the Windows role provider -->  
<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider" /> 

<!-- global authorization rules --> 
<authorization> 
    <allow roles="admins,contractors"/> 
    <deny users="*" /> 
</authorization> 

Per esempio, diciamo che abbiamo un utente, "Dominio \ joe", che non è attualmente un membro dei "amministratori" locale gruppo, ma noi voglio aggiungerlo. Andiamo ad aggiungerlo, e poi quando Joe tenta di accedere, vede un errore che non è autenticato (dopo diversi tentativi di accesso falliti). Nessuna quantità di IIS riavvia o Joe ha cancellato i suoi cookie e altri file temporanei risolveranno questo problema.

ASP.Net mantiene una sorta di cache di ruolo/gruppo segreta? Come procedi con l'aggiunta di un nuovo utente a un gruppo e assicurandoti che il fornitore di ruoli vedrà che l'utente è stato aggiunto a un gruppo?

+1

Si consiglia di inviare questo commento come una risposta e lo accetto quindi è chiaro per gli altri che si è risolto. –

risposta

5

Risulta c'è un ritardo tra il momento in cui viene aggiunto un utente o rimosso da un gruppo, e il momento in cui IIS prenderà sul cambiamento. Esiste un valore di registro che è possibile impostare per modificare la quantità di tempo in cui i token di autenticazione utente vengono memorizzati nella cache o disabilitare la memorizzazione nella cache tutti insieme. Tuttavia, la modifica di questo valore (UserTokenTTL) sembrava non avere alcun impatto sul tempo impiegato da IIS per realizzare che un utente è stato aggiunto a un gruppo. La seguente pagina ha più informazioni sulla chiave del Registro UserTokenTTL: http://support.microsoft.com/kb/954864

+0

Mi hai salvato il sedere. : DI ha dovuto "disconnettere" e quindi "accedere" di nuovo per IIS per selezionare la corretta configurazione di gruppo, ovvero riconoscere l'utente che ho aggiunto e consentire a un'azione MV.VENT.NET di eseguire con autorizzazione basata su gli utenti di quel gruppo. Stavo impazzendo perché non permetteva all'utente di eseguire quell'azione e l'utente apparteneva al gruppo, naturalmente. :) –

Problemi correlati