Sie sind zurzeit offline. Es wird auf die erneute Herstellung einer Internetverbindung gewartet.

Wie Authentifizieren in dem Active Directory, indem Formularauthentifizierung und Visual Basic .NET verwendet

Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.

Den englischen Originalartikel können Sie über folgenden Link abrufen: 326340
Zusammenfassung
Dieser Artikel beschreibt Schritt für Schritt, wie eine Anwendung von ASP.NET Formularauthentifizierung verwenden kann zu Benutzern erlauben sich in dem Active Directory zu authentifizieren, indem Benutzer das LDAP verwenden.

Das können Sie der Methode der Datei Global.asax entweder verwenden, um ein Objekt in der Eigenschaft zu speichern, die durch die Anforderung fließt, nachdem der Benutzer authentifiziert und umgeleitet wird.

Erstellen Sie eine Asp.net-webanwendung in Visual Basic .NET

Gehen Sie folgendermaßen vor, um eine neue Anwendung von Asp.net-webanwendung mit Name FormsAuthAd in Visual Basic .NET zu erstellen:
  1. Starten Sie Microsoft Visual Studio .NET.
  2. Klicken Sie in dem Menü auf , und klicken Sie dann auf .
  3. Klicken Sie auf unter , und klicken Sie dann auf unter .
  4. In dem Feld gibt Sie an <B> http:// <Server> ein/ FormsAuthAd </B> (das Ersetzt, wenn Sie den lokalen Server (zu dem Haben von und dann zu dem Klicken auf ) verwenden)
  5. Klicken Sie mit der rechten Maustaste auf den Knoten in Projekt-Mappe-Explorer, und klicken Sie dann auf .
  6. Klicken Sie auf , klicken Sie auf , und klicken Sie dann auf auf die Registerkarte in in dem Dialogfeld .

Verfassen Sie den Authentifizierungscode

Gehen Sie folgendermaßen vor, um eine neue Klassendatei mit Name LdapAuthentication.vb zu erstellen:
  1. Klicken Sie mit der rechten Maustaste in dem Projektmappen-Explorer auf den Projektknoten, zeigen Sie auf , und klicken Sie dann auf .
  2. Klicken Sie auf unter .
  3. Typ LdapAuthentication.vb Auf ein Sie und klicken Sie dann auf , in .
  4. Ersetzen Sie den vorhandenen Code in der LdapAuthentication.vb-Datei durch den folgenden Code:
    Imports SystemImports System.TextImports System.CollectionsImports System.DirectoryServicesNamespace FormsAuth    Public Class LdapAuthentication        Dim _path As String        Dim _filterAttribute As String        Public Sub New(ByVal path As String)            _path = path        End Sub        Public Function IsAuthenticated(ByVal domain As String, ByVal username As String, ByVal pwd As String) As Boolean            Dim domainAndUsername As String = domain & "\" & username            Dim entry As DirectoryEntry = New DirectoryEntry(_path, domainAndUsername, pwd)            Try                'Bind to the native AdsObject to force authentication.			                Dim obj As Object = entry.NativeObject                Dim search As DirectorySearcher = New DirectorySearcher(entry)                search.Filter = "(SAMAccountName=" & username & ")"                search.PropertiesToLoad.Add("cn")                Dim result As SearchResult = search.FindOne()                If (result Is Nothing) Then                    Return False                End If                'Update the new path to the user in the directory.                _path = result.Path                _filterAttribute = CType(result.Properties("cn")(0), String)            Catch ex As Exception                Throw New Exception("Error authenticating user. " & ex.Message)            End Try            Return True        End Function        Public Function GetGroups() As String            Dim search As DirectorySearcher = New DirectorySearcher(_path)            search.Filter = "(cn=" & _filterAttribute & ")"            search.PropertiesToLoad.Add("memberOf")            Dim groupNames As StringBuilder = New StringBuilder()            Try                Dim result As SearchResult = search.FindOne()                Dim propertyCount As Integer = result.Properties("memberOf").Count                Dim dn As String                Dim equalsIndex, commaIndex                Dim propertyCounter As Integer                For propertyCounter = 0 To propertyCount - 1                    dn = CType(result.Properties("memberOf")(propertyCounter), String)                    equalsIndex = dn.IndexOf("=", 1)                    commaIndex = dn.IndexOf(",", 1)                    If (equalsIndex = -1) Then                        Return Nothing                    End If                    groupNames.Append(dn.Substring((equalsIndex + 1), (commaIndex - equalsIndex) - 1))                    groupNames.Append("|")                Next            Catch ex As Exception                Throw New Exception("Error obtaining group names. " & ex.Message)            End Try            Return groupNames.ToString()        End Function    End ClassEnd Namespace					

Erläuterung zu dem Code

Der Authentifizierungscode weist eine Domäne, einen Benutzername, ein Kennwort und einen Pfad zu der Struktur in dem Active Directory zurück. Dieser Code verwendet den LDAP-Verzeichnis-Anbieter.
Benutzerauthentifizierung
Der Code in der Seite Logon.aspx ruft die Methode auf und wird in den An-Meldeinformation übergeben, die von dem Benutzer gesammelt werden. Mit dem Pfad zu der Verzeichnis-Struktur, dem Benutzername und dem Kennwort wird anschließend ein Objekt erstellt. Der Benutzername muss in dem Format "Domäne\Benutzername" angegeben werden. Das Objekt versucht dann, die Bindung von zu erzwingen, indem das Objekt die Eigenschaft abruft. Wenn das erfolgreich ist, wird das Attribut für den Benutzer durch ein -Objekt erstellen, und das Filtern des erhalten. Nachdem der Benutzer authentifiziert wird, gibt die Methode zurück.

Hinweis: wenn Sie LDAP verwenden, um auf einem Active Directory-Bezogenen Objekt zu binden, werden TCP-Ports verwandt. Erhöhte Verwendung von LDAP mit dem Namespace System.DirectoryServices verwendet möglicherweise alle TCP-Ports, die verfügbar sind. Ist möglicherweise in Lage, die TCP-Last durch das Wiederverwenden der Verbindung, die Sie zu Authentifizierung Ihres Benutzers verwendeten, zu reduzieren.
Benutzergruppe
Dieser Code ruft die Methode auf, um eine Liste zu Gruppen zu erhalten, zu denen der Benutzer gehört. Die Methode ruft eine Liste Sicherheits- zu denen der Benutzer an von ein -Objekt erstellen,, und Filter laut des Attributs gehört und Verteilergruppen, zu denen der Benutzer an von ein -Objekt erstellen,, und Filter laut des Attributs gehört,, ab. Diese Methode gibt eine Liste der Gruppen zurück, ist, durch Pipes (|) zu getrennt werden.

Beachten Sie, dass die Methode Zeichenfolgen bearbeitet, und abschneidet. Das reduziert die Länge der Zeichenfolge, die in dem Authentifizierungscookie gespeichert wird. Wenn die Zeichenfolge nicht abgeschnitten wird, sieht das Format jeder Gruppe folgendermaßen aus:
CN=...,...,DC=domain,DC=com				
Das kann eine sehr lange Zeichenfolge erstellen. Wenn die Länge dieser Zeichenfolge größer als die Länge des Cookies ist, wird das Authentifizierungscookie möglicherweise nicht erstellt. Wenn potenziell diese Zeichenfolge größer als die Länge des Cookies sein kann, möchten Sie die Gruppeninformation ASP.NET Cache in dem Objekt oder einer Datenbank speichern kann. Empfiehlt sich alternativ, Sie die Gruppeninformation zu verschlüsseln und diese Information in einem ausgeblendeten Formularfeld zu speichern.

Schreiben Sie das Global.asax Code

Der Code in der Datei Global.asax stellt ein Ereignishandler bereit. Dieses Ereignishandler ruft das Authentifizierungscookie aus der Auflistung von ab, entschlüsselt das Cookie und ruft die Liste Gruppen, sein in der Eigenschaft gespeichert wird, ab. Die Gruppen werden bei einer pipe-separated Liste angezeigt, die der Seite Logon.aspx erstellt wird.

Der Code analysiert die Zeichenfolge in Zeichenfolgenarray, um ein Objekt zu erstellen. Nachdem das Objekt erstellt wird, wird dieses Objekt in der Eigenschaft platziert.
  1. Klicken Sie in dem Projekt-Mappe-Explorer mit der rechten Maustaste auf , und klicken Sie dann auf .
  2. Fügen Sie den folgenden Code an dem Anfang des Codes hinter der Global.asax.vb-Datei hinzu:
    Imports System.Web.SecurityImports System.Security.Principal					
  3. Ersetzen Sie durch den folgenden Code das vorhandene leere Ereignishandler für das :
    Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As EventArgs)        ' Fires upon attempting to authenticate the use        Dim cookieName As String = FormsAuthentication.FormsCookieName        Dim authCookie As HttpCookie = Context.Request.Cookies(cookieName)        If (authCookie Is Nothing) Then            'There is no authentication cookie.            Return        End If        Dim authTicket As FormsAuthenticationTicket = Nothing        Try            authTicket = FormsAuthentication.Decrypt(authCookie.Value)        Catch ex As Exception            'Write the exception to the Event Log.            Return        End Try        If (authTicket Is Nothing) Then            'Cookie failed to decrypt.            Return        End If        'When the ticket was created, the UserData property was assigned a        'pipe-delimited string of group names.        Dim groups As String() = authTicket.UserData.Split(New Char() {"|"})        'Create an Identity.        Dim id As GenericIdentity = New GenericIdentity(authTicket.Name, "LdapAuthentication")        'This principal flows throughout the request.        Dim principal As GenericPrincipal = New GenericPrincipal(id, groups)        Context.User = principal    End Sub					

Ändern Sie die Datei Web.config

In diesem Abschnitt konfigurieren Sie das , die und die Elemente in der Datei Web.config. Mit diesen Änderungen können nur authentifizierte Benutzer auf die Anwendung zugreifen und unauthenticated Anforderungen werden an einer Seite Logon.aspx umgeleitet. Um nur bestimmte Benutzer und Gruppenzugriff auf die Anwendung zuzulassen, können Sie diese Konfiguration ändern.

Ersetzen Sie den vorhandenen Code in der Datei Web.config durch den folgenden Code:
<?xml version="1.0" encoding="utf-8" ?><configuration>      <system.web>    <authentication mode="Forms">      <forms loginUrl="logon.aspx" name="adAuthCookie" timeout="60" path="/" >      </forms>    </authentication>	    <authorization>	      <deny users="?" />      <allow users="*" />    </authorization>	    <identity impersonate="true" />  </system.web></configuration>				
Sie beachten, die <VAR>-Identität zu imitieren "echten" /</VAR>-Konfigurationselement (ASP.NET) =. Das verursacht, ASP.NET Identität des Kontos anzunehmen, das als das anonyme Konto von Microsoft Internet Information Services konfiguriert ist. Infolge dieser Konfiguration werden alle Anforderungen an diese Anwendung in dem Sicherheitskontext des konfigurierten Kontos ausgeführt. Der Benutzer gibt An-Meldeinformation an, Informationen in dem Active Directory zu authentifizieren, aber das Konto, das auf das Active Directory zugreift, ist das konfigurierte Konto. Weitere Informationen finden Sie im AbschnitVERWEISE Abschnitt.

Konfigurieren Sie für Anonyme Authentifizierung II

Gehen Sie folgendermaßen vor, um II für anonyme Authentifizierung zu konfigurieren:
  1. Klicken Sie mit der rechten Maustaste in der II-Verwaltungskonsole für auf den Knoten Virtuelles Verzeichnis.
  2. Klicken Sie auf die , und klicken Sie dann auf die Registerkarte .
  3. Klicken Sie auf unter .
  4. Aktivieren Sie das Kontrolle-Kästchen anonymem .
  5. Nehmen Sie dem anonymen Konto für die Anwendung ein Konto vor, das über Berechtigung in dem Active Directory verfügt.
  6. Deaktivieren Sie das Kontrolle-Kästchen.
Das Standardkonto hat keine Berechtigung in dem Active Directory.

Erstellen Sie die Seite Logon.aspx

Gehen Sie folgendermaßen vor, um ein neues ASP.NET Web Form zu erstellen, das als Logon.aspx bezeichnet wird:
  1. Klicken Sie mit der rechten Maustaste in dem Projektmappen-Explorer auf den Projektknoten, zeigen Sie auf , und klicken Sie dann auf .
  2. Typ Logon.aspx Auf ein Sie und klicken Sie dann auf , in .
  3. Klicken Sie in dem Projekt-Mappe-Explorer mit der rechten Maustaste auf , und klicken Sie dann auf .
  4. Klicken Sie auf die Registerkarte in dem Designer.
  5. Ersetzen Sie den dort vorhandenen Code durch den folgenden Code
    <%@ Page language="vb" AutoEventWireup="true" %><%@ Import Namespace="FormsAuthAd.FormsAuth" %><html>	<body>		<form id="Login" method="post" runat="server">			<asp:Label ID="Label1" Runat="server">Domain:</asp:Label>			<asp:TextBox ID="txtDomain" Runat="server"></asp:TextBox><br>			<asp:Label ID="Label2" Runat="server">Username:</asp:Label>			<asp:TextBox ID="txtUsername" Runat="server"></asp:TextBox><br>			<asp:Label ID="Label3" Runat="server">Password:</asp:Label>			<asp:TextBox ID="txtPassword" Runat="server" TextMode="Password"></asp:TextBox><br>			<asp:Button ID="btnLogin" Runat="server" Text="Login" OnClick="Login_Click"></asp:Button><br>			<asp:Label ID="errorLabel" Runat="server" ForeColor="#ff3300"></asp:Label><br>			<asp:CheckBox ID="chkPersist" Runat="server" Text="Persist Cookie" />		</form>	</body></html><script runat="server">sub Login_Click(sender as object,e as EventArgs)  Dim adPath as String = "LDAP://DC=..,DC=.." 'Path to your LDAP directory server  Dim adAuth as LdapAuthentication = new LdapAuthentication(adPath)  try    if(true = adAuth.IsAuthenticated(txtDomain.Text, txtUsername.Text, txtPassword.Text)) then      Dim groups as string = adAuth.GetGroups()      'Create the ticket, and add the groups.      Dim isCookiePersistent as boolean = chkPersist.Checked      Dim authTicket as FormsAuthenticationTicket = new FormsAuthenticationTicket(1, _           txtUsername.Text,DateTime.Now, DateTime.Now.AddMinutes(60), isCookiePersistent, groups)	      'Encrypt the ticket.      Dim encryptedTicket as String = FormsAuthentication.Encrypt(authTicket)		      'Create a cookie, and then add the encrypted ticket to the cookie as data.      Dim authCookie as HttpCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket)      if(isCookiePersistent = true) then		authCookie.Expires = authTicket.Expiration      end if				      'Add the cookie to the outgoing cookies collection.      Response.Cookies.Add(authCookie)	      'You can redirect now.      Response.Redirect(FormsAuthentication.GetRedirectUrl(txtUsername.Text, false))        else      errorLabel.Text = "Authentication did not succeed. Check user name and password."    end if   catch ex as Exception    errorLabel.Text = "Error authenticating. " & ex.Message  end tryend sub</script>					
  6. Ändern Sie den Pfad auf der Seite Logon.aspx so, die Seite Logon.aspx auf Ihren LDAP-Verzeichnis-Server zu zeigen.
Die Seite Logon.aspx ist eine Seite, die die Information von den Benutzer- und den Call-Methode für die Klasse sammelt. Der Code führt folgende in dieser Reihenfolge durch, nachdem der Code den Benutzer authentifiziert und eine Liste der Gruppen abruft:
  • erstellt ein -Objekt;
  • verschlüsselt das Ticket;
  • Ein Cookie enthält das verschlüsselte Ticket;
  • Fügt das Cookie der Auflistung von hinzu;
  • Leitet die Anforderung auf der URL, die ursprünglich angefordert wurde, um.

Ändern Sie die WebForm1.aspx-Seite

Die Seite WebForm1.aspx ist die Seite, die ursprünglich angefordert wird. Wenn der Benutzer diese Seite anfordert, wird die Anforderung an der Seite Logon.aspx umgeleitet. Nachdem die Anforderung authentifiziert wird, wird die Anforderung an der Seite WebForm1.aspx umgeleitet.
  1. Klicken Sie in dem Projekt-Mappe-Explorer mit der rechten Maustaste auf , und klicken Sie dann auf .
  2. Klicken Sie auf die Registerkarte in dem Designer.
  3. Ersetzen Sie den dort vorhandenen Code durch den folgenden Code
    <%@ Page language="vb" AutoEventWireup="true" %><%@ Import Namespace="System.Security.Principal" %><html>	<body>		<form id="Form1" method="post" runat="server">			<asp:Label ID="lblName" Runat="server" /><br>			<asp:Label ID="lblAuthType" Runat="server" />		</form>	</body></html><script runat="server">sub Page_Load(sender as object, e as EventArgs)  lblName.Text = "Hello " + Context.User.Identity.Name & "."  lblAuthType.Text = "You were authenticated using " &   Context.User.Identity.AuthenticationType & "."end sub</script>					
  4. Speichern Sie alle Dateien, und kompilieren Sie dann das Projekt.
  5. Fordern Sie die Seite WebForm1.aspx an. Beachten Sie, dass Sie auf Logon.aspx umgeleitet werden.
  6. Geben Sie die An-Meldeinformation ein, und klicken Sie dann auf . Beachten Sie, dass Ihr Benutzername angezeigt wird, und das der Authentifizierungstyp für die Eigenschaft ist, wenn Sie zu WebForm1.aspx umgeleitet werden.
Hinweis: Microsoft empfiehlt, dass Sie SSL-Verschlüsselung verwenden, wenn Sie Formularauthentifizierung verwenden. Das ist, da der Benutzer identifiziert wird auf dem Authentifizierungscookie basiert und SSL-Verschlüsselung für diese Anwendung jeder Person hindert, das Authentifizierungscookie und alle weitere wertvolle Information zu gefährden, gesandt wird, die übertragen wird.
Informationsquellen
Erhalten Sie Weitere Informationen, indem auf die folgenden Artikelanzahlen klickt, um die Artikel der Microsoft Knowledge Base zu lesen:
306590 ASP.NET-Sicherheitsübersicht
317012 Prozess- in ASP.NET und Anforderungsidentität in ASP.NET
306238 Wie Implementieren von rollenbasierter Sicherheit mit formularbasierter Authentifizierung in Ihrer Asp.net-anwendung, indem Visual Basic .NET verwendet
313091 Wie Erstellen von Schlüsseln, indem Visual Basic .NET für Verwendung bei Formularauthentifizierung verwendet
313116 Formularauthentifizierungsanforderungen werden zu LoginUrl-Seite nicht weitergeleitet

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 326340 – Letzte Überarbeitung: 03/22/2007 11:28:33 – Revision: 4.5

Microsoft ASP.NET 1.0, Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft ASP.NET 1.1, Microsoft Visual Basic .NET 2003 Standard Edition

  • kbconfig kbcookie kbhowtomaster kbsecurity kbwebforms KB326340 KbMtde kbmt
Feedback
t" async=""> var varAutoFirePV = 1; var varClickTracking = 1; var varCustomerTracking = 1; var Route = "76500"; var Ctrl = ""; document.write("