[QUOTE=maialenlopez;4357822]Hola;
Tengo una aplicación web en la que en un principio tenia una Login.aspx en la cual metía el nombre de usuario y contraseña y si esto correspondía con los datos del directorio activo la aplicación mostraba una PaginaPrincipal.aspx.
Ahora me han dicho que tengo que quitar ese Login.aspx y mostrar directamente la PaginaPrincipal.aspx obteniendo el nombre de usuario, email y grupos de este desde el directorio activo. Es decir, si yo accedo a mi ordenador con mi usuario y contraseña que una vez que acceda a esta aplicación me coja mis datos del directorio activo.
Os dejo las funciones que tenia en Login.aspx para que me echéis una mano.
He conseguido hacerlo mediante esto y utilizando las funciones que tenia echas en Login.aspx
Código vb.net:
Ver originalImports 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 _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim username, userpass, user, pass, nombre, email, grupo As String
Dim contar, i As Integer
Dim valoresarray As String()
If IsPostBack = False Then
username = HttpContext.Current.Request.ServerVariables("AUTH_USER")
contar = username.Length
i = username.IndexOf("\")
user = username.Substring(i + 1)
valoresarray = FullName(user)
nombre = valoresarray(0)
email = valoresarray(1)
grupo = obtenergrupo(user)
Session.Add("nombre", nombre)
Session.Add("email", email)
Session.Add("grupoUsuario", grupo)
Me.nombreUsuario.Text = CType(Session("nombre"), String)
Me.emailUsuario.Text = CType(Session("email"), String)
End If
End Sub
Public Function FullName(ByVal user As String) As String()
Dim adsEntry As New DirectoryEntry("LDAP://192.168.1.108/DC=indar,DC=local")
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, mail As String
displayname = directoryEntry.Properties("displayname").Value
mail = directoryEntry.Properties("mail").Value
Dim ar As String() = {displayname, mail}
Return ar
End Function
Private Function obtenergrupo(ByVal user As String)
Dim deGlobal As New DirectoryEntry("LDAP://192.168.1.108/DC=indar,DC=local")
Dim ds As DirectorySearcher = New DirectorySearcher(deGlobal)
ds.SearchScope = DirectoryServices.SearchScope.Subtree
ds.Filter = "(&(objectcategory=user)(SAMAccountName=" & user & "))"
Dim res As SearchResult = ds.FindOne
Dim grupo As String
Dim grupo1, grupo2, grupo3 As Integer
For i = 0 To res.Properties("memberOf").Count() - 1
grupo = res.Properties("memberOf")(i).ToString
If grupo = "CN=GHDGAprobacion,OU=UOHDG,OU=UOAplicaciones,DC=indar,DC=local" Then
grupo1 = 1
ElseIf grupo = "CN=GHDGVisas,OU=UOHDG,OU=UOAplicaciones,DC=indar,DC=local" Then
grupo2 = 2
Else
grupo3 = 3
End If
Next
If grupo1 = 1 Then
If grupo1 = 1 And grupo2 = 2 And grupo3 = 3 Then
Return grupo1
End If
Return grupo1
End If
If grupo2 = 2 Then
If grupo2 = 2 And grupo3 = 3 Then
Return grupo2
End If
Return grupo2
End If
If grupo3 = 3 Then
Return grupo3
End If
End Function
End Class
Pero tengo un problema haber si me podéis ayudar. Esto si lo hago localmente funciona perfecto pero el problema es que esta aplicación tiene que estar en un servidor y no cuando cojo el usuario mediante
username = HttpContext.Current.Request.ServerVariables("AUTH_ USER") me coge el nombre del servidor y lo que quiero es que coja el nombre del usuario en el que se está ejecutando la aplicacion.
Me podéis echar una mano?