Şu anda çevrimdışısınız; İnternet'in yeniden bağlanması bekleniyor

Form kimlik doğrulaması ve Visual Basic .NET kullanarak Active Directory karşı nasıl

ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.

Makalenin İngilizcesi aşağıdaki gibidir:326340
Özet
Bu adım adım makalede, bir ASP.NET nasıl açıklar uygulama Forms kimlik doğrulaması, kullanıcıların karşı Active Directory, Basit Dizin Erişim Protokolü (LDAP) kullanarak kimlik doğrulaması için izin vermek için kullanabilirsiniz.

Kullanıcı kimliği doğrulandı ve yeniden yönlendirildi sonra GenericPrincipal bir nesne istek akar HttpContext.User özelliği depolamak için Global.asax dosyası Application_AuthenticateRequest yöntemini kullanabilirsiniz.

Visual Basic. NET'te bir ASP.NET Web uygulaması oluşturma

Visual Basic. NET'te FormsAuthAd adlı yeni bir ASP.NET Web uygulaması oluşturmak için şu adımları izleyin:
  1. Microsoft Visual Studio .NET'i başlatın.
  2. Dosya menüsünde Yeni ' nin üzerine gelin ve sonra Project ' i tıklatın.
  3. Project Types altında Visual Basic Projects ' ı tıklatın ve ASP.NET Web uygulamasışablonları altında tıklatın.
  4. Konum kutusuna http:// <servername>/FormsAuthAd yazın... (Http://localhost (http://localhost/FormsAuthAd varsa ve Tamam ' ı tıklatın şekilde. yerel sunucuyu kullanıyorsanız, değiştirme
  5. Solution Explorer <a1>Başvurular</a1> düğümünü sağ tıklatın ve sonra da Add Reference</a1>'ı tıklatın.
  6. .NET sekmesinde <a0>Başvuru Ekle</a0> iletişim kutusunda, System.DirectoryServices.dll ' ı tıklatın, sonra da Seç ' i tıklatın ve sonra Tamam ' ı tıklatın.

Kimlik doğrulama kodu yazın

LdapAuthentication.vb adlı yeni bir sınıf dosyası oluşturmak için şu adımları izleyin:
  1. Solution Explorer'da (Çözüm Gezgini), proje düğümünü sağ tıklatın, sonra da Ekle işaret ve sonra Yeni Öğe Ekle'yi tıklatın.
  2. Sınıfşablon altında'ı tıklatın.
  3. LdapAuthentication.vb ' ı <a2>ad</a2> kutusuna yazın ve ' ı tıklatın.
  4. Varolan LdapAuthentication.vb dosyasındaki kodu aşağıdaki kodla değiştirin:
    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					

Kod açıklaması

Kimlik doğrulama kodu, bir etki alanı, bir kullanıcı adı, parola ve konsol ağacında Active Directory'de bir yolunu kabul eder. LDAP Dizin sağlayıcısı, bu kodu kullanır.
Kullanıcı kimlik doğrulaması
Kod Logon.aspx sayfasına LdapAuthentication.IsAuthenticated yöntemini çağırır ve kullanıcıdan toplanan kimlik bilgilerinde geçirir. Daha sonra bir DirectoryEntry nesne yolu dizin ağacı, kullanıcı adı ve parola ile oluşturulur. Kullanıcı adı, "etkialanı\kullanıcıadı" biçiminde olmalıdır. Sonra DirectoryEntry nesne NativeObject özelliği alma tarafından AdsObject bağlantısını zorlamak çalışır. Bu başarılı olursa, CN = özniteliği kullanıcı bir DirectorySearcher nesnesi oluşturarak ve üzerinde SAMAccountName süzme yoluyla elde edilir. Kullanıcının kimliği doğrulandıktan sonra IsAuthenticated yöntemi true değerini döndürür.

Not LDAP, Active Directory ile ilişkili bir nesne için bağlanamıyor kullandığınızda, TCP bağlantı noktaları kullanılıyor. LDAP Artırılmış kullanımını System.DirectoryServices ad kullanılabilir olan tüm TCP bağlantı noktalarını kullanır. Kullanıcılarınızın kimliğini doğrulamak için kullanılan bağlantıyı yeniden kullanma ile TCP yükü azaltmak mümkün olabilir.
Kullanıcı grupları
Kullanıcının ait olduğu grupların listesini edinmek için <a0></a0>, bu kod, LdapAuthentication.GetGroups yöntemini çaðýrýr. LdapAuthentication.GetGroups yöntemi, kullanıcı bir DirectorySearcher nesnesi oluşturarak ve memberOf özniteliği göre süzme yoluyla ait güvenlik ve dağıtım gruplarının bir listesini elde eder. Bu yöntem, kanallar (|) tarafından ayrılmış gruplarının bir listesini döndürür.

LdapAuthentication.GetGroups yöntemi yönetir ve dizelerini kırpar dikkat edin. Bu, kimlik doğrulama tanımlama bilgisinde saklanan dize uzunluğunu azaltır. Dize kesilirse, her grup biçimi aşağıdaki gibi görünür:
CN=...,...,DC=domain,DC=com				
bu çok uzun bir dizeyi oluşturabilirsiniz. Bu dize uzunluğunu tanımlama bilgisinin uzunluğundan büyükse, kimlik doğrulama tanımlama bilgisini oluşturulmayabilir. Bu dize tanımlama bilgisinin uzunluğundan büyük olasılıkla olabilir, Grup bilgileri <a0>ASP.NET önbelleği</a0> nesnesindeki veya bir veritabanında depolamak isteyebilirsiniz. Alternatif olarak, Grup bilgileri şifrelemek ve bu gizli bir form alanı depolamak isteyebilirsiniz.

Global.asax kod yazma

Kod Global.asax dosyasına bir <a0>Application_AuthenticateRequest</a0> olay işleyicisi sağlar. Bu olay işleyicisinin kimlik doğrulama tanımlama bilgisini Context.Request.Cookies topluluğundan alır, tanımlama bilgisinin şifresini çözer ve FormsAuthenticationTicket.UserData özelliğinde depolanan grupların listesini alır. Grupları Logon.aspx sayfasına içinde oluşturulan yöneltme ayrılmış bir listesi görüntülenir.

Kod GenericPrincipal bir nesne oluşturmak için bir dize dizisi dizesini ayrıştırır. Bu nesne, GenericPrincipal nesne oluşturulduktan sonra HttpContext.User özelliğinde yer alır.
  1. Solution Explorer'da (Çözüm Gezgini), Global.asax ' ı sağ tıklatın ve Kod Görüntüle</a1>'ı tıklatın.
  2. Üst Global.asax.vb dosya arkasındaki kodu, aşağıdaki kodu ekleyin:
    Imports System.Web.SecurityImports System.Security.Principal					
  3. Varolan boş olay işleyici için Application_AuthenticateRequest aşağıdaki kodla değiştirin:
    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					

Web.config dosyasını değiştirme

Bu bölümde, forms, authentication ve authorization öğeleri Web.config dosyasında yapılandırın. Bu değişiklikler, yalnızca kimliği doğrulanmış kullanıcılar uygulama erişebilir ve kimliği doğrulanmamış isteklerin bir Logon.aspx sayfasına yönlendirilirsiniz. Bu yapılandırma, yalnızca belirli kullanıcılara ve gruplara erişim uygulama izin verecek şekilde değiştirebilirsiniz.

Varolan Web.config dosyasındaki kodu aşağıdaki kodla değiştirin:
<?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>				
Bildirimi identity impersonate="true" / yapılandırma öğesi. Bu, ASP.NET, Microsoft ınternet ınformation Services (IIS)'dan anonim hesap olarak yapılandırılan hesabının kimliğine bürünmek neden olur. Bu yapılandırma işleminin sonucu olarak, bu uygulama için tüm istekleri yapılandırılmış bir hesabın güvenlik bağlamında çalışır. Kullanıcı, Active Directory karşı kimlik doğrulaması için kimlik bilgilerini sağlar, ancak Active Directory erişen yapılandırılmış hesabın hesaptır. Daha fazla bilgi için REFERENCES Bkz: bölüm.

IIS anonim kimlik doğrulaması için yapılandırma

Anonim kimlik doğrulaması için ııS'YI yapılandırmak için aşağıdaki adımları izleyin:
  1. ınternet ınformation Services (IIS) yönetim konsolunda, "FormsAuthAd" için sanal dizin düğümünü sağ tıklatın.
  2. Özellikler ' i tıklatın ve sonra Dizin Güvenliği</a0> sekmesini tıklatın.
  3. Anonim erişim ve doğrulama denetimi altında Düzenle ' yi tıklatın.
  4. <a0>Anonim erişim</a0> onay kutusunu seçin.
  5. Uygulama anonim hesap için Active Directory iznine sahip bir hesabın olun.
  6. Temizleyin IIS denetime izin ver parola onay kutusu.
Varsayılan ıusr_ computername hesabını Active Directory izni yok.

Logon.aspx sayfasına oluşturma

Yeni ASP.NET Web Form Logon.aspx adlı oluşturmak için şu adımları izleyin:
  1. Solution Explorer'da (Çözüm Gezgini), proje düğümünü sağ tıklatın, sonra da Ekle işaret ve Web formu Ekle</a1>'ı tıklatın.
  2. Logon.aspx <a2>ad</a2> kutusuna yazın ve sonra ' ı tıklatın.
  3. Solution Explorer'da (Çözüm Gezgini), Logon.aspx ' ı sağ tıklatın ve sonra da Görünüm Designer ' ı tıklatın.
  4. Tasarımcı <a1>HTML</a1> sekmesini tıklatın.
  5. Replace the existing code with the following 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. Logon.aspx sayfasında, LDAP Dizin sunucusuna işaret edecek biçimde yolu değiştirin.
Logon.aspx sayfasına bilgileri, kullanıcı ve arama yöntemleri LdapAuthentication sınıfını toplayan bir sayfadır. Kod, kullanıcının kimliğini doğrular ve gruplarının bir listesini edinir sonra kodu bu sırayla aşağıdakileri yapar:
  • bir FormsAuthenticationTicket; oluşturur
  • bilet; şifreler.
  • şifrelenmiş anahtar için bir tanımlama bilgisi; ekler.
  • HttpResponse.Cookies derlemesine; tanımlama bilgisi ekler
  • istek, özgün olarak istenen URL'YE yönlendirir.

WebForm1.aspx sayfayı değiştirin.

Özgün olarak istenen sayfa WebForm1.aspx sayfasıdır. Kullanıcıyı bu sayfayı istediğinde, isteği yeniden yönlendirilip için Logon.aspx sayfasına. Isteği, istek kimliği doğrulandıktan sonra WebForm1.aspx sayfasına yönlendirilir.
  1. Solution Explorer'da (Çözüm Gezgini), WebForm1.aspx dosyasını sağ tıklatın ve Görünüm Tasarımcısı</a1>'ı tıklatın.
  2. Tasarımcı <a1>HTML</a1> sekmesini tıklatın.
  3. Varolan kodu aşağıdaki kodla değiştirin:
    <%@ 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. Tüm dosyaları kaydedin ve sonra Projeyi derleyin.
  5. WebForm1.aspx sayfa isteyin. Logon.aspx için yönlendirileceği dikkat edin.
  6. Oturum açma kimlik bilgilerini yazın ve ardından Gönder ' i tıklatın. WebForm1.aspx yeniden yönlendirilmesi sırasında kullanıcı adınızı görünür dikkat edin ve LdapAuthentication kimlik olduğunu Context.User.Identity.AuthenticationType özelliği için yazın.
Not Microsoft Güvenli Yuva Katmanı (SSL) kullanmasını önerir şifreleme Forms kimlik doğrulaması'nı kullanın. Bunun nedeni, kullanıcı kimlik doğrulama tanımlama bilgisini alarak tanımlanır ve bu uygulama, SSL şifrelemesini kimlik doğrulama tanımlama bilgisini ve aktarılmasına neden diğer önemli bilgileri bozmasını herkes engeller olmasıdır.
Referanslar
Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleleri görüntülemek üzere aşağıdaki makale numaralarını tıklatın:
306590ASP.NET güvenliğine genel bakış
317012ASP.NET'te işlem ve istek kimliği (Bu bağlantı, bir kısmı veya tamamı İngilizce olan içeriğe işaret edebilir.)
306238Rol tabanlı güvenlik form tabanlı kimlik doğrulaması ile ASP.NET uygulamanız Visual Basic. NET'i kullanarak nasıl
313091Forms kimlik doğrulaması kullanmak için Visual Basic. NET'i kullanarak anahtarlarını oluşturma hakkında
313116Form kimlik doğrulama istekleri loginUrl sayfasına yönlendirilir

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 326340 - Son İnceleme: 03/22/2007 11:28:33 - Düzeltme: 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

  • kbmt kbconfig kbcookie kbhowtomaster kbsecurity kbwebforms KB326340 KbMttr
Geri bildirim