java+LDAP实现AD域认证(1)

各位老铁大家好:
很高兴能看到我的这篇博文,说明我没有白写,希望能给在不断努力的你提供参考意见,如果没有解决你的问题,也欢迎在下方留言,大家一起共同探讨。

AD域可能还有很多人不了解,百度了下,给大家一个官方正确的解答:
活动目录(Active Directory)是面向Windows Standard Server、Windows Enterprise Server以及 Windows Datacenter Server的目录服务(Active Directory不能运行在Windows Web Server上,但是可以通过它对运行Windows Web Server的计算机进行管理。)Active Directory存储了有关网络对象的信息,并且让管理员和用户能够轻松地查找和使用这些信息。Active Directory使用了一种结构化的数据存储方式,并以此作为基础对目录信息进行合乎逻辑的分层组织。Microsoft Active Directory 服务是Windows 平台的核心组件,它为用户管理网络环境各个组成要素的标识和关系提供了一种有力的手段。
所以很多企业在用,所以我们的程序很可能就会结合AD去实现用户体系的一些东西。下面先贴一段代码:
public LdapContext init(String path, String url, String userName, String pwd) {
String keystore = path;
System.setProperty(“javax.net.ssl.trustStore”, keystore);
System.setProperty(“javax.net.ssl.keyStorePassword”, “changeit”);
Properties env = new Properties();
LdapContext ctx = null;
// java.naming.factory.initial
env.put(Context.INITIAL_CONTEXT_FACTORY, “com.sun.jndi.ldap.LdapCtxFactory”);
// java.naming.provider.url
env.put(Context.PROVIDER_URL, url);
// java.naming.security.authentication
env.put(Context.SECURITY_AUTHENTICATION, “simple”);
// java.naming.security.principal
env.put(Context.SECURITY_PRINCIPAL, userName);
// java.naming.security.credentials
env.put(Context.SECURITY_CREDENTIALS, pwd);
env.put(Context.SECURITY_PROTOCOL, “ssl”);
try {
ctx = new InitialLdapContext(env, null);
return ctx;
} catch (NamingException e) {
return ctx;
}
}
背景:
在域认证的时候是有389和636端口。
389不需要安全认证,只能读ad里面对应的信息(查),不能操作(写入,修改,删除);
636端口是可以执行用户信息的所有操作(增删查改),用此端口需要AD里面生成的证书,才能建立ssl通信的通道,不然会报错。如果用ssl方式,特别注意证书的读取路径。在AD里面生成的证书样式参考下图:
在这里插入图片描述
上图中以.cer格式结尾的就是生成的证书,有效期一般为1年。如果自己不会,这一步可以在网上找方法,基本是可用。
上图中红色框内的是证书库,这个是jdk自带的,我们需要把我们生成的证书加到cacerts证书库中,这样我们在程序中才能读取。
至于怎么把证书加到证书库中,在网上也有很多方法可以参考。我个人推荐一篇博文:
https://blog.csdn.net/qq_18415783/article/details/53308321

名词解释:
path:为证书路径,windows/Linux中注意区分,如果windows下无法读取建议例如:D:\cacerts
url:就是AD域的ip路径例如:127.0.0.1:389 / 127.0.0.1:636
userName:账号
pwd:密码

当使用389端口是,里面的ssl可以不用,path也可以不要。

InitialLdapContext这个是内置方法,有兴趣和研究下。
返回的ctx可以拿来做我们需要的操作。
ctx在认证时候可能会有很多异常,此处放个大招:
https://blog.csdn.net/techchan/article/details/5440775
这个博文里面的异常错误能解决大部分的问题,如果里面没有,就自己在网上找吧!

猜你喜欢

转载自blog.csdn.net/m0_37997811/article/details/88967402