Jak lze ověřit v adresáři Active Directory pomocí ověřování pomocí formulářů a Visual Basic.NET

Překlady článku Překlady článku
ID článku: 326340 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Tento podrobný článek popisuje, jak ASP.NET aplikace může povolit ověření pomocí ověřování pomocí formulářů v adresáři Active Directory pomocí Lightweight Directory Access Protocol (LDAP).

Jakmile uživatel ověřen a přesměrována, můžete použít na Application_AuthenticateRequest Metoda ukládání souboru Global.asax GenericPrincipal objekt v HttpContext.User Vlastnost, která toky v rámci požadavku.

Vytvoření ASP.NET webové aplikace v jazyce Visual Basic.NET

Vytvoření nového prostředí ASP, postupujte takto:NET webové aplikace s názvem FormsAuthAd v jazyce Visual Basic.NET:
  1. Spusťte aplikaci Visual Studio.NET.
  2. V Soubor příkaz Novýa klepněte na tlačítko Projekt.
  3. Klepněte na tlačítko Projekty jazyka Visual Basic ve skupinovém rámečku Typy projektůa klepněte na tlačítko PROSTŘEDÍ ASP.NET webové aplikace ve skupinovém rámečku Šablony.
  4. V Umístění Typ pole http://<servername>/FormsAuthAd</servername> (Nahrazení http://localhost Používáte-li místní server (tak, aby byl http://localhost/FormsAuthAda klepněte na tlačítko OK.
  5. Klepněte pravým tlačítkem myši Odkazy uzel v aplikaci Solution Explorer a pak klepněte na tlačítko Přidat odkaz.
  6. V .NET karty v Přidat odkaz Dialogové okno, klepněte na tlačítko System.DirectoryServices.dll, klepněte na tlačítko Vybrata klepněte na tlačítko OK.

Ověřovací kód

Postupujte následujícím způsobem k vytvoření nové třídy soubor s názvem LdapAuthentication.vb:
  1. V aplikaci Solution Explorer klepněte pravým tlačítkem myši na uzel projektu bod k Přidata klepněte na tlačítko Přidat novou položku.
  2. Klepněte na tlačítko Třída ve skupinovém rámečku Šablony.
  3. Typ LdapAuthentication.vb v Název pole a pak klepněte na tlačítko Otevřít.
  4. Nahraďte existující kód v souboru LdapAuthentication.vb následujícím kódem:
    Imports System
    Imports System.Text
    Imports System.Collections
    Imports System.DirectoryServices
    
    Namespace 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 Class
    End Namespace
    
    
    					

Vysvětlení kódu

Ověřovací kód přijímá domény, uživatelské jméno, heslo a cesty do stromové struktury služby Active Directory. Tento kód používá Zprostředkovatel adresáře LDAP.
Ověření uživatele
Kód Logon.aspx stránky volání LdapAuthentication.IsAuthenticated Metoda a průchodů v pověření, které jsou shromažďovány z uživatel. Potom, DirectoryEntry Cesta ke stromu adresářů, uživatel je vytvořen objekt jméno a heslo. Uživatelské jméno musí být ve formátu "DOMENA\Uzivatelske_jmeno". Na DirectoryEntry objekt se pak pokusí platnost AdsObject získáním vazby NativeObject Vlastnost. Pokud se to podaří, KN atribut pro uživatele se získá vytvořením DirectorySearcher objektu a pomocí filtrování SAMAccountName. Poté, co je uživatel ověřen, IsAuthenticated Metoda vrátí. PRAVDA.

Poznámka: Při použití protokolu LDAP k vytvoření vazby k objektu týkající se služby Active Directory Porty TCP jsou používány. Použití LDAP se zvýšil System.DirectoryServices obor názvů může použít všechny porty TCP, které jsou k dispozici. Můžete snížit zatížení TCP opětovným použitím použitý k připojení ověření uživatele.
Skupiny uživatelů
Chcete-li získat seznam skupin, které uživatel patří, tento kód volání LdapAuthentication.GetGroups Metoda. Na LdapAuthentication.GetGroups Metoda získá seznam zabezpečení a distribučních skupin uživatel patří vytvoření DirectorySearcher objektu a pomocí filtrování podle Člen atribut. Tato metoda vrátí seznam skupin, který je oddělen pomocí kanálů (|).

Všimněte si, že LdapAuthentication.GetGroups Metoda manipuluje a zkrátí řetězce. To snižuje délka řetězce, který je uložen v souboru cookie ověřování. Pokud je řetězec zkrácena, formát každé skupiny se zobrazí takto:
CN=...,...,DC=domain,DC=com
				
To lze vytvořit velmi dlouhý řetězec. Pokud je délka tohoto řetězce větší než délka souboru cookie, nemusí být ověřovací soubor cookie vytvořen. Pokud tento řetězec může být potenciálně větší než délka soubor cookie, můžete ukládat informace o skupině v ASP.NET mezipaměti objektů nebo v databázi. Alternativně můžete zašifrovat informace o skupině a uložte tyto informace skryté pole formuláře.

Kód Global.asax

Kód v souboru Global.asax poskytuje Application_AuthenticateRequest obslužnou rutinu události. Načte tuto obslužnou rutinu události ověřování soubor cookie z Context.Request.Cookies shromažďování, dešifruje soubor cookie a načte seznam skupin budou uloženy v FormsAuthenticationTicket.UserData Vlastnost. Skupiny se zobrazí v seznamu oddělené kanálu, který je vytvořit na stránce Logon.aspx.

Kód analyzuje řetězec v pole řetězců vytvořit GenericPrincipal objekt. Po GenericPrincipal je vytvořen objekt, objekt je umístěn v HttpContext.User Vlastnost.
  1. V aplikaci Solution Explorer klepněte pravým tlačítkem myši Global.asaxa klepněte na tlačítko Zobrazit kód.
  2. Přidejte následující kód v horní části kódu, vzadu Soubor Global.asax.VB:
    Imports System.Web.Security
    Imports System.Security.Principal
    					
  3. Nahradit existující prázdné obslužné rutiny pro Application_AuthenticateRequest následujícím kódem:
    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
    					

Upravte soubor Web.config

V této části můžete konfigurovat formuláře, ověřovánía autorizace prvky v souboru Web.config. S Tyto změny pouze ověřeným uživatelům přístup aplikace, a neověřené požadavky přesměrovány na stránce Logon.aspx. Můžete upravit Tato konfigurace pouze určitým uživatelům a skupinám přístup k aplikace.

Nahraďte existující kód v souboru Web.config Následující kód:
<?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>
				
Upozornění identity impersonate = "true" aKonfigurace prvku. To způsobí ASP.NET zosobnění účtu, který je nakonfigurován jako anonymní účet ze serveru Microsoft Internet Information Služba (IIS). V důsledku této konfiguraci všech požadavků tohoto aplikace je spuštěna v kontextu zabezpečení účtu nakonfigurované. Uživatel poskytuje pověření pro ověření v adresáři Active Directory, ale účet, který má přístup ke službě Active Directory je nakonfigurovaný účet. Další informace informace naleznete ODKAZYsekce.

Konfigurace služby IIS pro anonymní ověřování

Chcete-li konfigurace služby IIS pro anonymní ověřování, postupujte kroky:
  1. Správa služby IIS (Internetová informační služba) konzola, klepněte pravým tlačítkem na uzel pro virtuální adresář "formsauthad".
  2. Klepněte Vlastnostia klepněte Zabezpečení adresáře Na kartě.
  3. Klepněte na tlačítko Upravit ve skupinovém rámečku Anonymní ověřování a řízení přístupu.
  4. Vyberte Anonymní přístup Zaškrtávací políčko.
  5. Vytvořit účet anonymního účtu aplikace která má oprávnění k adresáři Active Directory.
  6. Zrušte zaškrtnutí políčka Aby služba IIS ovládacího prvku Heslo Zaškrtávací políčko.
Ve výchozím nastavení IUSR_název_počítačeúčet nemá oprávnění k adresáři Active Directory.

Vytvořit na stránce Logon.aspx

Vytvoření nového prostředí ASP, postupujte takto:NET webový formulář s názvem Logon.aspx:
  1. V aplikaci Solution Explorer klepněte pravým tlačítkem myši na uzel projektu bod k Přidata klepněte na tlačítko Přidat webový formulář.
  2. Typ Logon.aspx v Název pole a pak klepněte na tlačítko Otevřít.
  3. V aplikaci Solution Explorer klepněte pravým tlačítkem myši Logon.aspxa klepněte na tlačítko Návrhář zobrazení.
  4. Klepněte HTML Karta v návrháři.
  5. Nahraďte existující kód následující kód:
    <%@ 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 try
    end sub
    </script>
    					
  6. Změňte cestu tak, aby na stránce Logon.aspx vaše Adresářovým serverem LDAP.
Logon.aspx je stránka, která shromažďuje informace od uživatele a volání metod na LdapAuthentication Třída. Po kódu ověří uživatele a získá seznam skupin provede kód v tomto pořadí následující:
  • vytvoří FormsAuthenticationTicket objekt;
  • zašifruje jízdenky,
  • Přidá do souboru cookie; šifrovaný lístek.
  • Přidá do souboru cookie HttpResponse.Cookies kolekce;
  • Přesměrování požadavku na adresu URL, která byla původně požádal.

Upravte stránku WebForm1.aspx

Na stránce WebForm1.aspx je původně požadovanou stránku. Když uživatel požádá o stránku, je požadavek přesměrován na Logon.aspx stránka. Po ověření žádosti požadavek přesměrován Stránka WebForm1.aspx.
  1. V aplikaci Solution Explorer klepněte pravým tlačítkem myši WebForm1.aspxa klepněte na tlačítko Návrhář zobrazení.
  2. Klepněte HTML Karta v návrháři.
  3. Nahraďte existující kód následující kód:
    <%@ 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. Uložte všechny soubory a pak kompilaci projektu.
  5. Požadavek stránku WebForm1.aspx. Všimněte si, že jste Přesměrováno na: Logon.aspx.
  6. Zadejte přihlašovací údaje a klepněte na tlačítko Odeslat. Když budete přesměrováni do souboru WebForm1.aspx oznámení uživatele název se objeví a že LdapAuthentication typ ověřování je Context.User.identity.AuthenticationType Vlastnost.
Poznámka: Společnost Microsoft doporučuje používat protokol SSL (protokol SSL (Secure Sockets Layer)) šifrování, použijete-li ověřování pomocí formulářů. Je to proto, že je uživatel identifikovat na základě cookie ověřování a šifrování SSL na tomto brání všem uživatelům aplikace porušili ověřovací soubor cookie a jakékoli Další důležité informace, která byla přenesena.

Odkazy

Další informace získáte naleznete v následujících článcích báze Microsoft Knowledge Base:
306590PROSTŘEDÍ ASP.Přehled zabezpečení sítě
317012 Zpracování a vyžádání identity v prostředí ASP.NET
306238 Jak implementovat zabezpečení na základě rolí pomocí ověřování na základě formulářů aplikace ASP.NET aplikací pomocí jazyka Visual Basic.NET
313091 Jak vytvořit klíče pomocí jazyka Visual Basic.NET pro použití při ověřování pomocí formulářů
313116 Požadavky na ověřování formulářů není přesměrováni na stránku loginUrl

Vlastnosti

ID článku: 326340 - Poslední aktualizace: 19. května 2011 - Revize: 6.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft ASP.NET 1.0
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft ASP.NET 1.1
  • Microsoft Visual Basic .NET 2003 Standard Edition
Klíčová slova: 
kbconfig kbcookie kbhowtomaster kbsecurity kbwebforms kbmt KB326340 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:326340

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com