martes, 7 de julio de 2009

Crear un usuario en el Active Directory desde aspnet

Antes de Crear la cuenta necesito hacer una enum que nos servira mas adelante, esto si lo ponen en la pagina hay que ponerlo despues del

public partial class Nuevo : System.Web.UI.Page
{
(la linea de arriba solo es ejemplo donde debe poner el enum)

aquí esta el codigo del enum:
[Flags]
public enum AdsUserFlags
{
Script = 1, // 0x1
AccountDisabled = 2, // 0x2
HomeDirectoryRequired = 8, // 0x8
AccountLockedOut = 16, // 0x10
PasswordNotRequired = 32, // 0x20
PasswordCannotChange = 64, // 0x40
EncryptedTextPasswordAllowed = 128, // 0x80
TempDuplicateAccount = 256, // 0x100
NormalAccount = 512, // 0x200
InterDomainTrustAccount = 2048, // 0x800
WorkstationTrustAccount = 4096, // 0x1000
ServerTrustAccount = 8192, // 0x2000
PasswordDoesNotExpire = 65536, // 0x10000
MnsLogonAccount = 131072, // 0x20000
SmartCardRequired = 262144, // 0x40000
TrustedForDelegation = 524288, // 0x80000
AccountNotDelegated = 1048576, // 0x100000
UseDesKeyOnly = 2097152, // 0x200000
DontRequirePreauth = 4194304, // 0x400000
PasswordExpired = 8388608, // 0x800000
TrustedToAuthenticateForDelegation = 16777216, // 0x1000000
NoAuthDataRequired = 33554432, // 0x2000000
Habilitarcuenta = 512 // 0x2000000
}

Otra cosa hay que crear una OU(unidad organizacional) llamada usuarios, ya que aquí estaran nuestros usuarios.

Aquí esta el código de ingreso de usuario:

DirectoryEntry parent = new DirectoryEntry(
"LDAP://OU=usuarios,DC=test,DC=corp",
null,
null,
AuthenticationTypes.Secure
);

DirectoryEntry user =
parent.Children.Add("CN=test.user", "user");

using (user)
{
user.Properties["sAMAccountName"].Value = "test.user";
user.Properties["userPrincipalName"].Value = "test.user";
user.Properties["displayName"].Value = "nombre completo";
user.Properties["givenName"].Value = "Nombre";
user.Properties["sn"].Value = "apellidos";
user.Properties["description"].Value = "usuario creado automaticamente";
user.CommitChanges();
}

Esta cuenta no esta lista para usarla ya que hay que colocarle un password:

DirectoryEntry ent = new DirectoryEntry("LDAP://CN=test.user,OU=usuarios,DC=test,DC=corp");

ent.Properties["pwdLastSet"].Value = 0;
ent.Invoke("SetPassword", new object[] { "3l!teP@$$w0RDz" });

y aun no esta lista para usarla ya que falta habilitar la cuenta.

DirectoryEntry entry = new DirectoryEntry("LDAP://CN=test.user,OU=usuarios,DC=test,DC=corp");

AdsUserFlags newValue = AdsUserFlags.NormalAccount
| AdsUserFlags.PasswordDoesNotExpire
| AdsUserFlags.Habilitarcuenta;


entry.Properties["userAccountControl"].Value = newValue;
entry.CommitChanges();

Con esto ya tendran listo su Usuario de Active directory.

Recomendaciones & Tips.

Corran esto en el servidor no es su pc ya que si no estan pegados al dominio pueden tener problemas.

Colocar el identity si van usar anonimos:


Por ultimo si da un error que el objeto no es existe es por que estan buscando el usuario en la OU equivocada.

Espero les sirva.

No hay comentarios.: