ldap 统一认证 java_LDAP统一用户认证

ldap 统一认证 java_LDAP统一用户认证慢慢地折腾的东西多了 发现帐号管理是个大问题 Gitlab Blog Wiki Sentry ownCloud 每个系统都是独立的用户 管理起来相当麻烦 久闻 LDAP 用户认证 今日得以一试 记之 LDAP LightweightD 是一个轻量型目录访问协议 LDAP 的一个常用使用方法是单点登录 用户可以在多个服务中使用同一个密码 在这里 我们将以

慢慢地折腾的东西多了,发现帐号管理是个大问题。Gitlab,Blog,Wiki,Sentry,ownCloud……每个系统都是独立的用户,管理起来相当麻烦。久闻LDAP用户认证,今日得以一试,记之。

LDAP,Lightweight Directory Access Protocol,是一个轻量型目录访问协议。LDAP的一个常用使用方法是单点登录,用户可以在多个服务中使用同一个密码。在这里,我们将以OpenLDAP为例,在Ubuntu上进行安装配置,同时安装 phpLDAPadmin 来提供一个简单的web接口。

安装

Default

$ sudo apt-get update

# 安装过程中会要求输入一些信息,可以随意填写,后续我们将再进行重新配置

$ sudo apt-get install slapd ldap-utils

1

2

3$sudoapt-getupdate

# 安装过程中会要求输入一些信息,可以随意填写,后续我们将再进行重新配置

$sudoapt-getinstallslapdldap-utils

配置 slapd:

Default

$ sudo dpkg-reconfigure slapd

1$sudodpkg-reconfigureslapd

Omit OpenLDAP server configuration? No

DNS domain name?这个选项会决定目录的基本结构,如果没有自己的域名,也可以随便填写一个;

这里,我们以 test.com 为例

Organization name?随意填写,我们以 example 为例

Administrator password?管理员密码,安装的时候已经随意填写了一个,这次我们需要认真填写一个了;

数据库后端? HDB

Remove the database when slapd is purged? No

Move old database? Yes

Allow LDAPv2 protocol? No

接下来安装phpLDAPadmin,方便我们通过浏览器直接管理LDAP:

Default

$ sudo apt-get install phpldapadmin

1$sudoapt-getinstallphpldapadmin

配置

phpLDAPadmin

修改phpLDAPadmin配置文件,/etc/phpldapadmin/config.php:

Default

# LDAP 服务器IP或者域名

$servers->setValue(‘server’,’host’,’127.0.0.1′);

# 修改基本的目录结构

$servers->setValue(‘server’,’base’,array(‘dc=test,dc=com’));

# 修改登陆用户

$servers->setValue(‘login’,’bind_id’,’cn=admin,dc=test,dc=com’);

# 隐藏警告信息,因为这些信息大多数没用

$config->custom->appearance[‘hide_template_warning’] = true;

# 限制匿名登陆

$servers->setValue(‘login’,’anon_bind’, false);

# 或者还可以设置登陆限制

$servers->setValue(‘login’,’allowed_dns’,array=(‘cn=admin,dc=test,dc=com’));

1

2

3

4

5

6

7

8

9

10

11

12

13# LDAP 服务器IP或者域名

$servers->setValue(‘server’,’host’,’127.0.0.1′);

# 修改基本的目录结构

$servers->setValue(‘server’,’base’,array(‘dc=test,dc=com’));

# 修改登陆用户

$servers->setValue(‘login’,’bind_id’,’cn=admin,dc=test,dc=com’);

# 隐藏警告信息,因为这些信息大多数没用

$config->custom->appearance[‘hide_template_warning’]=true;

# 限制匿名登陆

$servers->setValue(‘login’,’anon_bind’,false);

# 或者还可以设置登陆限制

$servers->setValue(‘login’,’allowed_dns’,array=(‘cn=admin,dc=test,dc=com’));

配置Nginx

Default

$ sudo ln -sv /usr/share/phpldapshare/htdocs /var/www

1$sudoln-sv/usr/share/phpldapshare/htdocs/var/www

然后添加Nginx配置文件,这里还可以添加 htpasswd 访问限制;

Default

# phpLDAPadmin

server {

listen 80;

root /var/www/phpldapadmin;

index index.html index.htm index.php;

server_name ldap.chenjiehua.me;

location / {

try_files $uri $uri/ /index.html;

}

location ~ \.php$ {

fastcgi_pass unix:/var/run/php5-fpm.sock;

fastcgi_index index.php;

include fastcgi_params;

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17# phpLDAPadmin

server{

listen80;

root/var/www/phpldapadmin;

indexindex.htmlindex.htmindex.php;

server_nameldap.chenjiehua.me;

location/{

try_files$uri$uri//index.html;

}

location~\.php${

fastcgi_passunix:/var/run/php5-fpm.sock;

fastcgi_indexindex.php;

includefastcgi_params;

}

}

然后就可以通过浏览器来访问 ldap 了。

SLDAP

默认情况下,OpenLDAP并没有开启 memberof,参考官方文档 12.8 节,再参考这篇How to enable MemberOf using OpenLDAP文章解决:

首先创建两个节点:Groups node

People node

Default

# 保存为文件 add_nodes.ldif

dn: ou=people,dc=test,dc=com

objectClass: organizationalUnit

ou: People

dn: ou=groups,dc=test,dc=com

objectClass: organizationalUnit

ou: Groups

1

2

3

4

5

6

7

8# 保存为文件 add_nodes.ldif

dn:ou=people,dc=test,dc=com

objectClass:organizationalUnit

ou:People

dn:ou=groups,dc=test,dc=com

objectClass:organizationalUnit

ou:Groups

Default

$ ldapadd -x -D cn=admin,dc=example,dc=com -W -f add_nodes.ldif

1$ldapadd-x-Dcn=admin,dc=example,dc=com-W-fadd_nodes.ldif

再添加三个文件 memberof_config.ldif, refint1.ldif,refint2.ldif

Default

# memberof_config.ldif

dn: cn=module,cn=config

cn: module

objectClass: olcModuleList

olcModuleLoad: memberof

olcModulePath: /usr/lib/ldap

dn: olcOverlay={0}memberof,olcDatabase={1}hdb,cn=config

objectClass: olcConfig

objectClass: olcMemberOf

objectClass: olcOverlayConfig

objectClass: top

olcOverlay: memberof

olcMemberOfDangling: ignore

olcMemberOfRefInt: TRUE

olcMemberOfGroupOC: groupOfNames

olcMemberOfMemberAD: member

olcMemberOfMemberOfAD: memberOf

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18# memberof_config.ldif

dn:cn=module,cn=config

cn:module

objectClass:olcModuleList

olcModuleLoad:memberof

olcModulePath:/usr/lib/ldap

dn:olcOverlay={0}memberof,olcDatabase={1}hdb,cn=config

objectClass:olcConfig

objectClass:olcMemberOf

objectClass:olcOverlayConfig

objectClass:top

olcOverlay:memberof

olcMemberOfDangling:ignore

olcMemberOfRefInt:TRUE

olcMemberOfGroupOC:groupOfNames

olcMemberOfMemberAD:member

olcMemberOfMemberOfAD:memberOf

Default

# refint1.ldif

dn: cn=module{1},cn=config

add: olcmoduleload

olcmoduleload: refint

1

2

3

4# refint1.ldif

dn:cn=module{1},cn=config

add:olcmoduleload

olcmoduleload:refint

Default

# refint2.ldif

dn: olcOverlay={1}refint,olcDatabase={1}hdb,cn=config

objectClass: olcConfig

objectClass: olcOverlayConfig

objectClass: olcRefintConfig

objectClass: top

olcOverlay: {1}refint

olcRefintAttribute: memberof member manager owner

1

2

3

4

5

6

7

8# refint2.ldif

dn:olcOverlay={1}refint,olcDatabase={1}hdb,cn=config

objectClass:olcConfig

objectClass:olcOverlayConfig

objectClass:olcRefintConfig

objectClass:top

olcOverlay:{1}refint

olcRefintAttribute:memberofmembermanagerowner

执行

Default

$ sudo ldapadd -Q -Y EXTERNAL -H ldapi:/// -f memberof_config.ldif

$ sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f refint1.ldif

$ sudo ldapadd -Q -Y EXTERNAL -H ldapi:/// -f refint2.ldif

1

2

3$sudoldapadd-Q-YEXTERNAL-Hldapi:/// -f memberof_config.ldif

$sudoldapmodify-Q-YEXTERNAL-Hldapi:/// -f refint1.ldif

$sudoldapadd-Q-YEXTERNAL-Hldapi:/// -f refint2.ldif

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199845.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 下午12:04
下一篇 2026年3月20日 下午12:05


相关推荐

  • sat错题分数换算表_awing

    sat错题分数换算表_awing给定 n 个还未赋值的布尔变量 x1∼xn。现在有 m 个条件,每个条件的形式为 “xi 为 0/1 或 xj 为 0/1 至少有一项成立”,例如 “x1 为 1 或 x3 为 0”、“x8 为 0 或 x4 为 0” 等。现在,请你对这 n 个布尔变量进行赋值(0 或 1),使得所有 m 个条件能够成立。输入格式第一行包含两个整数 n,m。接下来 m 行,每行包含四个整数 i,a,j,b,用来描述一个条件,表示 “xi 为 a 或 xj 为 b”。输出格式如果问题有解,则第一行输出 POSS

    2022年8月10日
    6
  • pycharm中单行、多行注释

    pycharm中单行、多行注释一 使用 ctrl 注释 1 添加注释单行 选取单行 按 ctrl 导入数据多行 选取多行 按 ctrl pd set option display max columns None 显示完整的列 pd set option display max rows None 显示完整的行 print df describe 2 删除注释选中代码 按 ctrl 二 使用 注释个人喜欢用这种方法注释大段的解释性文字

    2026年3月27日
    3
  • JMeter之性能测试流程及性能测试关注点

    JMeter之性能测试流程及性能测试关注点

    2021年7月13日
    172
  • dev万能头文件_【C++】Dev-C++的“万能头文件”真的万能吗?

    dev万能头文件_【C++】Dev-C++的“万能头文件”真的万能吗?一般情况下老师在教授 c c 课程时 都会讲到其中的头文件的作用 没有写头文件的程序基本都不会成功运行得到想要的结果 因为每个程序基本都避免不了一定的输入与输出 而输入与输出却在头文件 include include 中 在 C 语言家族程序中 头文件被大量使用 一般而言 每个 C C 程序通常由头文件和定义文件组成 头文件作为一种包含功能函数 数据接口声明的载体文件 主要用于保存程序的声明 而定义文

    2026年3月16日
    2
  • Navicat连接SQL Server2000提示错误08001

    Navicat连接SQL Server2000提示错误08001数据库是SQLServer2000问题描述无论是本机的数据库还是局域网内的,都出现如图的提示使用系统自带的“SQL查询分析器”则可以访问!百度了一圈,给出的都是sql2005的解决办法请问2000该如何解决啊,先谢过~http://bbs.csdn.net/topics/390715240?page=1解决方法运行Navicat安装目录下的sqlncli.msi,选择修复(R

    2022年8月30日
    6
  • 每位AI工程师都应了解的A2A、MCP与ACP协议

    每位AI工程师都应了解的A2A、MCP与ACP协议

    2026年3月14日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号