Moduli di autenticazione non consente l'autenticazione dei ruoli. Questo articolo spiega come per la sua attuazione.
Forme di autenticazione di base
Autenticazione basata su moduli in ASP.NET è molto utile. Invece di scrivere i nostri processi di autenticazione si può semplicemente modificare il web.config sotto system.web così ....
<authentication mode="Forms"/>
<forme
name = "MyWebsiteCookieName"
loginUrl = "/ Login.aspx"
protezione = "Tutti"
timeout = "180"
/>
</ autenticazione>
- La modalità di autenticazione è impostato su moduli.
- Un URL è prevista in modo che ASP.NET sa dove reindirizzare le persone che hanno bisogno di log in
- Un timeout è specificato in pochi minuti. Questa è "l'ultima volta dalla richiesta di" non "dal tempo di accesso". Se un login è indicato per essere persistenti (descritta in seguito), questo viene ignorato.
- Un metodo di protezione è indicato per il cookie.
Avanti ho voluto specificare una cartella in cui l'accesso è limitato alle persone che hanno eseguito l'accesso Per fare questo ho inserito il seguente codice nel file Web.config (<configuration> sotto) ...
<Location path="Members">
<system.web>
<authorization>
<deny users="?"/>
</ autorizzazione>
</ system.web>
</ Location>
Questo indica che il percorso ASP.NET "/ Membri" (il piombo / è sempre implicita) deve negare l'accesso a tutti gli utenti sconosciuti. Quando qualcuno cerca di accedere a una pagina in / Membri saranno invece essere reindirizzati alla login.aspx URL specificate nel web.config.
Questo modulo deve chiedere Login.aspx per qualsiasi credenziali che si desidera (username / password, per esempio) e la loro convalida. Una volta che essi sono stati convalidati avete solo bisogno di eseguire il seguente codice per avere l'utente torna reindirizzato alla pagina essi sono stati inizialmente cercando di accesso ...
System.Web.Security.FormsAuthentication.RedirectFromLoginPage (userid, false);
La userid è l'identificatore univoco per l'utente corrente (nome utente), e il secondo parametro indica Booleano se questo dovrebbe essere un cookie persistenti di sicurezza, o di una temporanea (con scadenza dall'ultima pagina richiesta), come indicato in precedenza.
Ruoli
E 'stato a questo punto ho capito che avevo bisogno di uno speciale / Amministratore cartella. Questa cartella deve essere visitate solo dagli amministratori, e non gli utenti normali. Per questo ho bisogno, ovviamente, i ruoli nel web.config (<configuration> sotto) in questo modo. ..
<Location path="Admin">
<system.web>
<authorization>
<allow roles="Admin"/>
<deny users="*"/>
</ autorizzazione>
</ system.web>
</ Location>
Nota: L'ordine delle consentire / negare è importante. Se si nega * (tutti gli utenti), prima di consentire l'Admin ruolo, nessuno avrà accesso alla cartella.
Il problema qui è che otterrai solo ruoli quando la modalità di autenticazione = "Windows". Per questo modo ogni utente ha bisogno di un account utente di Windows valido sul server. Non è una buona soluzione.
Per fortuna ho trovato un interessante articolo su MSDN. Quando l'autenticazione utente in Login.aspx forma, si dovrebbe quindi definire i ruoli che l'utente appartiene alla ...
if (author.IsAdministrator)
ruoli = new string [] ( "Admin", "Stato");
altro
ruoli = new string [] ( "Stato");/ / 1 ora di tempo di scorrimento scadenza
Cache.Add (author.UniqueId, ruoli, null, DateTime.MaxValue,
TimeSpan.FromHours (1), CacheItemPriority.BelowNormal, null);
Ho creato una stringa array azienda i ruoli che l'utente possiede. Questi vengono poi archiviati nella domanda [] raccolta per motivi di prestazioni, altrimenti avremmo dovuto avere un PB di accesso ogni volta che volevamo ottenere l'utente corrente di ruoli.
Ora, perché le forme di autenticazione non ha alcun concetto di Ruoli questi ruoli non potrà mai andare in l'utente corrente del cookie. Dobbiamo quindi determinare quali sono questi ruoli ogni volta che viene eseguita l'autenticazione. Per questo abbiamo bisogno di andare nel file Global.asax .. .
void Application_AuthenticateRequest protette (
Object sender, EventArgs e)
(
if (HttpContext.Current.User! = null)
(
if (HttpContext.Current.User.Identity.AuthenticationType! = "Moduli")
gettare nuova eccezione ( "Solo le forme di autenticazione è supportata, non" +
HttpContext.Current.User.Identity.AuthenticationType);System.Security.Principal.IIdentity userid =
HttpContext.Current.User.Identity;/ / Non abbiamo alcuni ruoli per recuperare? In tal caso, sostituire l'oggetto utente
if (Application [userId.Name]! = null)
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal (
userid, (string []) Cache [userId.Name]
);
) / / utente! = null
)
Questo controlli di routine che l'utente corrente! = Null. Ciò significa che la pagina si trova in una posizione protetta. Se questo è il caso, allora usiamo la userid come la chiave per la cache [] raccolta di trovare un elenco dei ruoli. Se queste ruoli esistono poi riassegnare l'attuale utente con un oggetto che creiamo noi stessi, un oggetto che contiene un elenco dei ruoli.
Conclusione
Basato sul ruolo della sicurezza è molto utile in applicazioni web. Con poche e semplici righe di codice è possibile ruolo per l'attuazione di sicurezza per gli utenti privi di un valido accesso a Windows.

Delicious
Digg
Google
Yahoo