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

Překlady článku Překlady článku
ID článku: 316748 - Produkty, které se vztahují k tomuto článku.
Tento článek se týká následujících společnosti Microsoft.NET Rámec oborů názvů knihovny tříd:
  • System.text
  • System.DirectoryServices
  • System.Security.Principal
  • System.web.Security
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Tento článek ukazuje, 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 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 C#.NET

Vytvoření nového prostředí ASP, postupujte takto:NET webové aplikace s názvem FormsAuthAd v jazyce Visual C#.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 Visual C# projekty 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í pole, nahradí WebApplication1 s FormsAuthAd.
  5. Klepněte na tlačítko OK.
  6. Klepněte pravým tlačítkem myši Odkazy uzel v aplikaci Solution Explorer a pak klepněte na tlačítko Přidat odkaz.
  7. 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.cs:
  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.cs v Název pole a pak klepněte na tlačítko Otevřít.
  4. Nahraďte existující kód v souboru LdapAuthentication.cs následujícím kódem.
    using System;
    using System.Text;
    using System.Collections;
    using System.DirectoryServices;
    
    namespace FormsAuth
    {	
      public class LdapAuthentication
      {
        private String _path;
        private String _filterAttribute;
    
        public LdapAuthentication(String path)
        {
          _path = path;
        }
    		
        public bool IsAuthenticated(String domain, String username, String pwd)
        {
          String domainAndUsername = domain + @"\" + username;
          DirectoryEntry entry = new DirectoryEntry(_path, domainAndUsername, pwd);
    			
          try
          {	//Bind to the native AdsObject to force authentication.			
             Object obj = entry.NativeObject;
    
    	DirectorySearcher search = new DirectorySearcher(entry);
    
    	search.Filter = "(SAMAccountName=" + username + ")";
    	search.PropertiesToLoad.Add("cn");
    	SearchResult result = search.FindOne();
    
    	if(null == result)
    	{
      	  return false;
    	}
    
    	//Update the new path to the user in the directory.
    	_path = result.Path;
    	_filterAttribute = (String)result.Properties["cn"][0];
          }
          catch (Exception ex)
          {
            throw new Exception("Error authenticating user. " + ex.Message);
          }
    
    	return true;
         }
    
         public String GetGroups()
         {
           DirectorySearcher search = new DirectorySearcher(_path);
           search.Filter = "(cn=" + _filterAttribute + ")";
           search.PropertiesToLoad.Add("memberOf");
           StringBuilder groupNames = new StringBuilder();
    
           try
           {
             SearchResult result = search.FindOne();
    
    	 int propertyCount = result.Properties["memberOf"].Count;
    
       	 String dn;
    	 int equalsIndex, commaIndex;
    				
    	 for(int propertyCounter = 0; propertyCounter < propertyCount; propertyCounter++)
    	 {
    	   dn = (String)result.Properties["memberOf"][propertyCounter];
    
        	   equalsIndex = dn.IndexOf("=", 1);
    	   commaIndex = dn.IndexOf(",", 1);
    	   if(-1 == equalsIndex)
    	   {
    	     return null;
         	   }
    
               groupNames.Append(dn.Substring((equalsIndex + 1), (commaIndex - equalsIndex) - 1));
    	   groupNames.Append("|");
    
        	 }
           }
           catch(Exception ex)
           {
             throw new Exception("Error obtaining group names. " + ex.Message);
           }			
           return groupNames.ToString();
         }
       }
    }
    					
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.

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.

Chcete-li získat seznam skupin, které uživatel patří, Tento kód volá 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, nebudou prohlížečů, potvrďte ověřovací soubor cookie a budete přesměrováni na přihlašovací stránku. Však Pokud pracujete v prostředí s více doménami, bude pravděpodobně třeba zachovat název domény skupina název, protože skupiny v různých doménách mohou mít stejný název skupiny. Máte-li zachovat název domény pro rozlišení jedné skupiny od druhého.

Většina prohlížečů podporují soubory cookie až 4096 bajtů. Pokud tento řetězec může potenciálně překročit délku souboru cookie, můžete ukládat informace o skupině v ASP.NET mezipaměti objektu nebo databáze. 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 Soubor Global.asax.cs:
    using System.Web.Security;
    using System.Security.Principal;
    					
  3. Nahradit existující prázdné obslužné rutiny pro Application_AuthenticateRequest následujícím kódem.
    void Application_AuthenticateRequest(Object sender, EventArgs e)
    {
      String cookieName = FormsAuthentication.FormsCookieName;
      HttpCookie authCookie = Context.Request.Cookies[cookieName];
    
      if(null == authCookie)
      {//There is no authentication cookie.
        return;
      }	
    		
      FormsAuthenticationTicket authTicket = null;
    	
      try
      {
        authTicket = FormsAuthentication.Decrypt(authCookie.Value);
      }
      catch(Exception ex)
      {
        //Write the exception to the Event Log.
        return;
      }
    	
      if(null == authTicket)
      {//Cookie failed to decrypt.
        return;		
      }		
    	
      //When the ticket was created, the UserData property was assigned a
      //pipe-delimited string of group names.
      String[] groups = authTicket.UserData.Split(new char[]{'|'});
    
      //Create an Identity.
      GenericIdentity id = new GenericIdentity(authTicket.Name, "LdapAuthentication");
    	
      //This principal flows throughout the request.
      GenericPrincipal principal = new GenericPrincipal(id, groups);
    
      Context.User = principal;
    	
    }
    					

Upravte soubor Web.config

V této části můžete konfigurovat <forms></forms>, <authentication></authentication>a <authorization></authorization> prvky v souboru Web.config. Tyto změny pouze požadavky aplikace a neověřený přístup ověřeným uživatelům přesměrováni na stránce Logon.aspx. Tuto konfiguraci lze upravit Povolit pouze určitým uživatelům a skupiny přístup k aplikaci.

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="10" path="/" >
      </forms>
    </authentication>	
    <authorization>	
      <deny users="?" />
      <allow users="*" />
    </authorization>	
    <identity impersonate="true" />
  </system.web>
</configuration>
				
Upozornění <identity impersonate="true"></identity> Konfigurace prvku. To způsobí ASP.NET zosobnění účet, který je konfigurován jako anonymní účet z aplikace Microsoft Internet Informační služby (IIS). V důsledku této konfiguraci všech požadavků na Tato aplikace spuštěna v kontextu zabezpečení účtu konfigurované. Na uživatel zadá 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. Ve službě IIS rozbalte uzel serveru počítače, rozbalte položku Webové servery, rozbalte položku Výchozí server WWW, klepněte pravým tlačítkem myši FormsAuthAda klepněte na tlačítko Vlastnosti.
  2. Klepněte Kartu Zabezpečení adresářea klepněte na tlačítko Upravit ve skupinovém rámečku Nastavení anonymního přístupu a ověřování.
  3. Proveďte anonymní účet pro použití účtu, který má oprávnění k adresáři Active Directory.
  4. Klepnutím zrušte zaškrtnutí políčka Povolit službě IIS heslo řízení.
  5. V části "Ověřování přístupu" zrušte zaškrtnutí políčka "Integrované ověřování systému Windows".
  6. Klepněte na tlačítko OK.
  7. Klepněte na tlačítko použít
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="c#" AutoEventWireup="true" %>
    <%@ Import Namespace="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>
    void Login_Click(Object sender, EventArgs e)
    {
      String adPath = "LDAP://corp.com"; //Fully-qualified Domain Name
      LdapAuthentication adAuth = new LdapAuthentication(adPath);
      try
      {
        if(true == adAuth.IsAuthenticated(txtDomain.Text, txtUsername.Text, txtPassword.Text))
        {
          String groups = adAuth.GetGroups();
    
          //Create the ticket, and add the groups.
          bool isCookiePersistent = chkPersist.Checked;
          FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1,  txtUsername.Text,
    	DateTime.Now, DateTime.Now.AddMinutes(60), isCookiePersistent, groups);
    	
          //Encrypt the ticket.
          String encryptedTicket = FormsAuthentication.Encrypt(authTicket);
    		
          //Create a cookie, and then add the encrypted ticket to the cookie as data.
          HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
    
          if(true == isCookiePersistent)
    	authCookie.Expires = authTicket.Expiration;
    				
          //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.";
        }
      }
      catch(Exception ex)
      {
        errorLabel.Text = "Error authenticating. " + ex.Message;
      }
    }
    </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 skupiny, vytvoří kód FormsAuthenticationTicket objekt, zašifruje lístek, přidá šifrovaný lístek na soubor cookie, přidá do souboru cookie HttpResponse.Cookies kolekce a poté přesměrovává požadavku na adresu URL, která byla původně požadoval.

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="c#" 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>
    void Page_Load(Object sender, EventArgs e)
    {
      lblName.Text = "Hello " + Context.User.Identity.Name + ".";
      lblAuthType.Text = "You were authenticated using " +   Context.User.Identity.AuthenticationType + ".";
    }
    </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.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 klepnutím na tlačítko naleznete v následujících článcích znalostní báze společnosti Microsoft:
306590PROSTŘEDÍ ASP.Přehled zabezpečení sítě
317012 Zpracování a vyžádání identity v prostředí ASP.NET
311495 Jak implementovat zabezpečení na základě rolí pomocí ověřování na základě formulářů aplikace ASP.NET aplikací pomocí aplikace Visual C#.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: 316748 - Poslední aktualizace: 19. května 2011 - Revize: 7.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
Klíčová slova: 
kbconfig kbcookie kbhowtomaster kbsecurity kbwebforms kbmt KB316748 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:316748

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