簡體   English   中英

LDAP + Java Aplication身份驗證錯誤代碼49-52e

[英]LDAP + Java Aplication Authentication error code 49 - 52e

我的代碼有問題。 我想對一個應用程序進行身份驗證,但我遇到過同樣的問題。

我有ldap服務器的URL。 以及LDAP中用戶的用戶名和密碼。 現在,向我們展示我使用的類:

public final class ldapAuth {

    private String usuario;
    private String clave;
    private String servidor;
    private String dn;
    private String tipoAuth;
    private boolean autenticado;

    DirContext dc;

    /**
     * Constructor de la conexion con el Motor de LDAP
     *
     * @param server  Servidor en donde se encuentra el LDAP
     * @param dn      Directoria del arbol del LDAP
     * @param ta      Tipo de Autenticacion
     * @param usuario Usuario que desea realizar la conexion
     * @param clave   Clave del usuario
     *
     */
    public ldapAuth(String server, String dn, String ta,String usuario,String clave) {
        this.servidor = server;
        this.dn = dn;
        this.tipoAuth = ta;
        this.usuario=usuario;
        this.clave=clave;
        inicializarConexion();
    }

    public void inicializarConexion() {
        Hashtable env = new Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        env.put(Context.PROVIDER_URL, servidor);
        env.put(Context.SECURITY_AUTHENTICATION, tipoAuth);
        env.put(Context.SECURITY_PRINCIPAL, dn);
        env.put(Context.SECURITY_CREDENTIALS, clave);

        try {
            dc = new InitialDirContext(env);
            setAutenticado(true);
        } catch (NamingException ex) {
            System.out.println("Error Autenticando mediante LDAP, Error causado por : " + ex.toString());
            setAutenticado(false);
        }
    }

    /**
     * Retorna el Atributo de la conexion con LDAP actual
     * 
     * @param atributo Nombre del Atributo que se desea obtener
     * @return Attribute con la informacion correspondiente
     */

    public Attribute cargarPropiedadConexion(String atributo) {
        Attribute propiedad = null;

        try {
            Attributes attrs = dc.getAttributes(dn);

            if (attrs == null) {
                propiedad = null;
            } else {
                propiedad = attrs.get(atributo);
            }
        } catch (Exception e) {
            propiedad = null;
        }
        return propiedad;
    }


    /*Get's y Set's*/
    public boolean isAutenticado() {
        return autenticado;
    }
    public void setAutenticado(boolean autenticado) {
        this.autenticado = autenticado;
    }
    public String getUsuario() {
        return usuario;
    }
    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }
}

現在,向我們展示調用此功能的主要代碼:

import javax.naming.NamingException;
import javax.naming.directory.Attribute;


public class main {

    public static void main(String[] args) throws NamingException{
        System.out.println("Iniciando Autenticacion");

        String server="ldap://10.201.69.xxx"; // servidor de LDAP
        String usuario="CN =user, OU=Generic Users,OU=Ofimatica, OU=User Organizations, DC=mycompany, DC=vwg; // Usuario de Autenticacion
        String dn="ou=users,ou=ofimatica,ou=user organizations,dc=mycompany,dc=vwg"; // Ruta del Arbol LDAP
        String tipoAth="simple";//tipo de autentuicacion simple o por SSL
        String clave="mypassword";

        ldapAuth ldapAuth=new ldapAuth(server,dn,tipoAth,usuario,clave);

        if(ldapAuth.isAutenticado()){
            System.out.println("Usuario "+ldapAuth.getUsuario()+" Autenticado Correctamente");


        }
        else{
            System.out.println("Usuario "+ldapAuth.getUsuario()+" No se Puedo Autenticar");
        }
    }
}

執行時,我看到錯誤代碼49數據52e,我在Google上對其進行了搜索,並看到它是通過無效的憑據顯示的,因此我不知道如何解決該問題。

稍后,我進行了一些更改,如果我退出了用戶名和密碼,則錯誤不會顯示出來。

謝謝 :)

您沒有為綁定帳戶提供正確的憑據。 您的DC不允許匿名LDAP查找。 因此,您需要提供憑據才能傳遞請求。 我們必須提供諸如domainShortName \\ administrator密碼之類的東西。否則,您可以配置DC以允許匿名LDAP綁定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM