2011-12-27 12 views
6

In questa applicazione intranet ASP.NET MVC 3 (creata utilizzando MVC 3 modello Intranet), in cui gli utenti vengono autenticati automaticamente da AD, sto cercando di limitare l'accesso a un controller agli utenti nel gruppo locale Administrators. Al fine di raggiungere questo obiettivo, ho cercato di applicare AuthorizeAttribute in questo modo:Come posso rendere AuthorizeAttribute compatibile con il gruppo Administrators locale nell'applicazione intranet ASP.NET MVC 3?

[Authorize(Roles = "Administrators")] 
public class ElmahController : Controller 

Tuttavia, anche se il mio utente AD (l'applicazione riporta l'utente previsto è stato autenticato) è nel Administrators gruppo locale, non posso accedere al controller quando viene applicato AuthorizeAttribute. Viene visualizzata solo una pagina vuota. Che cosa sto facendo di sbagliato?

D'altra parte, ho verificato che specifica la mia particolare utente funziona:

[Authorize(Users = @"ad\arve")] 
public class ElmahController : Controller 

In questo caso, posso recuperare la pagina riservata con successo.

EDIT: ho scoperto che qualifica il gruppo con BUILTIN lavorato:

[Authorize(Roles = @"BUILTIN\Administrators")] 

È questo il modo definitivo di riferimento a gruppi locali tramite AuthorizeAttribute però ??

risposta

6

Seguire il mio tutorial How to Create an Intranet Site Using ASP.NET MVC È necessario utilizzare il built-in AspNetWindowsTokenRoleProvider classe, che utilizza i gruppi di Windows come ruoli

[Authorize(Roles = @"BUILTIN\Administrators")] 

funziona solo se si è un amministratore sul server IIS. Se si distribuisce l'applicazione su un server di produzione per la propria azienda, sarà necessario creare un amministratore locale sul server di produzione.

+0

Grazie, questo corrisponde a ciò che ho trovato (dovendo qualificare 'Administrators' con" BUILTIN "). – aknuds1

0

È possibile utilizzare un attributo di autorizzazione AD personalizzato per posizionare sopra ogni azione o controller. L'ho già fatto e ho fatto qualcosa di molto simile al link qui sotto. Funziona se si utilizza l'autenticazione basata su form e non su Windows.

Active Directory Authorization based on Groups

+0

Il gruppo Administrators è locale, tuttavia, il problema è lo stesso dei gruppi AD? – aknuds1

+0

Guardando la nuova risposta alla domanda a cui si fa riferimento, si dice che si può ottenere un "System.Web.Security.WindowsTokenRoleProvider' in web.config, in pratica. Questo è già stato aggiunto al mio web.config, presumo dal modello di applicazione Intranet, quindi penso che l'autenticazione con Active Directory funzionerà già. Caso in questione, sono stato in grado di autorizzare contro il mio utente specifico: '[Autorizza (Utenti = @" annuncio \ arve ")]'. – aknuds1

+1

Che non è corretto. Vedere il mio articolo su MSDN Come creare un sito Intranet utilizzando ASP.NET MVC http://msdn.microsoft.com/en-us/library/gg703322(VS.98).aspx È necessario utilizzare la classe AspNetWindowsTokenRoleProvider – RickAndMSFT

Problemi correlati