c# active directory authentication
¿Cómo puedo obtener el nombre del grupo local para invitados/administradores? (5)
Buscar la cuenta por SID es la mejor manera de hacerlo. Es un poco artificial, pero la forma en que funciona es esta:
El SID de la cuenta de administrador siempre comienza con
S-1-5-21
y termina con-500
. Todo lo demás en el medio es aleatorio (el SID del dominio).El SID de la cuenta de invitado siempre comienza con
S-1-5-21
y termina con-501
.
El artículo de Microsoft KB que describe esto está disponible aquí .
Para encontrar estas cuentas, debe enumerar todas las cuentas en la máquina local y buscar con qué SID comienzan y terminar con esos números. Una vez que coinciden, tienes las cuentas integradas. No es la mejor manera de hacerlo, pero funciona.
También hay una configuración de directiva de grupo en Configuración de seguridad / Directivas locales / Opciones de seguridad denominadas Cuentas: cambiar el nombre de la cuenta de administrador y Cuentas: cambiar el nombre de la cuenta de invitado . No pude encontrar en qué parte del registro se almacenan estas configuraciones, pero si puede encontrarlas y buscarlas, lo más probable es que pueda obtener los nombres "oficiales" de estas dos cuentas.
Pregunta:
Uso el código que se encuentra en http://support.microsoft.com/kb/306273
para agregar un usuario de Windows. El problema es que necesito agregar el usuario a un grupo, pero los nombres de grupo están localizados.
Por ejemplo, el ejemplo de MS utiliza una computadora inglesa, lo que significa que puede obtener el grupo de invitados de esta manera: grp = AD.Children.Find ("Invitados", "grupo")
Pero en una computadora que no es inglesa, el nombre de grupo "Invitado" está localizado, lo que significa, por ejemplo, en mi SO de idioma alemán, el nombre de grupo para Invitados es "Gäste".
Lo que significa que para que el ejemplo de soporte se ejecute en mi computadora, necesito cambiar esa línea a grp = AD.Children.Find ("Gäste", "group")
entonces funciona
Ahora, si el sistema operativo es cualquier otro idioma, ¿cómo puedo encontrar el nombre para el usuario invitado? ¿O cómo puedo obtener el nombre de usuario invitado de un sid?
Nota: .NET 2.0, no 3.0 o 3.5
Debería poder utilizar las clases WindowsIdentity y WindowsPrincipal:
Dim currentIdentity as WindowsIdentity = WindowsIdentity.GetCurrent()
Dim currentPrincipal as WindowsPrincipal = New WindowsPrincipal(currentIdentity)
If currentPrincipal.IsInRole(WindowsBuiltInRole.Guest) Then
Foobar()
End If
No importa, veo que en realidad intentas AGREGAR un usuario al grupo.
Esta página tiene un código para obtener detalles del usuario y verificarlos.
Este código:
public IdentityReferenceCollection GetUserGroups()
{
System.Security.Principal.WindowsIdentity currentUser =
System.Security.Principal.WindowsIdentity.GetCurrent();
return currentUser.Groups;
}
devuelve los grupos de usuarios actuales.
Puede encontrar más detalles sobre la clase WindowsIdentity
en su totalidad aquí , con la propiedad de Groups
aquí .
Puede usar este código, el valor devuelto es correcto para sistemas no ingleses:
var guestsGroup = new SecurityIdentifier(WellKnownSidType.BuiltinGuestsSid, null).Translate(typeof(NTAccount)).Value;
Como ha señalado, los nombres de los grupos están localizados según el idioma del sistema.
Para grupos ''conocidos'' como ''Administradores'' e ''Invitados'', deberías recuperarlos basados en el SID. El SID para Invitados es:
S-1-5-32-546
Hay una lista de SID bien conocidos aquí:
http://support.microsoft.com/kb/243330
El código para obtener el nombre del grupo del SID se puede encontrar aquí