Ver Mensaje Individual
  #2 (permalink)  
Antiguo 29/01/2013, 09:34
maialenlopez
 
Fecha de Ingreso: abril-2012
Mensajes: 449
Antigüedad: 12 años, 7 meses
Puntos: 7
Pregunta Respuesta: Obtener nombre, email y grupo del directorio activo

[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 original
  1. Imports System.Text
  2. Imports System.Collections
  3. Imports System.Collections.Generic
  4. Imports System.DirectoryServices
  5. Imports System.DirectoryServices.ActiveDirectory
  6. Imports System.Security
  7. Imports System.Security.Permissions
  8.  
  9. Public Class _Default
  10.     Inherits System.Web.UI.Page
  11.  
  12.     Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  13.         Dim username, userpass, user, pass, nombre, email, grupo As String
  14.         Dim contar, i As Integer
  15.         Dim valoresarray As String()
  16.  
  17.         If IsPostBack = False Then
  18.  
  19.             username = HttpContext.Current.Request.ServerVariables("AUTH_USER")
  20.             contar = username.Length
  21.             i = username.IndexOf("\")
  22.             user = username.Substring(i + 1)
  23.             valoresarray = FullName(user)
  24.             nombre = valoresarray(0)
  25.             email = valoresarray(1)
  26.             grupo = obtenergrupo(user)
  27.  
  28.             Session.Add("nombre", nombre)
  29.             Session.Add("email", email)
  30.             Session.Add("grupoUsuario", grupo)
  31.  
  32.             Me.nombreUsuario.Text = CType(Session("nombre"), String)
  33.             Me.emailUsuario.Text = CType(Session("email"), String)
  34.         End If
  35.     End Sub
  36.  
  37.     Public Function FullName(ByVal user As String) As String()
  38.         Dim adsEntry As New DirectoryEntry("LDAP://192.168.1.108/DC=indar,DC=local")
  39.         Dim deSearch As New DirectorySearcher(adsEntry)
  40.         Dim properties() As String = {"fullname"}
  41.         deSearch.SearchScope = SearchScope.Subtree
  42.         deSearch.ReferralChasing = ReferralChasingOption.All
  43.         deSearch.PropertiesToLoad.AddRange(properties)
  44.         deSearch.Filter = "(sAMAccountName=" + user + ")"
  45.  
  46.         Dim result As SearchResult
  47.         result = deSearch.FindOne()
  48.         Dim directoryEntry As New DirectoryEntry
  49.         directoryEntry = result.GetDirectoryEntry()
  50.         Dim displayname, mail As String
  51.         displayname = directoryEntry.Properties("displayname").Value
  52.         mail = directoryEntry.Properties("mail").Value
  53.         Dim ar As String() = {displayname, mail}
  54.         Return ar
  55.     End Function
  56.  
  57.     Private Function obtenergrupo(ByVal user As String)
  58.         Dim deGlobal As New DirectoryEntry("LDAP://192.168.1.108/DC=indar,DC=local")
  59.         Dim ds As DirectorySearcher = New DirectorySearcher(deGlobal)
  60.  
  61.         ds.SearchScope = DirectoryServices.SearchScope.Subtree
  62.         ds.Filter = "(&(objectcategory=user)(SAMAccountName=" & user & "))"
  63.         Dim res As SearchResult = ds.FindOne
  64.         Dim grupo As String
  65.         Dim grupo1, grupo2, grupo3 As Integer
  66.         For i = 0 To res.Properties("memberOf").Count() - 1
  67.             grupo = res.Properties("memberOf")(i).ToString
  68.  
  69.             If grupo = "CN=GHDGAprobacion,OU=UOHDG,OU=UOAplicaciones,DC=indar,DC=local" Then
  70.                 grupo1 = 1
  71.             ElseIf grupo = "CN=GHDGVisas,OU=UOHDG,OU=UOAplicaciones,DC=indar,DC=local" Then
  72.                 grupo2 = 2
  73.             Else
  74.                 grupo3 = 3
  75.             End If
  76.         Next
  77.  
  78.         If grupo1 = 1 Then
  79.  
  80.             If grupo1 = 1 And grupo2 = 2 And grupo3 = 3 Then
  81.  
  82.                 Return grupo1
  83.             End If
  84.  
  85.             Return grupo1
  86.         End If
  87.  
  88.         If grupo2 = 2 Then
  89.             If grupo2 = 2 And grupo3 = 3 Then
  90.  
  91.                 Return grupo2
  92.             End If
  93.  
  94.             Return grupo2
  95.         End If
  96.  
  97.         If grupo3 = 3 Then
  98.  
  99.             Return grupo3
  100.         End If
  101.     End Function
  102.  
  103. 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?
__________________
Gracias por todo;

Un saludo