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
'Public _Path As String = "LDAP://192.168.1.108/DC=indar,DC=local"
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
[B]ValidateUser[/B](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.108/DC=indar,DC=local")
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 "\"
Dim userPath
As String() = path
.Split(New Char() {"\"c
})
'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
MsgBox("Active Directory Error" & Chr(13) & Chr(13) & ex
.Message) 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.108/DC=indar,DC=local", user, pass)
Dim adsSearcher As New DirectorySearcher(adsEntry)
[COLOR="Red"]adsSearcher.Filter = "sAMAccountName=" + user + ")"[/COLOR]
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 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"}
'string[] properties = new 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