7

Aggiungo ASP.NET MVC a un'applicazione WebForms esistente. Per il momento, non mi interessa l'autenticazione/l'accesso, poiché questa parte è gestita dal codice esistente (autenticazione basata su form).Autorizzazione basata su autorizzazione in ASP.NET MVC3

Nell'applicazione WebForms esistente, disponiamo di un'autorizzazione basata su autorizzazione completamente personalizzata per pagina. Quindi ogni utente ha una serie di diritti, elencando le pagine a cui è autorizzato ad accedere.
Ora devo decidere come utilizzare lo stesso sistema di autorizzazione per limitare l'accesso a specifici controller e azioni MVC.

Come ho capito, per ASP.NET MVC esiste uno standard AuthorizeAttribute in cui è possibile specificare i ruoli. Ho trovato anche alcuni articoli che suggeriscono di autorizzazioni che specificano invece di ruoli - allora è possibile fare qualcosa di simile:

[CustomAuthorize(Roles = "View products, Edit products")] 

Estendendo AuthorizeAttribute, posso anche definire come posso conservare e autorizzazioni di accesso.

Questa soluzione sarebbe accettabile per me (anche se il cambiamento della semantica dei ruoli odora un po ').
Ma prima di impegnarmi, vorrei vedere quali altre opzioni ci sono. Ed è lì che sono bloccato - Non ho trovato una panoramica completa dei diversi approcci sull'autorizzazione in ASP.NET MVC. Mi piacerebbe anche sapere come tutti i concetti di sicurezza (come l'autenticazione basata su form, i provider di appartenenza, l'attributo di autorizzazione, IPrincipal, ecc.) Sono correlati tra loro e come dovrebbero funzionare insieme.

+0

È simile a ciò che è stato provato qui: http://stackoverflow.com/questions/10338734/custom-security-scenario-in-asp-net-mvc/ – antijon

+0

@antijon per quanto ho capito, è simile a implementando un AuthorizeAttribute personalizzato. Ma mi piacerebbe scoprire più in dettaglio su altre opzioni e i loro pro e contro. –

risposta

7

Prima cosa che devi capire è molto simile a Webform, c'è una pipeline in MVC. Ogni richiesta passa attraverso una serie di metodi, e ci sono punti di estensione lungo la strada che puoi "collegare" e fare cose.

Tutto l'AuthorizeAttribute fa agganciare il punto di estensione OnAuthorization e decidere se concedere l'accesso o meno a qualcuno in base ai criteri che gli vengono forniti (nomi utente, ruoli, ecc.).

Ecco un esempio: http://geekswithblogs.net/brians/archive/2010/07/08/implementing-a-custom-asp.net-mvc-authorization-filter.aspx

È possibile creare il proprio attributo autorizzazione personalizzati, e fare esattamente la stessa cosa con i vostri propri criteri. Non è necessario riutilizzare il parametro Ruoli, puoi creare tutto il tuo se lo desideri.

Questo è il metodo che MVC preferisce. Un'altra cosa interessante è che se si crea anche un filtro, è possibile aggiungerlo ai filtri globali e applicarlo a tutto se lo si desidera.

Fondamentalmente avete altre due scelte ragionevoli. Implementare un gestore in global.asax in Application_AuthenticateRequest (non consigliato) o creare un BaseController comune che si sovrascriva OnAuthorize (l'attributo aggancia la stessa cosa, ma in un posto diverso).

Un sacco di persone cercano di fare l'autenticazione usando le variabili Session, e questa è solo la cosa peggiore da fare.

Poiché non sappiamo nulla del sistema di autenticazione e autorizzazione, tutto ciò che possiamo fare è fornire un consiglio generale.

+0

Grazie per la risposta!Per quanto riguarda l'autenticazione - è solo un login username/password tramite Auths moduli e utilizzando una classe utente personalizzata. Per quanto riguarda il sistema di autorizzazione - per ogni pagina abbiamo definito una "chiave del modulo" e archiviamo nelle autorizzazioni del database per ciascun utente l'accesso a ciascuna pagina. Il controllo dei diritti è attualmente implementato in 'BasePage: Page'. Non sono sicuro che sia questa l'informazione che vorresti sapere? –

Problemi correlati