Estoy usando Active Directory para autenticar usuarios de un sitio de intranet. Me gustaría refinar los usuarios que están autenticados según el grupo en el que se encuentran en Active Directory. ¿Puede alguien mostrarme o indicarme las instrucciones sobre cómo encontrar los grupos en los que está un usuario en ASP.NET 4.0 (VB)?Buscar si el usuario es miembro de Active Directory Group ASP.NET VB?
Respuesta
He encontrado este here.
''' <summary>
''' Function to return all the groups the user is a member od
''' </summary>
''' <param name="_path">Path to bind to the AD</param>
''' <param name="username">Username of the user</param>
''' <param name="password">password of the user</param>
Private Function GetGroups(ByVal _path As String, ByVal username As String, _
ByVal password As String) As Collection
Dim Groups As New Collection
Dim dirEntry As New _
System.DirectoryServices.DirectoryEntry(_path, username, password)
Dim dirSearcher As New DirectorySearcher(dirEntry)
dirSearcher.Filter = String.Format("(sAMAccountName={0}))", username)
dirSearcher.PropertiesToLoad.Add("memberOf")
Dim propCount As Integer
Try
Dim dirSearchResults As SearchResult = dirSearcher.FindOne()
propCount = dirSearchResults.Properties("memberOf").Count
Dim dn As String
Dim equalsIndex As String
Dim commaIndex As String
For i As Integer = 0 To propCount - 1
dn = dirSearchResults.Properties("memberOf")(i)
equalsIndex = dn.IndexOf("=", 1)
commaIndex = dn.IndexOf(",", 1)
If equalsIndex = -1 Then
Return Nothing
End If
If Not Groups.Contains(dn.Substring((equalsIndex + 1), _
(commaIndex - equalsIndex) - 1)) Then
Groups.Add(dn.Substring((equalsIndex + 1), & _
(commaIndex - equalsIndex) - 1))
End If
Next
Catch ex As Exception
If ex.GetType Is GetType(System.NullReferenceException) Then
MessageBox.Show("Selected user isn't a member of any groups " & _
"at this time.", "No groups listed", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
'they are still a good user just does not
'have a "memberOf" attribute so it errors out.
'code to do something else here if you want
Else
MessageBox.Show(ex.Message.ToString, "Search Error", & _
MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
End Try
Return Groups
End Function
End Class
Para aquellos que puedan estar interesados, esto es como terminé de codificación que:
Dim ID As FormsIdentity = DirectCast(User.Identity, FormsIdentity)
Dim ticket As FormsAuthenticationTicket = ID.Ticket
Dim adTicketID As String = ticket.Name
Dim adSearch As New DirectorySearcher
adSearch.Filter = ("(userPrincipalName=" & adTicketID & ")")
Dim adResults = adSearch.FindOne.Path
Dim adResultsDirectory As New DirectoryEntry(adResults)
Dim found As Boolean = False
For Each entry In adResultsDirectory.Properties("memberOf")
Response.Write(entry)
Response.Write("<br/>")
If entry = "CN=GroupName,CN=UserGroup,DC=my,DC=domain,DC=com" Then
found = True
End If
Next
If Not (found) Then
Response.Redirect("login.aspx")
End If
Soy consciente de que este post es bastante viejo, pero pensé que podría actualizarlo con los procesos que estoy usando. (ASP.Net 4.0, VB)
Si usa la seguridad integrada de Windows, en un dominio.
Page.User.IsInRole("domain\GroupName")
comprobará si el usuario autenticado es miembro del grupo especificado.
Si desea comprobar la membresía de otro grupo de usuarios que no sea el usuario autenticado.
dos etapas para la comprobación de varios grupos con el mismo principal de usuario:
Dim MyPrincipal As New System.Security.Principal.WindowsPrincipal _
(New System.Security.Principal.WindowsIdentity("UserID"))
Dim blnValid1 As Boolean = MyPrincipal.IsInRole("domain\GroupName")
de etapa única para el check un solo grupo:
Dim blnValid2 As Boolean = New System.Security.Principal.WindowsPrincipal _
(New System.Security.Principal.WindowsIdentity("userID")).IsInRole("domain\GroupName")
NOTA :: El método IsInRole funciona con grupos anidados. Si tiene un grupo de nivel superior con un subgrupo que es miembro, y el usuario es miembro del subgrupo.
creo que tengo la función última de conseguir todos los grupos de AD de un usuario incluyen grupos anidados sin recursión explícita:
importaciones System.Security.Principal
Private Function GetGroups(userName As String) As List(Of String)
Dim result As New List(Of String)
Dim wi As WindowsIdentity = New WindowsIdentity(userName)
For Each group As IdentityReference In wi.Groups
Try
result.Add(group.Translate(GetType(NTAccount)).ToString())
Catch ex As Exception
End Try
Next
result.Sort()
Return result
End Function
Entonces sólo tiene que utilizar GetGroups ("ID de usuario "). Debido a que este enfoque usa el SID del usuario, no se realiza una llamada LDAP explícita. Si usa su propio nombre de usuario, usará las credenciales almacenadas en caché, por lo que esta función es muy rápida.
Try Catch es necesario porque en grandes empresas el AD es tan grande que algunos SID se pierden en el espacio.
Para sólo comprobar si un usuario es miembro de un grupo que incluye subgrupos sólo tiene que utilizar:
Public Function IsInGroup(ByVal objectName As String, groupName As String) As Boolean
Try
return New WindowsPrincipal(New WindowsIdentity(objectName)).IsInRole(groupName))
Catch ex As Exception
End Try
Return False
End Function
- 1. Active Directory: buscar solo objetos de usuario
- 2. Ver si el usuario es parte del grupo de Active Directory en C# + Asp.net
- 3. .NET: ¿Cómo buscar un usuario en Active Directory?
- 4. Buscar membresía de grupo recursivo (Active Directory) con C#
- 5. Permisos de usuario/grupo en Active Directory
- 6. javascript active directory usuario/grupos consulta
- 7. Obteniendo grupos de usuarios en Active Directory
- 8. C# Active Directory: ¿Obtener el nombre de dominio del usuario?
- 9. Active Directory: Recuperar información del usuario
- 10. Grupos anidados de Active Directory
- 11. ¿Puede un usuario ser miembro de múltiples Unidades de organización (OU) en Active Directory?
- 12. Autenticación de Active Directory
- 13. ¿Cómo obtener los grupos de un usuario en Active Directory? (C#, asp.net)
- 14. Buscar un nombre de usuario de dominio de Active Directory del llamante del servicio WCF
- 15. Buscar Active Directory para nombre (s) de equipo usando entrada de usuario
- 16. C# - Buscar todas las direcciones de correo electrónico para un usuario de Active Directory
- 17. Encontrar un usuario en Active Directory con el nombre de usuario
- 18. Ruta de LDAP Active Directory
- 19. ldap nodejs active directory authentication
- 20. Gerrit y Active Directory
- 21. Active Directory vs OpenLDAP
- 22. Windows Active Directory Emulator
- 23. Membresías de grupos de usuarios de Active Directory GroupPrincipal
- 24. Crear usuario de Active Directory con contraseña en C#
- 25. Crear usuario de Active Directory en .NET (C#)
- 26. C# comprobar si el usuario miembro de un grupo?
- 27. Conexión de flex/php a Active Directory
- 28. Active Directory Lista de OU
- 29. Detectar si una cuenta de usuario de Active Directory está bloqueada mediante LDAP en Python
- 30. Cómo exportar-CSV de objetos de Active Directory?