none
Mostrar nombre completo de active directory RRS feed

  • Pregunta

  • Buenas.

    Ahora mismo, en mi proyecto se muestra el "dominio/usuario" y quisiera que se muestre el nombre y apellidos, almenos el nombre. 

    He intentado varias cosas pero sin resultado ninguno, que deberia editar/añadir en el sitemaster?

    <p class="nav navbar-text navbar-right">Bienvenido, <asp:LoginName runat="server" FormatString="{0}" ID="NombreUsuario" />!</p>

    Estoy programando en VB.NET y utilizo IIS 7 y .NET Framework 4.5.

    Gracias, un saludo.



    lunes, 23 de marzo de 2015 8:01

Respuestas

  • Por defecto ese control LoginName muestra el Page.User.Identity.Name

     Te propongo en vez de ese control, "pintes" un Label y haz lo siguiente.

    1.- Agrega a tu proyecto una referencia a System.DirectoryServices 

    2.- Cambia el Identity impersonate="true" en el Web.config 

    3.- En el Page_Load de tu página hacer 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    	Dim DomainUser As String = System.Security.Principal.WindowsIdentity.GetCurrent.Name.Replace("\", "/")
    
    	Dim ADEntry As New System.DirectoryServices.DirectoryEntry("WinNT://" & DomainUser)
    	Dim FullName As String = ADEntry.Properties("FullName").Value
    	Label1.Text = "Bienvenido, " & FullName.ToString()
    
    End Sub

    Siendo Label1 la etiqueta que sustituye el asp:LoginName



    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    • Marcado como respuesta Javi Chaqués lunes, 23 de marzo de 2015 15:47
    lunes, 23 de marzo de 2015 14:06
    Moderador
  • El impersonate en web.config seria

    <system.web>
    
            <authentication mode="Windows"/>
                <identity impersonate="true" />
              
    </system.web>


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos


    lunes, 23 de marzo de 2015 15:38
    Moderador

Todas las respuestas

  • Hola Javi,

    ¿podrías postear el código que utilizas para mostrar la información actualmente?

    lunes, 23 de marzo de 2015 8:04
  • Hola Javi,

    ¿podrías postear el código que utilizas para mostrar la información actualmente?

    He añadido el código al post principal.
    lunes, 23 de marzo de 2015 8:57
  • Por defecto ese control LoginName muestra el Page.User.Identity.Name

     Te propongo en vez de ese control, "pintes" un Label y haz lo siguiente.

    1.- Agrega a tu proyecto una referencia a System.DirectoryServices 

    2.- Cambia el Identity impersonate="true" en el Web.config 

    3.- En el Page_Load de tu página hacer 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    	Dim DomainUser As String = System.Security.Principal.WindowsIdentity.GetCurrent.Name.Replace("\", "/")
    
    	Dim ADEntry As New System.DirectoryServices.DirectoryEntry("WinNT://" & DomainUser)
    	Dim FullName As String = ADEntry.Properties("FullName").Value
    	Label1.Text = "Bienvenido, " & FullName.ToString()
    
    End Sub

    Siendo Label1 la etiqueta que sustituye el asp:LoginName



    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    • Marcado como respuesta Javi Chaqués lunes, 23 de marzo de 2015 15:47
    lunes, 23 de marzo de 2015 14:06
    Moderador
  • O puedes usar el siguiente código 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    	Dim domainUser As String = System.Security.Principal.WindowsIdentity.GetCurrent.Name
    	Dim fullName As String
    	
    	Using ctx As PrincipalContext = New PrincipalContext(ContextType.Domain)
    
    	  Using user As UserPrincipal = UserPrincipal.FindByIdentity(ctx, domainUser)
    
    		  If (user IsNot Nothing) Then
    			   fullName =  user.DisplayName
    		  Else
    			   fullName = String.Empty
    		  End If
    	  End using
    	End Using
    	
    	Label1.Text = fullName 
    End Sub


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos


    lunes, 23 de marzo de 2015 14:24
    Moderador
  • Me da el siguiente error, creo que el fallo esta en el DomainUser, ya que me setea esta String: "WinNT://IIS APPPOOL/DefaultAppPool". 

    Tampoco he encontrado en el Web.config "impersonate="true" para poder cambiarlo.

    El segundo codigo me devuelve la string vacia.

    Gracias.

    No se ha encontrado la ruta de acceso de la red.

    Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código.

    Detalles de la excepción: System.Runtime.InteropServices.COMException: No se ha encontrado la ruta de acceso de la red.


    Error de código fuente:

    Línea 5:          Dim DomainUser As String = System.Security.Principal.WindowsIdentity.GetCurrent.Name.Replace("\", "/")
    Línea 6:          Dim ADEntry As New System.DirectoryServices.DirectoryEntry("WinNT://" & DomainUser)
    Línea 7:          Dim FullName As String = ADEntry.Properties("fullName").Value.ToString
    Línea 8:  
    Línea 9:          'NombreUsuario.FormatString = fullName.ToString()



    lunes, 23 de marzo de 2015 15:14
  •  Dim FullName As String = ADEntry.Properties("FullName").Value.ToString

    Fijate que he puesto FullName en vez de fullName. De todas formas te recomiendo uses el segundo código que puse.


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos


    lunes, 23 de marzo de 2015 15:35
    Moderador
  • El impersonate en web.config seria

    <system.web>
    
            <authentication mode="Windows"/>
                <identity impersonate="true" />
              
    </system.web>


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos


    lunes, 23 de marzo de 2015 15:38
    Moderador
  • He probado ambos códigos en una aplicación de consola y funcionan correctamente.



    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    lunes, 23 de marzo de 2015 15:40
    Moderador
  • He añadido "<identity impersonate="true" />" y me funciona sin problemas.

    Muchas gracias!

    lunes, 23 de marzo de 2015 15:48