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认 ...
随机推荐
- EF实体类指定部分属性不映射成数据库字段特性
添加NotMapped 特性 /// <summary> /// 用户名 /// </summary> [NotMapped] public string user_name ...
- IS:Introduction Parrot
Ax_What is Linux? "Linux is a family of free and open-source software operating systems based o ...
- arcgis api 4.x for js 结合 Echarts4 实现散点图效果(附源码下载)
前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 4.x for js:esri 官网 api,里面详细的介绍 arcgis api 4.x 各个类 ...
- python中 遇到的读取坑2.7和3.6版本的问题
2.7读取,需要使用io.open 3.x使用open 使用io.open的时候路径需要使用\\ 目前io.open的文件名不能为中文
- V4 Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (Doc ID 2471245.1)
V4 Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (Doc ID 2471245. ...
- Docker-compose安装和应用
安装 1.为什么要使用docker-compose? 使用 Docker Compose 可以轻松.高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具 2.其他前置条件需要 ...
- 图片转换成base64
let bgcImage = 'http://192.168.0.83:9080/files/4a9c3056-9b9b-4b41-b8e2-fd9f27023c41.jpg' let image = ...
- Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3
A,有多个线段,求一条最短的线段长度,能过覆盖到所又线段,例如(2,4)和(5,6) 那么我们需要4 5连起来,长度为1,例如(2,10)(3,11),用(3,10) 思路:我们想一下如果题目说的是最 ...
- acwing 851. spfa求最短路 模板
地址 https://www.acwing.com/problem/content/description/853/ 给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数. 请你求出 ...
- [CodeForces - 1272D] Remove One Element 【线性dp】
[CodeForces - 1272D] Remove One Element [线性dp] 标签:题解 codeforces题解 dp 线性dp 题目描述 Time limit 2000 ms Me ...