Autor: Willmove && Heath Stewart
Homepage: http://www.amuhouse.com
E-Mail: [email protected]
Hinweis: Ich habe ASP.NET erst vor zwei Monaten kennengelernt. Ich habe auf codeproject.com einen Artikel mit dem Titel „Rollenbasierte Sicherheit mit Formularauthentifizierung“ gesehen und fand ihn sehr hilfreich. Damals wollte ich es ins Chinesische übersetzen. Allerdings ist die direkte Übersetzung wirklich langweilig. In den letzten zwei Tagen habe ich mich auf diesen Artikel von Heath Stewart bezogen und ihn nach meinem eigenen Verständnis nach meinen eigenen Vorstellungen und Ausdrücken ins Chinesische geschrieben. Im Anhang finden Sie eine Demo-Webanwendung, die ich für diesen Artikel erstellt habe.
Wenn es ein Missverständnis gibt, schreiben Sie uns bitte, um darauf hinzuweisen, oder hinterlassen Sie einen Kommentar.
P.S. Spam ist wirklich nervig, bitte zeigen Sie Ihren Respekt.
Der Originalartikel befindet sich unter http://www.codeproject.com/aspnet/formsroleauth.asp
Ursprünglicher AutorHeath Stewart
Zusammenfassung:
ASP.NET bietet einen rollenbasierten Authentifizierungsmechanismus, die Unterstützung für Rollen ist jedoch unvollständig. In diesem Artikel wird versucht, anhand einiger Beispiele zu veranschaulichen, wie dieser rollenbasierte Authentifizierungsmechanismus implementiert und verwendet wird.
Einführung:
Die Formularauthentifizierung in ASP.NET ist eine sehr leistungsstarke Funktion, die nur eine kleine Menge Code erfordert, um ein einfaches plattformunabhängiges Sicherheitsauthentifizierungssystem zu implementieren.
Wenn Sie jedoch einen komplexeren und effizienteren Authentifizierungsmechanismus benötigen, müssen Sie dessen Flexibilität nutzen, indem Sie viele Benutzer in Benutzergruppen aufteilen. Die integrierte Windows-Authentifizierung bietet diesen Authentifizierungsmechanismus, verwendet jedoch NTLM, den Windows NT LAN Manager, und ist daher nicht plattformübergreifend. Mittlerweile nutzen immer mehr Menschen Linux-Systeme und es gibt immer mehr Nutzer des Mozilla Forefox-Browsers. Wir können diese Leute sicherlich nicht fernhalten, also suchen wir nach einem anderen Authentifizierungsmechanismus. Es gibt zwei Möglichkeiten: Die eine besteht darin, die Website in mehrere Bereiche zu unterteilen und mehrere Anmeldeseiten bereitzustellen, wodurch Benutzer gezwungen werden, sich einzeln zu registrieren und anzumelden. Die andere besteht darin, Benutzer zu gruppieren und die Zugriffsrechte bestimmter Benutzergruppen auf eine bestimmte Seite zu beschränken oder Bereich. Letzteres ist sicherlich die bessere Wahl. Wir können diese Funktionalität erreichen, indem wir einzelnen Benutzern Rollen zuweisen.
Microsoft hat den rollenbasierten Authentifizierungsmechanismus in der Formularauthentifizierung für die .NET-Plattform belassen, wir müssen ihn jedoch selbst implementieren. Ziel dieses Artikels ist es, einige grundlegende Aspekte des rollenbasierten Authentifizierungsmechanismus bei der Formularauthentifizierung zu behandeln, beispielsweise sein Konzept, seine Implementierung, seine Anwendung in Webanwendungen usw.
Notwendige Vorbereitung:
Wir müssen zunächst eine Datenbank, ein Webanwendungsprojekt, mehrere vertrauliche Verzeichnisse mit unterschiedlichen Sicherheitsstufen und mehrere ASP.NET-Seiten erstellen. Selbstverständlich können Sie diese auch zu Ihrem bestehenden Webanwendungsprojekt hinzufügen.
1. Um eine Datenbank zu erstellen,
müssen Sie zunächst das Datenbankverwaltungssystem DBMS auswählen, das Sie verwenden möchten. In diesem Artikel wird SQL Server 2000 verwendet.
In der Datenbank tatsächlicher Anwendungsprojekte gibt es normalerweise eine Benutzerdatentabelle Benutzer, die das eindeutige Tag des Benutzers enthalten kann: Benutzer-ID, Benutzername: Benutzername, Passwort: Passwort, E-Mail-Adresse des Benutzers: E-Mail, Stadt des Benutzers: Stadt und die Anzahl der Benutzeranmeldungen LoginCount usw. Sie können Benutzern Rollen zuweisen, indem Sie eine UserInRoles-Datentabelle erstellen (im Allgemeinen bestehend aus zwei Feldern: Benutzername: UserName, Benutzerrolle: UserRoles).
Der Einfachheit halber erstelle ich nur eine Benutzerdatentabelle, die drei Felder enthält: Benutzername UserName, Passwort Password und Benutzerrollen UserRoles. Bevor Sie eine Tabelle erstellen, müssen Sie eine Datenbank auswählen oder eine neue Datenbank erstellen. Um eine neue Datenbank mit dem Namen WebSolution zu erstellen, ist nur eine einfache SQL-Anweisung erforderlich:
Programmcode
Erstellen Sie eine DATABASE WebSolution
in GO
auszuwählen
, können Sie die SQL-Anweisung verwenden:
Programmcode
VERWENDEN Sie msdb
GEHEN
Als nächstes erstellen wir die gerade erwähnte Benutzerdatentabelle. Das SQL-Skript lautet wie folgt:
Programmcode
TABELLE Benutzer erstellen
(
Benutzername nvarchar(100) CONSTRAINT PK_UserName PRIMARY KEY,
Passwort nvarchar(150),
UserRoles nvarchar(100)
)
kann Index-Anmeldeinformationen für diese Tabelle erstellen. Die SQL-Anweisung lautet wie folgt:
Programmcode
INDEX-Anmeldeinformationen für Benutzer erstellen
(
Benutzername,
Passwort
)
Das Erstellen eines Index ist optional und liegt bei Ihnen. Die Vor- und Nachteile der Indexierung entnehmen Sie bitte den entsprechenden Informationen.
Dann fügen wir Daten zu dieser Benutzerdatenbank hinzu. Der Name des Charakters ist frei wählbar, am besten verwenden Sie jedoch einen aussagekräftigen Namen, z
„Administrator“ (Administrator der obersten Ebene), „Manager“ (Administrator), „Mitglied“ (beigetretenes Mitglied), „Benutzer“ (normaler Benutzer) usw. Beispiel:
Benutzername|Passwort|Rollen
"willmove"|"pwd123"|"Administrator,Benutzer"
„amuhouse“|“pwd123“|“User“
lautet:
Programmcode
– beachten Sie, dass „45CB41B32DCFB917CCD8614F1536D6DA“ eine von md5 mit „pwd123“ verschlüsselte Zeichenfolge ist.
INTO Users(UserName,Password,UserRoles) VALUES ('willmove','45CB41B32DCFB917CCD8614F1536D6DA','Administrator,User') einfügen
GEHEN
INTO Users(UserName,Password,UserRoles) VALUES ('amuhouse','45CB41B32DCFB917CCD8614F1536D6DA','User') einfügen
GEHEN
Beachten Sie, dass bei Rollen die Groß-/Kleinschreibung beachtet wird, da in der Datei Web.config die Groß-/Kleinschreibung beachtet wird. Jetzt erstellen wir mehrere notwendige Seiten, um diesen Sicherheitsauthentifizierungsmechanismus zu implementieren.
Die erste ist die Benutzeranmeldeseite Login.aspx
Wenn Sie noch keine Webanwendung erstellt haben, erstellen Sie jetzt eine. Selbstverständlich können Sie diese Seite auch in einer bestehenden Webanwendung erstellen. Hier gehe ich davon aus, dass eine Webanwendung namens RolebasedAuth erstellt wurde (also ein Projekt in Visual Studio .Net). Ich habe diese Login.aspx in ihrem Stammverzeichnis abgelegt, auf das über http://localhost/RolebasedAuth/Login.aspx zugegriffen werden kann.
Es spielt keine Rolle, wo diese Login.aspx platziert wird, sie muss jedoch für die Öffentlichkeit zugänglich sein.
Unter dem Stammpfad der Anwendung erstellen wir zwei geheime Unterverzeichnisse, nämlich Admin und User.
Als Nächstes erstellen wir ein Formularauthentifizierungs-Anmeldesystem, das die Rollenauthentifizierung unterstützt. Da Microsoft keinen einfachen Implementierungsmechanismus bereitstellt, müssen wir einige Zeit damit verbringen, das Authentifizierungsticket selbst zu erstellen. Es muss eine kleine Menge an Informationen gespeichert werden. Natürlich müssen einige Namen mit den in Web.config konfigurierten Namen übereinstimmen, sonst geht ASP.NET davon aus, dass Ihr Authentifizierungsticket ungültig ist, und zwingt Sie, zur Anmeldeseite umzuleiten. Wir fügen zwei TextBox-Steuerelemente zu Login.aspx in VS.NET hinzu und nennen sie UserNameTextBox und PasswordTextBox. Wir fügen auch eine Schaltfläche hinzu und benennen sie. Klicken Sie darauf, um den Hintergrundcode einzugeben. Fügen Sie den erforderlichen Code in der Methode LoginButton_Click hinzu. wie folgt:
Programmcode
private void LoginButton_Click(object sender, System.EventArgs e)
{
//FormsAuthentication initialisieren
// Beachten Sie, dass es sich im System.Web.Security-Namespace befindet
// Fügen Sie also using System.Web.Security; am Anfang des Codes hinzu
FormsAuthentication.Initialize ();
// Datenbankverbindungs- und Datenbankbetriebsbefehlsobjekte erstellen
// Beachten Sie, dass es sich im System.Data.SqlClient-Namespace befindet
// Fügen Sie also using System.Data.SqlClient; am Anfang des Codes hinzu
SqlConnection conn =
new SqlConnection("Data Source=sun-willmove;integrated security=SSPI;Initial Catalog=WebSolution;");
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = „Wählen Sie UserRoles FROM Users Where UserName=@username „ +
„UND Passwort=@passwort “;
// Füllen Sie jeden Parameter aus
cmd.Parameters.Add("@username", SqlDbType.NVarChar, 100).Value =
BenutzernameTextBox.Text;
cmd.Parameters.Add("@password", SqlDbType.NVarChar, 150).Value =
FormsAuthentication.HashPasswordForStoringInConfigFile(
PasswordTextBox.Text, "md5"); // oder "sha1"
// Datenbankoperationsbefehl ausführen
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
// Um die Authentifizierung zu implementieren, erstellen Sie ein neues Ticket
FormsAuthenticationTicket Ticket = neues FormsAuthenticationTicket(
1, // Ticketversionsnummer
UserNameTextBox.Text, // Ticketinhaber
DateTime.Now, //Zeit für die Zuteilung von Tickets
DateTime.Now.AddMinutes(30), //Ablaufzeit
true, //erfordert das Cookie des Benutzers
reader.GetString(0), // Benutzerdaten, hier ist tatsächlich die Rolle des Benutzers
FormsAuthentication.FormsCookiePath);//Gültiger Cookie-Pfad
//Maschinencode-Maschinenschlüssel verwenden, um Cookies für eine sichere Übertragung zu verschlüsseln
string hash = FormsAuthentication.Encrypt(ticket);
HttpCookie-Cookie = neues HttpCookie(
FormsAuthentication.FormsCookieName, // Der Name des Authentifizierungscookies
Hash); //Verschlüsseltes Cookie
//Stellen Sie die Cookie-Ablaufzeit so ein, dass sie mit der Ablaufzeit von Tickets übereinstimmt
if (ticket.IsPersistent) cookie.Expires = ticket.Expiration;
//Cookies zur Seitenanforderungsantwort hinzufügen
Response.Cookies.Add(cookie);
//Den Benutzer auf die zuvor angeforderte Seite umleiten,
// Wenn noch keine Seite angefordert wurde, leiten Sie zur Startseite weiter
string returnUrl = Request.QueryString["ReturnUrl"];
if (returnUrl == null) returnUrl = "./";
// Rufen Sie die FormsAuthentication.RedirectFromLoginPage-Methode nicht auf.
// Weil es das gerade hinzugefügte Ticket (Cookie) ersetzt
Response.Redirect(returnUrl);
}
anders
{
// Sagen Sie dem Benutzer nicht „Passwort ist falsch“, das ist gleichbedeutend damit, dem Eindringling eine Chance zu geben.
// Weil sie wissen, dass der von ihnen eingegebene Benutzername existiert
//
ErrorLabel.Text = „Benutzername oder Passwort ist falsch, bitte versuchen Sie es erneut!“;
ErrorLabel.Visible = true;
}
Reader.Close();
conn.Close();
}
Der Front-End-ASPX-Seitencode lautet wie folgt:
Programmcode
<%@ Page language="c#" Codebehind="Login.aspx.cs" AutoEventWireup="false" Inherits="RolebasedAuth.Login" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<KOPF>
<title>Anmelden</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content=" http://schemas.microsoft.com/intellisense/ie5 ">
</HEAD>
<Körper>
<form id="Form1" method="post" runat="server">
<P>
<asp:Label id="Label1" runat="server">Benutzername:</asp:Label>
<asp:TextBox id="UserNameTextBox" runat="server"></asp:TextBox></P>
<P><FONT face="宋体"> </FONT>
<asp:Label id="Label2" runat="server">Passwort:</asp:Label>
<asp:TextBox id="PasswordTextBox" runat="server" TextMode="Password"></asp:TextBox></P>
<P>
<asp:Label id="ErrorLabel" runat="server" Visible="False"></asp:Label></P>
<P>
<asp:Button id="LoginButton" runat="server" Text="Login"></asp:Button></P>
</form>
</body>
</HTML>
Sie werden feststellen, was wir mit dem Passwort oben gemacht haben: es zu hashen. Bei der Hash-Verschlüsselung handelt es sich um einen Einwegalgorithmus (irreversibel), der ein einzigartiges Array von Zeichen generiert. Wenn Sie also die Groß-/Kleinschreibung auch nur eines Buchstabens im Passwort ändern, entsteht eine völlig andere Hash-Spalte. Wir speichern diese verschlüsselten Passwörter in der Datenbank, was sicherer ist. In einer praktischen Anwendung möchten Sie möglicherweise ein vergessenes Passwort für einen Benutzer abrufen. Das Hashing ist jedoch irreversibel, sodass Sie das ursprüngliche Passwort nicht wiederherstellen können. Sie können aber das Passwort des Benutzers ändern und ihm das geänderte Passwort mitteilen. Wenn eine Website Ihnen alte Passwörter geben kann, müssen Sie sich darüber im Klaren sein, dass Ihre Benutzerdaten nicht sicher sind! Tatsächlich speichern die meisten inländischen Websites Benutzerkennwörter direkt und ohne Verschlüsselung in der Datenbank. Sollte ein Hacker Erfolg haben, sind diese Benutzerkonten in Gefahr!
Ohne SSL wird Ihr Passwort im Klartext über das Netzwerk übertragen. Es kann während der Übertragung gestohlen werden. Durch die serverseitige Verschlüsselung von Passwörtern wird lediglich die Sicherheit der Passwortspeicherung gewährleistet. Informationen zu SSL finden Sie unter http://www.versign.com oder http://www.thewte.com .
Wenn Sie das Passwort nicht verschlüsselt in der Datenbank speichern möchten, können Sie den obigen Code in ändern
FormsAuthentication.HashPasswordForStoringInConfigFile(PasswordTextBox.Text, "md5") kann in PasswordTextBox.Text geändert werden.
Als nächstes müssen wir die Datei Global.asax ändern. Wenn Ihre Webanwendung diese Datei nicht hat, klicken Sie bitte mit der rechten Maustaste auf das Webanwendungsprojekt und wählen Sie „Hinzufügen->Neues Element hinzufügen...->Globale Anwendungsklasse“. Suchen Sie in Global.asax oder Global.asax.cs die Methode (Funktion) namens Application_AuthenticationRequest. Bestätigen Sie zunächst, dass die Namespaces System.Security.Principal und System.Web.Security enthalten oder verwendet wurden, und ändern Sie sie dann. Der geänderte Code:
Programmcode
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
if (HttpContext.Current.User != null)
{
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
if (HttpContext.Current.User.Identity ist FormsIdentity)
{
FormsIdentity id =
(FormsIdentity)HttpContext.Current.User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
// Die im Ticket gespeicherten Benutzerdaten abrufen, die hier tatsächlich die Rolle des Benutzers darstellen
string userData = ticket.UserData;
string[] Roles = userData.Split(',');
HttpContext.Current.User = new GenericPrincipal(id, Roles);
}
}
}
}
Das Authentifizierungsticket (Benutzername und Passwort) wird nicht als Teil des Cookies gespeichert und kann dies auch nicht sein, da Benutzer ihre Cookies ändern können.
Tatsächlich verwendet FormsAuthentication Ihren Maschinenschlüssel (normalerweise in machine.config), um das Ticket (FormsAuthenticationTicket) zu verschlüsseln. Wir verwenden UserData, um Benutzerrollen zu speichern und neue Anmeldeinformationen zu generieren. Sobald die Anmeldeinformationen erstellt wurden, werden sie dem aktuellen Kontext (d. h. HttpContext) hinzugefügt, sodass sie zum Abrufen der Rolle des Benutzers verwendet werden können.
Als nächstes richten wir das geheime Verzeichnis ein (also das „Sicherheitsverzeichnis“, ein Verzeichnis, auf das nur bestimmte Benutzer wie Administratoren zugreifen dürfen). Überprüfen Sie zunächst, ob sich im Stammverzeichnis Ihrer Webanwendung eine Web.config-Datei befindet. Wenn nicht, erstellen Sie eine. Sie können auch eine Web.config-Datei in Ihrem Unterverzeichnis erstellen. Diese Web.config-Datei ist natürlich eingeschränkt (einige Parameter können nicht festgelegt werden).
Um die Sicherheitsauthentifizierung zu implementieren, suchen Sieden Programmcode
unter dem Knoten <system.web> in der Datei Web.config im Stammverzeichnis der Webanwendung.
<authentication mode="Windows" />, ändern Sie es in
<authentication mode="Forms">
<forms name="AMUHOUSE.ASPXAUTH"
loginUrl="Login.aspx"
Schutz="Alle"
path="./" />
</authentication>
<Autorisierung>
<Benutzer zulassen="*"/>
</authorization>
Im obigen Namen „AMUHOUSE.ASPXAUTH“ ist der Name AMUHOUSE.ASPXAUTH willkürlich. Um die Berechtigungen von Benutzern oder Benutzergruppen zu steuern, können wir zwei Methoden verwenden: Die eine besteht darin, die Datei Web.config im Stammverzeichnis der Anwendung zu konfigurieren, und die andere darin, eine unabhängige Datei Web.config im geheimen Verzeichnis zu erstellen. (Letzteres ist möglicherweise besser.) Wenn ersteres der Fall ist, sollte die Web.config den folgenden Inhalt (oder einen ähnlichen Inhalt) enthalten:
Programmcode
<Konfiguration>
<system.web>
<authentication mode="Forms">
<forms name="AMUHOUSE.ASPXAUTH"
loginUrl="login.aspx"
Schutz="Alle"
path="/"/>
</authentication>
<Autorisierung>
<Benutzer zulassen="*"/>
</authorization>
</system.web>
<location path="./Admin">
<system.web>
<Autorisierung>
<!-- Achtung! Die Reihenfolge und Groß-/Kleinschreibung der folgenden Zeilen ist sehr wichtig! ->
<allow roles="Administrator"/>
<deny user="*"/>
</authorization>
</system.web>
</location>
<location path="./User">
<system.web>
<Autorisierung>
<!-- Achtung! Die Reihenfolge und Groß-/Kleinschreibung der folgenden Zeilen ist sehr wichtig! ->
<allow roles="Benutzer"/>
<deny user="*"/>
</authorization>
</system.web>
</location>
</configuration>
Um die Verzeichnisse von Webanwendungen unabhängig voneinander zu machen und das Umbenennen oder Verschieben zu erleichtern, können Sie in jedem Sicherheitsunterverzeichnis eine separate Web.config-Datei konfigurieren. Es muss lediglich der Knoten <authorization/> wie folgt konfiguriert werden:
Programmcode
<Konfiguration>
<system.web>
<Autorisierung>
<!-- Achtung! Die Reihenfolge und Groß-/Kleinschreibung der folgenden Zeilen ist sehr wichtig! ->
<allow roles="Administrator"/>
<deny user="*"/>
</authorization>
</system.web>
</configuration>
Es sei noch einmal daran erinnert, dass bei den oben genannten Rollen die Groß-/Kleinschreibung beachtet werden muss. Sie können die oben genannten Optionen auch wie folgt ändern:
<allow roles="Administrator,administrator" />
Wenn Sie mehreren Rollen den Zugriff auf dieses Verzeichnis erlauben oder verweigern möchten, können Sie diese durch Kommas trennen, z. B.:
<allow roles="Administrator,Mitglied,Benutzer" />
<deny users="*" />
Zu diesem Zeitpunkt haben wir einen rollenbasierten Sicherheitsauthentifizierungsmechanismus für die Website konfiguriert. Sie können Ihr Programm zunächst kompilieren und dann versuchen, auf ein geheimes Verzeichnis wie http://localhost/RolebasedAuth/Admin zuzugreifen. Anschließend werden Sie zur Benutzeranmeldeseite weitergeleitet. Wenn Sie sich erfolgreich angemeldet haben und Ihre Rolle Zugriffsrechte auf dieses Verzeichnis hat, kehren Sie zu diesem Verzeichnis zurück. Möglicherweise versuchen Benutzer (oder Eindringlinge), auf das vertrauliche Verzeichnis zuzugreifen. Wir können eine Sitzung verwenden, um die Anzahl der Anmeldungen des Benutzers zu speichern. Wenn die Anzahl eine bestimmte Anzahl überschreitet, wird dem Benutzer die Anmeldung nicht gestattet. und „Das System hat Ihre Anmeldeanfrage abgelehnt!“ wird angezeigt.
Im Folgenden besprechen wir, wie Web-Steuerelemente basierend auf Benutzerrollen unterschiedliche Inhalte anzeigen können.
Manchmal ist es besser, Inhalte basierend auf der Rolle des Benutzers anzuzeigen, da Sie wahrscheinlich nicht viele Seiten mit vielen doppelten Inhalten für so viele verschiedene Rollen (Benutzergruppen) erstellen möchten. Auf einer solchen Website können verschiedene Benutzerkonten nebeneinander existieren und kostenpflichtige Benutzerkonten können auf zusätzliche kostenpflichtige Inhalte zugreifen. Ein weiteres Beispiel ist eine Seite, auf der eine Schaltfläche „Administrator eingeben“ angezeigt wird, die mit der Admin-Seite verknüpft ist, wenn der aktuelle Benutzer die Rolle „Administrator“ hat. Wir werden diese Seite jetzt implementieren.
Die oben verwendete GenericPrincipal-Klasse implementiert die IPincipal-Schnittstelle. Diese Schnittstelle verfügt über eine Methode namens IsInRole() und ihr Parameter ist eine Zeichenfolge. Wenn wir angemeldeten Benutzern mit der Rolle „Administrator“ Inhalte anzeigen möchten, können wir in Page_Load den folgenden Code hinzufügen:
Programmcode
if (User.IsInRole("Administrator"))
AdminLink.Visible = true;
Der gesamte Seitencode lautet wie folgt (der Einfachheit halber ist der Hintergrundcode auch in die ASPX-Seite geschrieben):
Programmcode
<html>
<Kopf>
<title>Willkommen! </title>
<script runat="server">
protected void Page_Load(Object sender, EventArgs e)
{
if (User.IsInRole("Administrator"))
AdminLink.Visible = true;
anders
AdminLink.Visible = false;
}
</script>
</head>
<Körper>
<h2>Willkommen! </h2>
<p>Willkommen im Amu House http://amuhouse.com/ ^_^</p>
<asp:HyperLink id="AdminLink" runat="server"
Text="Admin-Homepage" NavigateUrl="./Admin"/>
</body>
</html>
Auf diese Weise wird das mit dem Admin-Verzeichnis verknüpfte HyperLink-Steuerelement nur Benutzern mit der Rolle „Administrator“ angezeigt. Sie können auch nicht angemeldeten Benutzern einen Link zur Anmeldeseite bereitstellen, z. B.:
Programmcode
protected void Page_Load(object sender, System.EventArgs e)
{
if (User.IsInRole("Administrator"))
{
AdminLink.Text = „Administrator, bitte kommen Sie herein“;
AdminLink.NavigateUrl="./Admin";
}
else if(User.IsInRole("User"))
{
AdminLink.Text = "Registrierte Benutzer bitte eingeben";
AdminLink.NavigateUrl="./User"
}
anders
{
AdminLink.Text = "Bitte melden Sie sich an";
AdminLink.NavigateUrl="Login.aspx?ReturnUrl=" + Request.Path;
}
}
Hier können wir durch Setzen der QueryString-Variable ReturnUrl den Benutzer nach erfolgreicher Anmeldung zur aktuellen Seite zurückbringen.
Zusammenfassung:
Dieser Artikel soll Ihnen helfen, die Bedeutung und Praktikabilität rollenbasierter Sicherheitsmechanismen zu verstehen. Außerdem wird ASP.NET zum Implementieren rollenbasierter Sicherheitsmechanismen verwendet. Es handelt sich nicht um einen schwer zu implementierenden Mechanismus, es sind jedoch möglicherweise einige Kenntnisse darüber erforderlich, was Benutzeranmeldeinformationen sind, wie Benutzer authentifiziert werden und wie autorisierte Benutzer authentifiziert werden. Ich würde mich sehr freuen, wenn Sie es hilfreich finden. Ich hoffe, es kann Sie bei der Implementierung der rollenbasierten Formularsicherheitsauthentifizierung auf Ihrer Website unterstützen.
Beigefügt:
Beispiel-Projektquellcode für diesen Artikel: