ASP.NET MVC e Autenticazione di Windows con ruoli personalizzati

Sto cercando di implementare l’autenticazione di Windows nella mia applicazione ASP.NET MVC2. Ho seguito tutti i passaggi suggeriti dalla documentazione ufficiale:

    

Ho specificato l’autenticazione NTLM. Fin qui tutto bene. Tutto funziona bene Vorrei verificare gli utenti che hanno effettuato l’accesso sul mio database. Vorrei recuperare i ruoli dalla mia tabella e quindi gestire l’authorization utilizzando un attributo personalizzato.
Non voglio utilizzare provider di appartenenze e ruoli. Ho già le mie tabelle Utenti / Ruoli sul posto perché sono state utilizzate per un’applicazione Internet (questa è l’app Intranet).

Nella mia app Internet avevo un modulo in cui l’utente immette i dati. Il modulo viene pubblicato su un controller che verifica tutto e crea un cookie con l’utente (e i ruoli) dell’utente che ha effettuato l’accesso.

Nel mio global.asax ho intercettato l’evento AuthenticateRequest in cui leggo il cookie e creo un’ quadro personalizzata che utilizzo in tutta l’app per verificare le autorizzazioni.

Come posso implementarlo con l’autenticazione di Windows?

Basta creare un nuovo principal e assegnarlo all’utente e inserire in Global.asax (o usare un filtro azione).

 protected void Application_AuthenticateRequest(object sender, EventArgs args) { if(HttpContext.Current != null) { String [] roles = GetRolesFromSomeDataTable(HttpContext.Current.User.Identity.Name); GenericPrincipal principal = new GenericPrincipal(HttpContext.Current.User.Identity, roles); Thread.CurrentPrincipal = HttpContext.Current.User = principal; } } 

Se un utente non ha alcun ruolo corrispondente, possono essere esclusi dall’app utilizzando l’elemento di authoirzation web.config:

     

Solo per aggiungere alla risposta di cui sopra, Spero che questo risparmi un po ‘di tempo.

Ho un sito intranet MVC 5 con VS 2015.

Il codice non ha funzionato per me finché la riga superiore non è stata aggiornata con HttpContext.Current.User. Il sito mi dava un riferimento nullo a HttpContext.Current.User se l’utente non era già stato creato nel Database. Aggiungendo. Utente alla prima riga, ha bypassato quel codice al primo caricamento e ha funzionato.

 if (HttpContext.Current.User != null) { String[] roles = GetRolesFromSomeDataTable(HttpContext.Current.User.Identity.Name); GenericPrincipal principal = new GenericPrincipal(HttpContext.Current.User.Identity, roles); Thread.CurrentPrincipal = HttpContext.Current.User = principal; }