2012-05-24 42 views
6

Hay una nueva aplicación de creación de usuarios que acabamos de proporcionar a nuestros usuarios. Sin embargo, estos usuarios necesitan la capacidad de crear usuarios a través de la aplicación aunque ellos mismos no tengan permiso para crear usuarios.C# acceder al directorio activo con credenciales de usuario diferentes

En C#, ¿cómo se hace pasar por otro usuario para tener esta funcionalidad? Esta aplicación primaria usa System.DirectoryServices.

Fragmento de código:

DirectoryEntry dEntry = new DirectoryEntry("LDAP://OU="); 
DirectorySearcher dSearcher = new DirectorySearcher(dEntry); 
//filter just user objects 
dSearcher.SearchScope = SearchScope.Subtree; 
dSearcher.Filter = "(&(objectClass=user)(mail=" + excel_Holding_Table.Rows[i]["EmailAddress"].ToString() + "))"; 
dSearcher.PageSize = 1000; 
sResults = dSearcher.FindAll(); 
+0

Ejecuta el proceso/servicio como administrador? Sé cómo hacerlo manualmente, pero no sé cómo funcionaría en .NET de forma automática. – JAB

Respuesta

9

Usted puede utilizar la clase DirectoryEntry directamente y especificar el nombre de usuario y contraseña:

DirectoryEntry de = new DirectoryEntry(path); 

de.Username = "username"; 
de.Password = "password"; 

Y el acceso de Active Directory desde el de objeto. O bien, puede utilizar la clase y WindowsIdentity y hacerse pasar por un usuario:

WindowsIdentity newId = new WindowsIdentity(safeTokenHandle.DangerousGetHandle()); 
WindowsImpersonationContext impersonatedUser = newId.Impersonate(); 

Un ejemplo de código completo está disponible en:

Impersonation and DirectoryEntry

0

Utilice el Constructor de entrada de directorio (cadena, cadena, cadena, tipos de autenticación) que toma un nombre de usuario y una contraseña en lugar de suplantación.

DirectoryEntry directoryEntry = new DirectoryEntry("IIS://" + serverName + "/W3SVC/1/Root", @"domain\username", "password", AuthenticationTypes.Secure | AuthenticationTypes.Sealing); 

Reference

0

Puede utilizar las credenciales privilegiadas para conectarse a AD o de hacerse pasar por un usuario privilegiado como otros han sugerido respuestas.

Pero esto tiene implicaciones de seguridad, ya que significa que sus usuarios podrían usar estas credenciales privilegiadas para otros fines no autorizados.

Una solución más segura sería crear un servicio web que se ejecute bajo una cuenta de servicio con permisos de AD apropiados. Los usuarios pueden autenticarse en el servicio web utilizando la autenticación de Windows, y el servicio web crearía usuarios en su nombre. Podría utilizar la autorización para restringir lo que los usuarios pueden hacer (por ejemplo, crear usuarios en su propio departamento).

Cuestiones relacionadas