2012-12-07 19 views
28

che ho letto alcune domande su questo argomento, come ad esempio here, here, here e here; ma nessuno ha fornito una soluzione operativa nel mio caso.Utilizzo di Windows con i gruppi Active Directory come ruoli

quello che voglio fare:

implementare l'autenticazione di Windows per una web app che viene utilizzato solo dai nostri dipendenti. In questo modo non dovrebbero aver bisogno di accedere all'app, ma già essere autenticati tramite l'accesso a Windows.

Inoltre, ho bisogno di limitare alcune aree dell'app, in base ai gruppi di sicurezza di Active Directory a cui l'utente può essere assegnato.

Quindi io voglio essere in grado di decorare Controller/Azioni con

[Authorize(Roles="SomeRole")] 

Quello che ho provato:

ho

<authentication mode="Windows" /> 

nel mio web.config. E ho aggiunto diverse permutazioni di uno <roleManager> come trovato in alcuni dei post collegati sopra. Attualmente ho questo ruolo manager

<roleManager defaultProvider="WindowsProvider" 
    enabled="true" 
    cacheRolesInCookie="false"> 
     <providers> 
     <add 
      name="WindowsProvider" 
      type="System.Web.Security.WindowsTokenRoleProvider" /> 
     </providers> 
    </roleManager> 

come trovato nel this post.

Così com'è, se decorare un controller con [Authorize], posso accedervi bene.

Tuttavia:

posso vedere le mie impostazioni utente sulla rete, che sono parte di un gruppo di protezione AD chiamato "IT". Ma se decorassi lo stesso controller con [Authorize(Roles="IT")] ottengo la schermata vuota che è servita dal server di sviluppo asp.net per un 401 non autorizzato. Questo è inaspettato. Penso che dovrei essere in grado di visualizzare la pagina poiché sono connesso a Windows e faccio parte del gruppo "IT".

Quasi tutto ciò che trovo su questo argomento mi sembra molto semplice per realizzare ciò che sto cercando di fare, ma mi manca chiaramente qualcosa qui.

+0

Hai configurato il provider di appartenenze ASP.NET anche per utilizzare Active Directory? Non solo il fornitore di ruoli .... –

+0

@marc_s Ho ASpNetActiveDirectoryMembershipProvider impostato come predefinito in web.config. Posso postare che se senti che potrebbe esserci un errore causando il problema. –

+1

Questo è un thread vecchio, ma con sicurezza AD, è necessario specificare il dominio? [Authorize (Roles = @ "domainname \ SomeRole")] – steveareeno

risposta

34

Per dev sto utilizzando IISExpress con le proprietà del server di sviluppo del progetto MVC impostato in modo che l'autenticazione anonima sia disabilitata e l'autenticazione di Windows sia abilitata. La configurazione web viene distribuita utilizzando il nostro server di build TFS per testare e rilasciare server per i quali l'autenticazione è anche configurata come sopra e funziona anche in tali posizioni.

Nel mio web.config ho.

<system.web> 
.... 
     <authentication mode="Windows" /> 
     <authorization> 
      <deny users="?" /> 
     </authorization> 
     <roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider"> 
      <providers> 
      <clear /> 
      <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" /> 
      </providers> 
     </roleManager> 
.... 

    </system.web> 

posso usare

[Authorize(Roles = @"DOMAIN\ADGroup")] 
Public ActionResult Index() 
{...} 

o

public ActionResult Index() 
     { 
      var User = System.Web.HttpContext.Current.User; 
      if (User.IsInRole("DOMAIN\\ADGroup")) 
      { 
       return RedirectToAction("IRSAdmin"); 
      } 
      return View(); 
     } 

Dopo mi ricordo di disconnessione e accedere di nuovo in modo che il permesso mi è stata data al gruppo di annunci sono stati applicati.

+2

Nota aggiuntiva in caso, come me, stai sbattendo la testa contro la scrivania per diverse ore cercando di risolvere questo problema: Logoff/Logon raccoglie solo le tue nuove credenziali quando sei connesso fisicamente alla rete aziendale ... quando la tua connessione wireless non viene visualizzata fino a quando DOPO aver effettuato l'accesso, la tua macchina non raccoglierà le nuove appartenenze ai gruppi dal controller di dominio e ti verrà lasciato a grattarti la testa per un while ... –

+0

@DanielHume perché AD sincronizza meglio le connessioni cablate. Puoi semplicemente eseguire gpupdate sulla riga di comando per lo stesso effetto –

Problemi correlati