Foros del Web » Programación para mayores de 30 ;) » .NET »

[SOLUCIONADO] Obtener desde directorio activo nombre y apellido de empleado e email

Estas en el tema de Obtener desde directorio activo nombre y apellido de empleado e email en el foro de .NET en Foros del Web. Hola; Como siempre que escribo aquí necesito vuestra ayuda. He creado un aplicación web programandola en vb.net. En una de las pagina que tengo, necesito ...
  #1 (permalink)  
Antiguo 14/12/2012, 03:21
 
Fecha de Ingreso: abril-2012
Mensajes: 449
Antigüedad: 12 años
Puntos: 7
Exclamación Obtener desde directorio activo nombre y apellido de empleado e email

Hola;

Como siempre que escribo aquí necesito vuestra ayuda. He creado un aplicación web programandola en vb.net.
En una de las pagina que tengo, necesito mostrar el nombre, apellido y el email de la persona que esta conectada mediante directorio activo (AD).

¿Me puede alguien ayudar indicándome que es lo que necesito y el código que tengo que usar?

Gracias
__________________
Gracias por todo;

Un saludo
  #2 (permalink)  
Antiguo 14/12/2012, 10:05
Avatar de jhonjairo00  
Fecha de Ingreso: noviembre-2010
Ubicación: Bogotá D.C.
Mensajes: 31
Antigüedad: 13 años, 5 meses
Puntos: 6
Respuesta: Obtener desde directorio activo nombre y apellido de empleado e email

Hola,

.Net tiene un espacio de nombres con el cual puedes tener acceso a los componentes del Active Directory, debes agregar la referencia a tu proyecto y listo

Si quieres busca información acerca de System.DirectoryServices, igual te dejo un enlace en el que hacen bastantes cosas con el directorio activo, entre las cuales está la forma de verificar usuarios, y con esto ya puedes ver la información que quieres

También debes conocer el LDAP: que es el protocolo de servicio que se ejecuta en una capa encima de la capa TCP / IP (o pila) y proporciona una interfaz para el acceso, la búsqueda, y modificación de directorios de Internet, y se basa en una arquitectura cliente-servidor y ADSI: que es un conjunto de componentes COM (o interfaces) diseñadas para acceder a los servicios de directorio de los proveedores de red diferentes en una configuración de la red, sino que está diseñado para proporcionar una interfaz única y centralizada para el acceso y la gestión de la red recursos.

Aquí te lo explican mejor...

[URL="http://www.codeproject.com/Articles/19689/Working-with-Active-Directory-in-VB-NET"]http://www.codeproject.com/Articles/19689/Working-with-Active-Directory-in-VB-NET[/URL]


Sólo una cosa más, al agregar la referencia por defecto vas a usar la interfaz y el protocolo, por lo menos en el tiempo de desarrollo, pero es importante que lo conozcas porque al implementar puede que se generen excepciones de seguridad, comunicación o compatibilidad y te puedes enredar intentando solucionarlo, precisamente es hay cuando saber LDAP y ADSI te puede salvar la vida...

Saludos
  #3 (permalink)  
Antiguo 07/01/2013, 05:51
 
Fecha de Ingreso: abril-2012
Mensajes: 449
Antigüedad: 12 años
Puntos: 7
Respuesta: Obtener desde directorio activo nombre y apellido de empleado e email

Hola;

He estado mirando lo que me comentas pero no entiendo muy bien como va.
Yo tengo una pagina Login.aspx con el siguiente contenido:
Código vb.net:
Ver original
  1. <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
  2.     <h2>
  3.         Iniciar sesión
  4.     </h2>
  5.     <p>
  6.         Especifique su nombre de usuario y contraseña.
  7.     </p>
  8.            
  9.     <p>
  10.         <asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">Nombre de usuario:</asp:Label>
  11.         &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  12.         <asp:TextBox ID="UserName" runat="server" CssClass="textEntry"></asp:TextBox>
  13.     </p>
  14.     <p>
  15.         <asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">Contraseña:</asp:Label>
  16.         &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  17.         <asp:TextBox ID="Password" runat="server" CssClass="passwordEntry" TextMode="Password"></asp:TextBox>
  18.     </p>
  19.     <p>
  20.         <asp:Label ID="errorLabel" runat="server" AssociatedControlID="UserName">Nombre de usuario:</asp:Label>
  21.     </p>
  22.     <p>
  23.         <asp:Button ID="LoginButton" runat="server" CommandName="Login"
  24.                 Text="Iniciar sesión"/>
  25.     </p>
  26. </asp:Content>

Lo que quiero es que cuando le de a LoginButton me compruebe si los datos de acceso corresponden con usuario y contraseña del directorio activo y si coinciden que me redirija a una pagina y hay me introduzca el nombre-apellido y el email.

Lo que no se es como indicarle que cuando haga LoginButton_Click se conecte al directorio activo que necesite.

con el ejemplo que me has mandado no sabria muy bien como hacerlo
__________________
Gracias por todo;

Un saludo
  #4 (permalink)  
Antiguo 07/01/2013, 09:35
 
Fecha de Ingreso: abril-2012
Mensajes: 449
Antigüedad: 12 años
Puntos: 7
Respuesta: Obtener desde directorio activo nombre y apellido de empleado e email

Hola;

He conseguido que medio funcione, pero necesito que en la funcion 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
  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 Login
  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.         'RegisterHyperLink.NavigateUrl = "Register.aspx?ReturnUrl=" + HttpUtility.UrlEncode(Request.QueryString("ReturnUrl"))
  14.     End Sub
  15.  
  16.     'Public _Path As String = "LDAP://192.168.1.108/DC=indar,DC=local"
  17.  
  18.     Protected Sub LoginButton_Click(sender As Object, e As EventArgs) Handles LoginButton.Click
  19.         Dim usuario As String
  20.         Dim pass As String
  21.         Dim valido As Boolean
  22.         Dim nombre As String
  23.  
  24.         usuario = Me.UserName.Text
  25.         pass = Me.Password.Text
  26.  
  27.         If usuario = "" Or pass = "" Then
  28.  
  29.             errorLabel.Text = "*Introduzca los datos de acceso necesarios"
  30.         Else
  31.             GetDirectoryEntry(usuario, pass)
  32.             valido = IsValidADLogin(usuario, pass)
  33.  
  34.             If valido Then
  35.  
  36.                 [B]ValidateUser[/B](usuario, pass)
  37.                 nombre = FullName(usuario, pass)
  38.             Else
  39.                 Me.UserName.Text = ""
  40.                 Me.Password.Text = ""
  41.                 errorLabel.Text = "*Datos incorrectos. Vuelva a introducir los datos de acceso."
  42.             End If
  43.         End If
  44.     End Sub
  45.  
  46.     Public Shared Function GetDirectoryEntry(ByVal usuario As String, ByVal pass As String) As DirectoryEntry
  47.         'Of course change the information for the LDAP to your network
  48.         Dim dirEntry As New DirectoryEntry
  49.  
  50.         dirEntry.Path = ("LDAP://192.168.1.108/DC=indar,DC=local")
  51.         dirEntry.AuthenticationType = AuthenticationTypes.Secure
  52.         dirEntry.Username = usuario
  53.         dirEntry.Password = pass
  54.  
  55.         Return dirEntry
  56.     End Function
  57.  
  58.     Public Shared Function ExtractUserName(ByVal path As String) As String
  59.         'Split on the "\"
  60.         Dim userPath As String() = path.Split(New Char() {"\"c})
  61.  
  62.         'Return the rest (username part)
  63.         Return userPath((userPath.Length - 1))
  64.     End Function
  65.  
  66.     Public Function IsValidADLogin(ByVal user As String, ByVal pass As String) As Boolean
  67.  
  68.         Try
  69.             'Create a DirectorySearcher Object (used for searching the AD)
  70.             Dim search As New DirectorySearcher()
  71.  
  72.             'Set the filter on the searcher object to look for the SAMAccountName, givenName and the sn (Sur Name)
  73.             search.Filter = "(sAMAccountName=" + user + ")"
  74.  
  75.             'Use the .FindOne() Method to stop as soon as a match is found
  76.             Dim result As SearchResult = search.FindOne()
  77.  
  78.             'Now check to see if a result was found
  79.             If result Is Nothing Then
  80.  
  81.                 'Login isn't valid
  82.                 Return False
  83.             Else
  84.  
  85.                 'Valid login
  86.                 Return True
  87.             End If
  88.         Catch ex As Exception
  89.             MsgBox("Active Directory Error" & Chr(13) & Chr(13) & ex.Message)
  90.         End Try
  91.     End Function
  92.  
  93.     Public Function [B]ValidateUser[/B](ByVal user As String, ByVal pass As String) As Boolean
  94.         Dim adsEntry As New DirectoryEntry("LDAP://192.168.1.108/DC=indar,DC=local", user, pass)
  95.         Dim adsSearcher As New DirectorySearcher(adsEntry)
  96.  
  97.         [COLOR="Red"]adsSearcher.Filter = "sAMAccountName=" + user + ")"[/COLOR]
  98.         Dim bSucceded As Boolean = False
  99.  
  100.         Try
  101.             Dim adsSearchResult As SearchResult
  102.  
  103.             adsSearchResult = adsSearcher.FindOne()
  104.             bSucceded = True
  105.             adsEntry.Close()
  106.         Catch ex As Exception
  107.  
  108.             Dim strError As String = ex.Message
  109.             adsEntry.Close()
  110.         End Try
  111.         Return bSucceded
  112.     End Function
  113.  
  114.     Public Function FullName(ByVal user As String, ByVal pass As String) As String
  115.         Dim adsEntry As New DirectoryEntry("LDAP://192.168.1.108/DC=indar,DC=local", user, pass)
  116.         Dim deSearch As New DirectorySearcher(adsEntry)
  117.         Dim properties() As String = {"fullname"}
  118.         'string[] properties = new string[] { "fullname" };
  119.         deSearch.SearchScope = SearchScope.Subtree
  120.         deSearch.ReferralChasing = ReferralChasingOption.All
  121.         deSearch.PropertiesToLoad.AddRange(properties)
  122.         deSearch.Filter = "sAMAccountName=" + user + ")"
  123.  
  124.         Dim result As SearchResult
  125.         result = deSearch.FindOne()
  126.         Dim directoryEntry As New DirectoryEntry
  127.         directoryEntry = result.GetDirectoryEntry()
  128.         Dim displayname As String
  129.         displayname = directoryEntry.Properties("displayname")(0).ToString()
  130.         Return displayname
  131.     End Function
  132. End Class
__________________
Gracias por todo;

Un saludo
  #5 (permalink)  
Antiguo 14/01/2013, 02:52
 
Fecha de Ingreso: abril-2012
Mensajes: 449
Antigüedad: 12 años
Puntos: 7
Exclamación Respuesta: Obtener desde directorio activo nombre y apellido de empleado e email

YA he conseguido que me muestra el nombre y apellido de la persona que se conecte pero necesito obtener el email de esta. ¿Tenéis alguna idea de como hacerlo?
Os dejo el código para conseguir el nombre de la persona y el apellido.
Código vb.net:
Ver original
  1. Public Function FullName(ByVal user As String, ByVal pass As String) As String
  2.         Dim adsEntry As New DirectoryEntry("LDAP://servername/DC=servername,DC=com", user, pass)
  3.         Dim deSearch As New DirectorySearcher(adsEntry)
  4.         Dim properties() As String = {"fullname"}
  5.         deSearch.SearchScope = SearchScope.Subtree
  6.         deSearch.ReferralChasing = ReferralChasingOption.All
  7.         deSearch.PropertiesToLoad.AddRange(properties)
  8.         deSearch.Filter = "(sAMAccountName=" + user + ")"
  9.  
  10.         Dim result As SearchResult
  11.         result = deSearch.FindOne()
  12.         Dim directoryEntry As New DirectoryEntry
  13.         directoryEntry = result.GetDirectoryEntry()
  14.         Dim displayname As String
  15.         displayname = directoryEntry.Properties("displayname")(0).ToString()
  16.         Return displayname
  17.     End Function
__________________
Gracias por todo;

Un saludo

Etiquetas: activo, directorio, email, nombre, vb
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:24.