LDAP认证
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认证的更多相关文章
- No.2 CAS之SPNEGO+LDAP认证配置
1.概述 本文先配置了SPNEGO认证,就是如果用户操作系统如果登陆了公司的Windows域,用户浏览器访问应用服务即可免登录. 然后如果不在域里的员工,用LDAP认证方式,输账号密码登陆. 参考文档 ...
- Jenkins-配置LDAP认证
Jenkins-配置LDAP认证 参考文档: LDAP添加用户详见我的博文 Linux分类 中的< LDAP2-创建OU和用户>博文. 1.LDAP配置 1.准备一个adminDN账号用 ...
- 搭建harbor仓库、LDAP认证
ldap: 192.168.199.177 c5game.com 宿主机:192.168.199.224 测试客户机:192.168.199.223 安装docker.docker-compose 访 ...
- gitlab、openvpn配置ldap认证
gitlab配置ldap认证: vim /etc/gitlab/gitlab.rb 添加以下内容: gitlab_rails['ldap_enabled'] = true gitlab_rails[' ...
- 本地docker搭建gitlab, 并配置ldap认证
基于Docker在Mac OS X系统中的部署和设置GitLab的具体过程如下: 1. 安装Docker for Mac (参见https://docs.docker.com/docker-for ...
- nginx实现ldap认证
1.安装依赖. yum -y install openldap-devel yum install pcre pcre-devel -y yum -y install openssl openssl- ...
- Mantis集成 LDAP 认证
mantis的用户认证函数Authentication中相关有 $g_login_method MD5 LDAP PLAIN CRYPT CRYPT_FULL_SALT BASIC_AUTH Some ...
- centos关闭sudo的ldap认证
在新服务器上部署项目时,运行sudo命令会卡住很久,然后报错 sudo:ldap_start_tls_s(): Can't contact LDAP server 简直不能忍. 一番研究后发现是lda ...
- centos下svn的ldap认证配置
前提:完成svn的基本安装 一.安装sasl相关组件 #yum install -y cyrus-sasl cyrus-sasl-lib cyrus-sasl-plain 二.查看SASL版本和提供的 ...
- 禅道开源版 Ldap认证插件开发
禅道开源版-Ldap插件开发 背景 由于开源版无法使用ldap认证,所以在此分享一下自己开发禅道的ldap开发过程,希望对你有所帮助. 简单说一下这个插件的功能: 1.跳过原有禅道认证,使用ldap认 ...
随机推荐
- Cookie插件的使用
jQuery-cookie插件的使用 什么是插件? 基于jQuery的语法,按照一定规范书写,具有特定功能的脚本文件,称为插件. 插件除了js文件之外,有的还包含css文件,图片和字体等资源文件. 在 ...
- Python 标准类库-数字和数学模块之decimal使用简介
标准类库-数字和数学模块之decimal使用简介 by:授客 QQ:1033553122 例子 >>>from decimal import * >>>getcon ...
- CSS基础属性介绍
css属性分类介绍 css属性分类介绍 CSS分类目录 文本/字体/颜色 文本相关 字体相关 颜色相关 背景相关 大小/布局 大小属性 margin 外边距 padding 内边距 border 边框 ...
- Python基础语法-List
列表的操作方法 列表中存放的数据是可以进行修改的,比如"增"."删"."改"" 添加元素("增" append ...
- C#&.Net干货分享- 构造SMSWebChineseApi对接第三方短信平台
你们想要的短信对接,要舍得点钱哦.... /// <summary> /// http://sms.webchinese.cn/api.shtml /// </summa ...
- 高维数据Lasso思路
海量数据的特征工程中, 如果数据特征维度达到几千乃至上万 常规的lasso很容易失效 这里介绍几种泛义lasso,是在实际数据处理中常用的 迭代与分块思路/分组的使用(有兴趣的同学可自行实践一下) 1 ...
- 华为2019年NE40E-X8,承诺命令
commit每敲一行命令,都得确认一下.以防误操作.
- BZOJ3894/LG4313 文理分科 新建点最小割
问题描述 BZOJ3894 LG4313 题解 显然一个人只能选文/理 -> 一个人只能属于文(S).理(T)集合中的一个 可以把选择文得到 \(art\) 的收益看做选择文失去 \(scien ...
- 高阶函数&&高阶组件(二)
高阶组件总共分为两大类 代理方式 操纵prop 访问ref(不推荐) 抽取状态 包装组件 继承方式 操纵生命周期 操纵prop 代理方式之 操纵prop 删除prop import React fro ...
- 跨域问题,解决方案-Nginx反向代理
跨域问题,解决之道 跨域问题,在日常开发过程中,是一个非常熟悉的名词.今天的话题,结合我之前的项目场景,讨论下<跨域问题,解决之道>. 跨域是什么 跨域问题,是由于JavaScript出于 ...