Java y Active directory
Publicado por salva (62 intervenciones) el 04/10/2006 21:56:07
Hola a todos,
Hace ya un tiempo que estoy desconectado de este foro, espero que eso cambie por que me ha ayudado mucho.
Estoy desarrollando una aplicacion para un entorno corporativo en el cual existe un servidor de dominio con active directory.
Mi idea es que mi aplicacion compruebe si el usuario con el que se ejecuta la aplicacion en el cliente pertenece a un grupo de seguridad concreto, hasta ahora tengo esta clase:
//INICIO DE LA CLASE
package ldap;
import java.util.Hashtable;
import javax.naming.*;
import javax.naming.ldap.*;
import javax.naming.directory.*;
class FastBindConnectionControl implements Control {
public byte[] getEncodedValue() {
return null;
}
public String getID() {
return "1.2.840.113556.1.4.1781";
}
public boolean isCritical() {
return true;
}
}
public class ldapbind {
public Hashtable env = null;
public LdapContext ctx = null;
public Control[] connCtls = null;
public ldapbind(String ldapurl) {
env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.SECURITY_AUTHENTICATION,"simple");
env.put(Context.PROVIDER_URL,ldapurl);
connCtls = new Control[] {new FastBindConnectionControl()};
try {
ctx = new InitialLdapContext(env,connCtls);
} catch (NamingException e) {
System.out.println("Naming exception " + e);
}
}
public boolean Authenticate(String username, String password) {
try {
ctx.addToEnvironment(Context.SECURITY_PRINCIPAL,username);
ctx.addToEnvironment(Context.SECURITY_CREDENTIALS,password);
ctx.reconnect(connCtls);
/*
while (answer.hasMore()) {
System.out.println(">>>" + ((SearchResult)answer.next()).getName());
}*/
System.out.println(username + " is authenticated");
return true;
}
catch (AuthenticationException e) {
e.printStackTrace();
System.out.println(username + " is not authenticated");
return false;
} catch (NamingException e) {
e.printStackTrace();
System.out.println(username + " is not authenticated");
return false;
}
}
public void finito() {
try {
ctx.close();
System.out.println("Context is closed");
} catch (NamingException e) {
System.out.println("Context close failure " + e);
}
}
}
// FIN DE LA CLASE
Con ella he conseguido comprobar si el usuario que le paso como parametro esta correctamente creado en el dominio, es decir, si es autenticable.
Mi intencion es consultar al servidor de dominio y obtener la lista de grupos de seguridad a los que pertenece el usuario para permitirle o no el acceso a mi aplicacion.
He estado buscando pero no he encontrado nada claro, agradeceria cualquier ayuda.
Tambien agradeceria cualquier documentacion de como actua Java con Active Directory
Gracias por la atencion
Hace ya un tiempo que estoy desconectado de este foro, espero que eso cambie por que me ha ayudado mucho.
Estoy desarrollando una aplicacion para un entorno corporativo en el cual existe un servidor de dominio con active directory.
Mi idea es que mi aplicacion compruebe si el usuario con el que se ejecuta la aplicacion en el cliente pertenece a un grupo de seguridad concreto, hasta ahora tengo esta clase:
//INICIO DE LA CLASE
package ldap;
import java.util.Hashtable;
import javax.naming.*;
import javax.naming.ldap.*;
import javax.naming.directory.*;
class FastBindConnectionControl implements Control {
public byte[] getEncodedValue() {
return null;
}
public String getID() {
return "1.2.840.113556.1.4.1781";
}
public boolean isCritical() {
return true;
}
}
public class ldapbind {
public Hashtable env = null;
public LdapContext ctx = null;
public Control[] connCtls = null;
public ldapbind(String ldapurl) {
env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.SECURITY_AUTHENTICATION,"simple");
env.put(Context.PROVIDER_URL,ldapurl);
connCtls = new Control[] {new FastBindConnectionControl()};
try {
ctx = new InitialLdapContext(env,connCtls);
} catch (NamingException e) {
System.out.println("Naming exception " + e);
}
}
public boolean Authenticate(String username, String password) {
try {
ctx.addToEnvironment(Context.SECURITY_PRINCIPAL,username);
ctx.addToEnvironment(Context.SECURITY_CREDENTIALS,password);
ctx.reconnect(connCtls);
/*
while (answer.hasMore()) {
System.out.println(">>>" + ((SearchResult)answer.next()).getName());
}*/
System.out.println(username + " is authenticated");
return true;
}
catch (AuthenticationException e) {
e.printStackTrace();
System.out.println(username + " is not authenticated");
return false;
} catch (NamingException e) {
e.printStackTrace();
System.out.println(username + " is not authenticated");
return false;
}
}
public void finito() {
try {
ctx.close();
System.out.println("Context is closed");
} catch (NamingException e) {
System.out.println("Context close failure " + e);
}
}
}
// FIN DE LA CLASE
Con ella he conseguido comprobar si el usuario que le paso como parametro esta correctamente creado en el dominio, es decir, si es autenticable.
Mi intencion es consultar al servidor de dominio y obtener la lista de grupos de seguridad a los que pertenece el usuario para permitirle o no el acceso a mi aplicacion.
He estado buscando pero no he encontrado nada claro, agradeceria cualquier ayuda.
Tambien agradeceria cualquier documentacion de como actua Java con Active Directory
Gracias por la atencion
Valora esta pregunta


0