Tengo el SID del usuario como byte [] dentro de windowsPrincipal.getIdentity(). GetSid(). ¿Cómo puedo obtener una entrada de directorio activo (DirectoryEntry) desde el SID?Dado el SID de un usuario, ¿cómo puedo obtener AD DirectoryEntry?
5
A
Respuesta
4
me encontré con este ejemplo en C#
// SID must be in Security Descriptor Description Language (SDDL) format
// The PrincipalSearcher can help you here too (result.Sid.ToString())
public void FindByIdentitySid()
{
UserPrincipal user = UserPrincipal.FindByIdentity(
adPrincipalContext,
IdentityType.Sid,
"S-1-5-21-2422933499-3002364838-2613214872-12917");
Console.WriteLine(user.DistinguishedName);
}
convertidas en VB.NET:
' SID must be in Security Descriptor Description Language (SDDL) format
' The PrincipalSearcher can help you here too (result.Sid.ToString())
Public Sub FindByIdentitySid()
Dim user As UserPrincipal = UserPrincipal.FindByIdentity(adPrincipalContext, IdentityType.Sid, "S-1-5-21-2422933499-3002364838-2613214872-12917")
Console.WriteLine(user.DistinguishedName)
End Sub
Obviamente se puede a continuación:
dim de as new DirectoryEntry("LDAP://" & user.DistinguishedName)
obtener el SID = S-1 -5-21- * (lo siento VB.NET)
' Convert ObjectSID to a String
' http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/57452aab-4b68-4444-aefa-136b387dd06e
Dim ADpropSid As Byte()
ADpropSid = de.Properties("objectSid").Item(0)
' in my test the byte field looks like this : 01 02 00 00 00 00.......37 02 00 00
Dim SID As New System.Security.Principal.SecurityIdentifier(ADpropSid, 0)
No he probado el C# ni he usado la versión convertida, pero he utilizado lo anterior para devolver el SID en formato SDDL.
0
Esto también se puede hacer de PowerShell, siempre y cuando usted tiene .Net 3.5 o 4.0 disponible (ver https://gist.github.com/882528 si no lo hace por defecto)
add-type -assemblyname system.directoryservices.accountmanagement
$adPrincipalContext =
New-Object System.DirectoryServices.AccountManagement.PrincipalContext(
[System.DirectoryServices.AccountManagement.ContextType]::Domain)
$user = [system.directoryservices.accountmanagement.userprincipal]::findbyidentity(
$adPrincipalContext
, [System.DirectoryServices.AccountManagement.IdentityType]::Sid
, "S-1-5-21-2422933499-3002364838-2613214872-12917")
$user.DisplayName
$user.DistinguishedName
0
La manera más fácil que he encontrado es el uso Enlace LDAP. Similar a lo que dijo Nick Giles. Más información en MSDN
''' <summary>
''' Gets the DirectoryEntry identified by this SecurityIdentifier.
''' </summary>
''' <param name="id">The SecurityIdentifier (SID).</param>
<System.Runtime.CompilerServices.Extension()> _
Public Function GetDirectoryEntry(ByVal id As SecurityIdentifier) As DirectoryEntry
Const sidBindingFormat As String = "LDAP://AOT/<SID={0}>"
Return New DirectoryEntry(String.Format(sidBindingFormat, id.Value))
End Function
6
Utilice la clase SecurityIdentifier para convertir el SID del byte [] formato de cadena y luego unirse directamente al objeto:
DirectoryEntry OpenEntry(byte[] sidAsBytes)
{
var sid = new SecurityIdentifier(sidAsBytes, 0);
return new DirectoryEntry(string.Format("LDAP://<SID={0}>", sid.ToString()));
}
Cuestiones relacionadas
- 1. Dado el SID de un usuario, ¿cómo obtengo su userPrincipalName?
- 2. ¿Cómo puedo obtener DOMAIN \ USER desde AD DirectoryEntry?
- 3. ASP.NET - Obtener el identificador principal/relativo (RID) para un DirectoryEntry/SID
- 4. ¿Cómo obtener todos los grupos de AD para un usuario en particular?
- 5. ¿Cómo puedo verificar si existe un nombre de usuario dado?
- 6. Autenticación de usuario AD
- 7. Cómo obtener un nombre de usuario y SID para el usuario por un nombre de dominio en ldap
- 8. Cómo obtener el SID de inicio de sesión en C#
- 9. Cómo convertir SID a String en .net
- 10. C# Active Directory: ¿Obtener el nombre de dominio del usuario?
- 11. ¿Cómo puedo convertir desde un SID a un nombre de cuenta en C#
- 12. ¿Cómo puedo obtener el SID de la cuenta actual de Windows?
- 13. Cómo obtener la lista de SID de Oracle
- 14. Personificación y DirectoryEntry
- 15. Cómo obtener el carácter para un valor de ascii dado
- 16. ¿Cuál es la mejor manera de obtener el SID del usuario actual?
- 17. Tengo un SID de una cuenta de usuario y quiero los SID de los grupos a los que pertenece
- 18. ¿Cómo puedo determinar el canal SATA para un disco dado?
- 19. ¿Cómo obtener UIView dado un CGPoint?
- 20. Adquiriendo la lista AD OU
- 21. ¿Se puede obtener un nombre de usuario de Windows (AD) en PHP?
- 22. ¿Cómo obtener un inflador de diseño dado un contexto?
- 23. ¿Cómo obtener el tamaño del archivo dado un camino?
- 24. Dado el nombre de una propiedad, ¿cómo puedo crear un delegado para obtener su valor?
- 25. Dado un WPF DependencyObject con estilo, ¿cómo puedo obtener la clave de estilo en el código?
- 26. Cómo puedo encontrar un usuario con el parámetro GUID (objectGUID) en Active Directory
- 27. cómo puedo obtener el padre del control de usuario wpf
- 28. ¿Cómo puedo obtener el usuario que eliminó el archivo?
- 29. ¿Cómo puedo obtener el directorio de usuario actual?
- 30. ¿Cómo puedo obtener el usuario actual en Liferay?