He conseguido que medio funcione lo del directorio activo en una aplicación web programada en vb.net, pero necesito que en la función ValidateUser, que mostraré en el código de abajo, no solo me valide con el user si no que me valide con el user y con el pass. ¿Como puedo hacerlo?
Código vb.net:
Ver original
Imports System.Text Imports System.Collections Imports System.Collections.Generic Imports System.DirectoryServices Imports System.DirectoryServices.ActiveDirectory Imports System.Security Imports System.Security.Permissions Public Class Login Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 'RegisterHyperLink.NavigateUrl = "Register.aspx?ReturnUrl=" + HttpUtility.UrlEncode(Request.QueryString("ReturnUrl")) End Sub Protected Sub LoginButton_Click(sender As Object, e As EventArgs) Handles LoginButton.Click Dim usuario As String Dim pass As String Dim valido As Boolean Dim nombre As String usuario = Me.UserName.Text pass = Me.Password.Text If usuario = "" Or pass = "" Then errorLabel.Text = "*Introduzca los datos de acceso necesarios" Else GetDirectoryEntry(usuario, pass) valido = IsValidADLogin(usuario, pass) If valido Then ValidateUser(usuario, pass) nombre = FullName(usuario, pass) Else Me.UserName.Text = "" Me.Password.Text = "" errorLabel.Text = "*Datos incorrectos. Vuelva a introducir los datos de acceso." End If End If End Sub Public Shared Function GetDirectoryEntry(ByVal usuario As String, ByVal pass As String) As DirectoryEntry 'Of course change the information for the LDAP to your network Dim dirEntry As New DirectoryEntry dirEntry.Path = ("LDAP://192.168.1.1/DC=dc,DC=dc") dirEntry.AuthenticationType = AuthenticationTypes.Secure dirEntry.Username = usuario dirEntry.Password = pass Return dirEntry End Function Public Shared Function ExtractUserName(ByVal path As String) As String 'Split on the "\" 'Return the rest (username part) Return userPath((userPath.Length - 1)) End Function Public Function IsValidADLogin(ByVal user As String, ByVal pass As String) As Boolean Try 'Create a DirectorySearcher Object (used for searching the AD) Dim search As New DirectorySearcher() 'Set the filter on the searcher object to look for the SAMAccountName, givenName and the sn (Sur Name) search.Filter = "(sAMAccountName=" + user + ")" 'Use the .FindOne() Method to stop as soon as a match is found Dim result As SearchResult = search.FindOne() 'Now check to see if a result was found If result Is Nothing Then 'Login isn't valid Return False Else 'Valid login Return True End If Catch ex As Exception End Try End Function Public Function [B]ValidateUser[/B](ByVal user As String, ByVal pass As String) As Boolean Dim adsEntry As New DirectoryEntry("LDAP://192.168.1.1/DC=dc,DC=dc", user, pass) Dim adsSearcher As New DirectorySearcher(adsEntry) [B]adsSearcher.Filter = "sAMAccountName=" + user + ")"[/B] Dim bSucceded As Boolean = False Try Dim adsSearchResult As SearchResult adsSearchResult = adsSearcher.FindOne() bSucceded = True Catch ex As Exception Dim strError As String = ex.Message End Try Return bSucceded End Function Public Function FullName(ByVal user As String, ByVal pass As String) As String 'Dim dirEntry As New DirectoryEntry("LDAP://servername/DC=servername,DC=com", strDomain & "\" & user, pass) Dim adsEntry As New DirectoryEntry("LDAP://192.168.1.108/DC=indar,DC=local", user, pass) Dim deSearch As New DirectorySearcher(adsEntry) Dim properties() As String = {"fullname"} deSearch.SearchScope = SearchScope.Subtree deSearch.ReferralChasing = ReferralChasingOption.All deSearch.PropertiesToLoad.AddRange(properties) deSearch.Filter = "sAMAccountName=" + user + ")" Dim result As SearchResult result = deSearch.FindOne() Dim directoryEntry As New DirectoryEntry directoryEntry = result.GetDirectoryEntry() Dim displayname As String displayname = directoryEntry.Properties("displayname")(0).ToString() Return displayname End Function End Class
![En dos](http://static.forosdelweb.com/fdwtheme/images/smilies/partido.png)