Freigeben über


Einfache Formularauthentifizierung

In diesem Beispiel wird die einfachste Implementierungsmöglichkeit von ASP.NET-Formularauthentifizierung dargestellt. Das Beispiel soll die Grundlagen für die Erstellung einer ASP.NET-Anwendung veranschaulichen, die Formularauthentifizierung verwendet. Ein weniger einfaches Beispiel für Formularauthentifizierung, in dem eine XML-Datei mit Benutzernamen und Kennwörtern verwendet wird, finden Sie unter Formularauthentifizierung mit Hilfe einer Benutzerdatei im XML-Format.

In diesem Szenario fordert der Client die geschützte Ressource Default.aspx an. Es gibt nur einen Benutzer, der über Zugriffsrechte für die geschützte Ressource verfügt: jchen@contoso.com, mit dem Kennwort password. Der Benutzername und das Kennwort sind in der Datei Logon.aspx festgeschrieben. Drei Dateien spielen eine Rolle: Web.config, Logon.aspx und Default.aspx. Diese Dateien befinden sich im Stammverzeichnis der Anwendung. Der Code dieser Dateien wird in den folgenden Abschnitten untersucht.

Web.config

Die Konfigurationsdatei Web.config sollte sich im Stammverzeichnis der Anwendung befinden (das Verzeichnis, in dem sich Default.aspx befindet) und folgende Einträge aufweisen.

<configuration>
    <system.web>

So richten Sie die Konfigurationsdatei "Web.config" ein

  1. Legen Sie Forms als Authentifizierungsmodus fest. Andere mögliche Werte sind Windows, Passport und None (leere Zeichenfolge). In diesem Beispiel muss Forms gewählt werden.

            <authentication mode="Forms"> 
    
  2. Legen Sie die Attribute für die Formularauthentifizierung fest.

                <forms
    
    1. Legen Sie das loginUrl-Attribut auf logon.aspx fest. Logon.aspx ist der URL, an den Anforderungen umgeleitet werden, wenn ASP.NET kein Authentifizierungscookie findet.

                  loginUrl = "logon.aspx"
      
    2. Legen Sie das Suffix des Cookienamens fest.

                  name = ".ASPXFORMSAUTH"/>
      
  3. Verweigern Sie Benutzern den Zugriff auf dieses Verzeichnis, die nicht authentifiziert sind.

            </authentication>
            <authorization>
                <deny users="?"/> 
            </authorization>
        </system.web>
    </configuration>
    

Logon.aspx

Anforderungen werden zur Datei Logon.aspx umgeleitet, wenn ASP.NET kein Authentifizierungsticket für die Anforderung vorfindet. Dieser Dateiname wurde in Web.config, der Konfigurationsdatei, festgelegt. Dem Clientbenutzer wird ein Formular mit zwei Textfeldern (Email und Password) und einer Schaltfläche Senden angezeigt. Der Benutzer gibt den E-Mail-Namen und das Kennwort ein und klickt auf die Schaltfläche Senden. Im Code wird dieser Name und das Kennwort mit dem in der if-Anweisung festgeschriebenen Paar verglichen. Wenn der Vergleich positiv ausfällt, wird der Benutzer mit Default.aspx verbunden. Andernfalls erhält der Benutzer eine Fehlermeldung.

So implementieren Sie die Anmeldefunktion

  1. Importieren Sie den erforderlichen Namespace.

    <%@ Import Namespace="System.Web.Security" %>
    
  2. Legen Sie die Skriptsprache fest

        <script language="VB" runat=server>
    [C#]
        <script language="C#" runat=server>
    
  3. Erstellen Sie einen Logon_Click-Ereignishandler, der das Submit-Ereignis behandelt.

            Sub Logon_Click(sender As Object, e As EventArgs)
    [C#]
            void Logon_Click(Object sender, EventArgs e) 
            {
    
  4. Authentifizieren Sie den Benutzer, indem Sie den eingegebenen Namen und das Kennwort mit den im Code festgeschriebenen Daten vergleichen: jchen@contoso.com und password. Bei positivem Ergebnis des Vergleichs leiten Sie die Anforderung zu der geschützte Ressource um (Default.aspx). Wenn der Vergleich fehlschlägt, lassen Sie eine Fehlermeldung anzeigen.

                If ((UserEmail.Value = "jchen@contoso.com") And _
                        (UserPass.Value = "password")) Then
                    FormsAuthentication.RedirectFromLoginPage _
                        (UserEmail.Value, Persist.Checked)
                Else
                    Msg.Text = "Invalid Credentials: Please try again."
                End If
            End Sub
        </script>
    [C#]
                if ((UserEmail.Value == "jchen@contoso.com") && 
                    (UserPass.Value == "password")) 
                {
                   FormsAuthentication.RedirectFromLoginPage
                       (UserEmail.Value, Persist.Checked);
                }
                else 
                {
                    Msg.Text = "Invalid Credentials: Please try again.";
                }
            }
        </script>
    
  5. Lassen Sie ein Formular für die Eingabe von Anmeldeinformationen anzeigen.

    <body>
    <form runat=server>
        <h3><font face="Verdana">Logon Page</font></h3>
        <table>
            <tr>
    
    1. Erstellen Sie ein Textfeld e-mail. Fügen Sie ein Bestätigungssteuerelement für erforderliche Felder und ein Bestätigungssteuerelement für reguläre Ausdrücke ein, das auf gültige E-Mail-Einträge überprüft.

              <td>Email:</td>
              <td><input id="UserEmail" type="text" runat=server/></td>
              <td><ASP:RequiredFieldValidator 
                       ControlToValidate="UserEmail" 
                       Display="Static"
                       ErrorMessage="Cannot be empty."
                       runat=server/>
              </td>
              <td><asp:RegularExpressionValidator id="RegexValidator" 
                       ControlToValidate="UserEmail"
                       ValidationExpression="^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"
                       EnableClientScript="false"
                       Display="Static"
                       ErrorMessage="Invalid format for e-mail address."
                       runat="server"/>
              </td>
          </tr>
          <tr>    
      
    2. Erstellen Sie ein Textfeld Password.

              <td>Password:</td>
              <td><input id="UserPass" type=password runat=server/></td>
              <td><ASP:RequiredFieldValidator 
                       ControlToValidate="UserPass" 
                       Display="Static"
                       ErrorMessage="Cannot be empty."
                       runat=server/>
              </td>
          </tr>
          <tr>
      
    3. Erstellen Sie ein Kontrollkästchen Persistent Cookies. Wenn das Kontrollkästchen Persistent Cookie aktiviert wird, bleibt das Cookie über die Browsersitzung hinaus gültig. Andernfalls wird das Cookie nach dem Schließen des Browsers zerstört.

              <td>Persistent Cookie:</td>
              <td><ASP:CheckBox id=Persist runat="server"
                       autopostback="true"/>
              </td>
              <td></td>
          </tr>
      </table>
      
      
    4. Erstellen Sie eine Senden-Schaltfläche, die bewirkt, dass beim Zurücksenden das Logon_Click-Ereignis ausgelöst wird.

      <input type="submit" OnServerClick="Logon_Click" Value="Logon" 
              runat="server"/>
      <p><asp:Label id="Msg" ForeColor="red" Font-Name="Verdana" 
                  Font-Size="10" runat=server/></p>
      
    </form>
    </body>
    </html>
    

Default.aspx

Die Datei Default.aspx ist die angeforderte geschützte Ressource. Es handelt sich im eine einfache Datei, die lediglich die Zeichenfolge Hello sowie den gespeicherten E-Mail-Namen und eine Schaltfläche zum Abmelden anzeigt.

<%@ Page LANGUAGE="VB" %>
<html>
<head>
<title>Forms Authentication</title>

<script runat=server>
    Sub Page_Load(Src As Object, e As EventArgs) 
        Welcome.InnerHtml = "Hello, " + Context.User.Identity.Name
    End Sub
    Sub Signout_Click(sender As Object, e As EventArgs) 
        FormsAuthentication.SignOut()
        Response.Redirect("logon.aspx")
    End Sub
</script>

<body>
<h3><font face="Verdana">Using Forms Authentication</font></h3>
<span id="Welcome" runat=server/>
<form runat=server>
    <input type="submit" OnServerClick="Signout_Click" Value="Signout"                                                     
           runat="server"/><p>
</form>
</body>
</html>
[C#]
<%@ Page LANGUAGE="C#" %>
<html>
<head>
<title>Forms Authentication</title>
<script runat=server>
    private void Page_Load(Object Src, EventArgs e ) 
    {
        Welcome.InnerHtml = "Hello, " + Context.User.Identity.Name;
    }
    private void Signout_Click(Object sender, EventArgs e) 
    {
        FormsAuthentication.SignOut();
        Response.Redirect("logon.aspx");
    }
</script>

<body>
<h3><font face="Verdana">Using Forms Authentication</font></h3>
<span id="Welcome" runat=server/>
<form runat=server>
    <input type="submit" OnServerClick="Signout_Click" Value="Signout"                                                    
           runat="server"/><p>
</form>
</body>
</html>

Siehe auch

Sicherheit für ASP.NET-Webanwendungen | Entwerfen von sicheren ASP.NET-Anwendungen | Formularauthentifizierung mit Hilfe einer Benutzerdatei im XML-Format