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认 ...
随机推荐
- HeadFirst设计模式<1>
HeadFirst设计模式<1> 1 策略模式 鸭子飞行和嘎嘎叫策略 2 工厂模式 简单工厂 工厂方法 抽象工厂 简单工厂简单的pizza工厂 通过一个工厂类的方法,创建和返回对象实例 原 ...
- javascript中常见的几种循环遍历
项目开发中,不管是建立在哪个框架基础上,对数据的处理都是必须的,而处理数据离不开各种遍历循环.javascript中循环遍历有很多种方式,记录下几种常见的js循环遍历. 一.for循环 for循环应该 ...
- Hibernate 数据层基类实现
提取经常操作表如新增.修改.删除.查询.分页查询.统计等业务功能,形成基类,用泛型传参,有利于每个实体对象数据层继承. package com.base.dao; import java.io.Ser ...
- C#中巧用妙法避免嵌套方式使用两个foreach循环
问题:需要对DataGridViewRow的下拉框列Item2所选内容进行判断,看是否跟数据库里面某个配置表的数据列Item1匹配.如果用两个foreach循环进行匹配,会导致逻辑复杂而且容易只bre ...
- Linux系统学习 十二、VSFTP服务—简介与原理
1.简介与原理 互联网诞生之初就存在三大服务:WWW.FTP.邮件 FTP主要针对企业级,可以设置权限,对不同等级的资料针对不同权限人员显示. 但是像网盘这样的基本没有权限划分. 简介: FTP(Fi ...
- Python通过pymysql连接数据库并进行查询和更新SQL方法封装
1.通过pymysql连接数据库并进行数据库操作2.查询数据3.更新修改SQL方法封装 import pymysql.cursors import json class OperationMysql: ...
- C sharp #004# 进度条与Timer
饮水思源:金老师的自学网站 C#实现进度条异常简单,因为所有东西都已经封装好了. 只需要简单的拖拽: 写两行代码就完工了: private void timer1_Tick(object sender ...
- Vue 从入门到进阶之路(十三)
之前的文章我们介绍了一下 vue 中的作用域插槽,本章我们来看一下动态组件与 v-once 指令. <!DOCTYPE html> <html lang="en" ...
- ASP.NET MVC教程六:两个配置文件详解
前言 在新建完一个MVC项目之后,你会发现整个整个项目结构中存在有两个web.config文件,如下图所示: 这两个配置文件,一个位于项目的根目录下面,一个位于Views文件夹下面,这两个配置文件有什 ...
- 【Visio流程图】借助redis来实现数据即时刷新
[需求:]数据从竞品网站爬过来,经过分析处理之后,把结果通过网页实时反馈给业务人员. [应用:]2个应用: 一个是爬取数据的应用:不断从竞品网站爬数据,每次爬到的数据为一批.然后,对每一批爬到的数据进 ...