LDAP认证

发布时间:2025-12-09 11:47:05 浏览次数:1

1.LDAP介绍

  LDAP,(Light Directory Access Protocol),基于X.500标准的轻量级目录访问协议,类似于目录服务一样,是一个为查询浏览和搜索的数据库,优势在于他的数据存储结构,即树状结构组织数据,他的读性能高,写性能差,不支持事务功能。

  LDAP目录服务是由目录数据库和一套访问协议组成的协议(ssl (port:389) / ssh (port:636)),不同的协议端口不一致。

2.LDAP登录实现原理

  每一个登录,连接请求去发送本地的用户、密码给LDAP服务器,然后在LDAP服务器上进行匹配,然后判断是否可以通过认证。

3. LDAP配置代码

  

private LdapContext getLdapContext() {
EnterpriseLDAPConfig config = new EnterpriseLDAPConfig()
.baseDN("dc=fanuc,dc=com")
.ip("106.38.46.129").port("389")
.username("cn=Manager,dc=fanuc,dc=com")
.password(IdsBase64Utils.encrypt("secret"));
LDAPConnector ldapConnector = new LDAPConnector(config);

assertNotNull(ldapConnector);
return ldapConnector.connect();
}

/**
* 根据 配置 初始化LDAP的连接
*
*/
public class LDAPConnector extends AbstractLdapHandler {

private static final Logger LOG = LoggerFactory.getLogger(LDAPConnector.class);

private EnterpriseLDAPConfig ldapConfig;

public LDAPConnector(EnterpriseLDAPConfig ldapConfig) {
this.ldapConfig = ldapConfig;
}

public LdapContext connect() {
return connect(ldapConfig.baseDN());
}

public LdapContext connect(String baseDN) {
baseDN = formatDN(baseDN);
String url = createUrl(ldapConfig.ip(), ldapConfig.port(), baseDN);

Hashtable<String, String> env = initialEnv(url, ldapConfig.username(), IdsBase64Utils.decrypt(ldapConfig.password()));
try {
if (ldapConfig.connType().equals(LDAPConnType.SSL)){
env.put(Context.SECURITY_PROTOCOL, "ssl");
}
return new InitialLdapContext(env, null);
} catch (NamingException e) {
LOG.warn("Initial LDAPContext failed, url: " + url, e);
return null;
}

}


public abstract class AbstractLdapHandler {

public static final String LDAP_START = "ldap://";

/**
* ldap://12.2.3.44:389/dc=idsmanager,DC=com
*/
String createUrl(String ip, String port, String baseDN) {
return LDAP_START + ip + ":" + port + "/" + baseDN;
}


/**
* 初始化配置参数
*/
Hashtable<String, String> initialEnv(String url, String userDN, String pwd) {

Hashtable<String, String> env = new Hashtable<>();

env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, url);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, userDN);
env.put(Context.SECURITY_CREDENTIALS, pwd);

//支持 解析 AD中的 objectGUID
env.put("java.naming.ldap.attributes.binary", "objectGUID");

return env;
}

 //其中env中的所需如下
String INITIAL_CONTEXT_FACTORY = "java.naming.factory.initial";
String PROVIDER_URL = "java.naming.provider.url";
String SECURITY_AUTHENTICATION = "java.naming.security.authentication";
String SECURITY_PRINCIPAL = "java.naming.security.principal";
String SECURITY_CREDENTIALS = "java.naming.security.credentials";



ldap认证
需要做网站?需要网络推广?欢迎咨询客户经理 13272073477