Formulare Authentifizierung funktioniert nicht zulassen, dass Rollen-Authentifizierung. Dieser Artikel beschreibt, wie es sich umsetzen lässt.
Basic-Authentifizierung Formen
Forms-basierte Authentifizierung in ASP.NET ist sehr nützlich. Stattdessen schreiben unsere eigenen Authentifizierungs-Verfahren können wir einfach die web.config unter system.web wie so ....
<authentication mode="Forms"/>
<Formen
name = "MyWebsiteCookieName"
loginUrl = "/ login.aspx"
Schutz = "Alle"
timeout = "180"
/>
</ authentication>
- Die Authentifizierung ist auf Formulare.
- Eine URL ist, so dass ASP.NET weiß, wo die Umlenkung der Menschen, müssen sich anmelden
- Ein Timeout wird in Minuten. Das ist "Zeit seit der letzten Anfrage" nicht die "Zeit seit der Anmeldung". Wenn eine Anmeldung ist nicht zurück (siehe später) ist dies ignoriert.
- Ein Schutz ist für das Cookie.
Weiter wollte ich einen Ordner, zu denen der Zugang beschränkt sich auf Personen, die eingeloggt Dazu habe ich den folgenden Code in der Datei web.config (unter <configuration>) ...
<location path="Members">
<system.web>
<authorization>
<deny users="?"/>
</ authorization>
</ system.web>
</ Location>
Diese ASP.NET erzählt, dass der Pfad "/ Mitglieder" (die Führung / ist immer stillschweigend) soll den Zugriff auf alle unbekannten Benutzer. Wenn jemand versucht, auf eine Seite in / Mitglieder Stattdessen werden sie automatisch auf die URL, die Sie login.aspx in web.config.
Diese login.aspx sollte fragen Sie nach, was Sie wollen, Anmeldeinformationen (Benutzername / Passwort zum Beispiel) und Validierung. Sobald sie validiert wurden Sie müssen nur den folgenden Code ausführen, um die Benutzer weitergeleitet zurück zu der Seite, sie wurden ursprünglich versucht, Zugang ...
System.Web.Security.FormsAuthentication.RedirectFromLoginPage (userid, false);
Die Benutzer-ID ist die eindeutige Kennung für den aktuellen Benutzer (Benutzername), und die zweite Boolean-Parameter gibt an, ob dies zu einer anhaltenden Sicherheit Cookie, oder nur ein vorübergehendes Phänomen (bei Ablauf seit der letzten Seite Anfrage), wie bereits erwähnt.
Rollen
Es war zu diesem Zeitpunkt wurde mir klar, dass ich brauchte eine besondere / Admin-Ordner. Dieser Ordner sollte nur von Administratoren und normalen Benutzern nicht. Für diese Aufgaben benötigt ich natürlich in der web.config (unter <configuration>) wie so. ..
<location path="Admin">
<system.web>
<authorization>
<allow roles="Admin"/>
<deny users="*"/>
</ authorization>
</ system.web>
</ Location>
Hinweis: Die Reihenfolge der zulassen / leugnen ist wichtig. Wenn Sie bestreiten * (alle Benutzer), bevor Sie die Admin-Rolle, die niemand haben Zugriff auf den Ordner.
Das Problem hierbei ist aber, dass man nur, wenn die Rollen authentication mode = "Windows". Bei diesem Modus jeder Benutzer benötigt eine gültige Windows-Benutzerkonto auf dem Server. Nicht eine gute Lösung.
Zum Glück fand ich einen interessanten Artikel auf MSDN. Wenn Sie sich Ihre Benutzer in der Form login.aspx, sollten Sie sich dann heraus, welche Rollen der Benutzer gehört zu ...
if (author.IsAdministrator)
Rollen = new String [] ( "Admin", "Mitglied");
sonst
Rollen = new String [] ( "Mitglied");/ / 1 Stunde Schiebetüren Ablauf der Zeit
Cache.Add (author.UniqueId, Rollen, null, DateTime.MaxValue,
TimeSpan.FromHours (1), CacheItemPriority.BelowNormal, null);
Ich habe ein String Array mit den Rollen, die der Benutzer besitzt. Diese werden dann in der Anwendung [] Sammlung für Performance-Gründen, denn sonst hätten wir zu einem DB-Zugriff jedes Mal, wenn wir wollten, um den aktuellen Benutzer-Rollen.
Nun, da Formularauthentifizierung das Konzept der Rollen dieser Rollen wird nie in die aktuelle Benutzer-Cookie. Also müssen wir entscheiden, was diese Rollen sind jedes Mal, wenn eine Authentifizierung ausgeführt wird. Für diese müssen wir in die Datei "Global.asax" .. .
geschützt Application_AuthenticateRequest void (
Object sender, EventArgs e)
(
if (HttpContext.Current.User! = null)
(
if (HttpContext.Current.User.Identity.AuthenticationType! = "Formulare")
throw new Exception ( "Nur Formen Authentifizierung unterstützt wird, nicht" +
HttpContext.Current.User.Identity.AuthenticationType);System.Security.Principal.IIdentity UserId =
HttpContext.Current.User.Identity;/ / Haben wir einige Rollen um? Wenn dies der Fall ist, ersetzen Sie die Benutzer-Objekt
if (Application [userId.Name]! = null)
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal (
userid, (string [])-Cache [userId.Name]
);
) / / user! = null
)
Diese Routine-Kontrollen, die der aktuelle Benutzer! = Null. Dies bedeutet, dass die Seite in einem geschützten Standort. Wenn dies der Fall ist, dann verwenden wir die Benutzer-ID als Schlüssel für den Cache [] Sammlung finden Sie eine Liste von Aufgaben. Wenn diese Rollen gibt es dann berechtigt, die der aktuelle Benutzer mit einem Objekt erstellen wir uns, ein Objekt, das eine Liste von Rollen.
Fazit
Rolle auf der Grundlage der Sicherheit ist sehr nützlich, in Web-Anwendungen. Mit ein paar einfachen Zeilen Code ist es möglich, Rolle auf der Grundlage der Sicherheit für die Benutzer, ohne eine gültige Windows-Anmeldung.

Delicious
Digg
Google
Yahoo