vlambda博客
学习文章列表

教大家在nginx中如何接入ldap认证

       出于安全考虑,最近公司要求对pinpoint这种不带用户名密码保护的站点进行用户登录认证,接到这个任务的第一个想法是使用nginx的简单用户认证,但是维护用户是个比较麻烦的工作,所以特意研究了下能否接入ldap这种统一认证方式,今天给大家分析下。


1、部署openldap,因为我的都是linux机器所以首选openldap,而没有使用AD域控。

1)部署docker环境

不赘述,可以参考官方文档一键部署

2)启动openldap

docker run -itd \

--name ldap-service \

--hostname ldap-service \

-p 389:389 -p 689:689 \

-v /data/openldap/database:/var/lib/ldap \

-v /data/openldap/config:/etc/ldap/slapd.d \

--env LDAP_ORGANISATION="wuqingyan.top" \

--env LDAP_DOMAIN="wuqingyan.top" \

--env LDAP_ADMIN_PASSWORD="20220423" \

--env LDAP_TLS=false \

--detach \

osixia/openldap:1.4.0

3)部署ldap管理服务phpldapAdmin

# docker run -itd \

--name phpldapadmin-service \

-p 80:80 \

--hostname phpldapadmin-service \

--link ldap-service:wuqingyan.top \

--env PHPLDAPADMIN_LDAP_HOSTS=wuqingyan.top \

--env PHPLDAPADMIN_HTTPS=false \

--detach \

osixia/phpldapadmin:0.9.0

4)配置ldap,浏览器打开http://IP

登录ldap:


教大家在nginx中如何接入ldap认证


教大家在nginx中如何接入ldap认证

添加ou:

教大家在nginx中如何接入ldap认证


教大家在nginx中如何接入ldap认证

教大家在nginx中如何接入ldap认证


教大家在nginx中如何接入ldap认证

教大家在nginx中如何接入ldap认证

教大家在nginx中如何接入ldap认证

添加用户:

教大家在nginx中如何接入ldap认证


教大家在nginx中如何接入ldap认证用户名:zhangsan  密码:123456


教大家在nginx中如何接入ldap认证

教大家在nginx中如何接入ldap认证


教大家在nginx中如何接入ldap认证


2、部署一个不带认证的测试站点,这里部署一个tomcat作为示例,实际应用中可能是kibana、pinpoint、skywalking这种系统。

# docker run -itd --name mytomcat \

-p 8080:8080 \

-v /usr/local/tomcat/webapps/ROOT:/usr/local/tomcat/webapps/ROOT \

tomcat:8

# echo "hello world" > /usr/local/tomcat/webapps/ROOT/test.html

浏览器访问测试:http://IP/test.html

教大家在nginx中如何接入ldap认证


3、配置nginx

1)安装nginx

# yum install epel-release -y

#  yum install nginx -y

#  systemctl start nginx

这里应该会失败,因为前面phpldapadmin已经占用80端口了,可以把phpldapadmin换个端口启动,再启动nginx。

# docker stop phpldapadmin-service && docker rm phpldapadmin-service

# docker run -itd \

--name phpldapadmin-service \

-p 8000:80 \

--hostname phpldapadmin-service \

--link ldap-service:wuqingyan.top \

--env PHPLDAPADMIN_LDAP_HOSTS=wuqingyan.top \

--env PHPLDAPADMIN_HTTPS=false \

--detach \

osixia/phpldapadmin:0.9.0


2)检查nginx是否已安装http_auth_request_module模块

# nginx -V 

教大家在nginx中如何接入ldap认证


3)代理tomcat

# vim /etc/nginx/conf.d/tomcat.conf

教大家在nginx中如何接入ldap认证

#nginx -t && nginx -s reload

浏览器访问测试:

教大家在nginx中如何接入ldap认证

可以看到不需要任何认证就能访问到tomcat服务,接下来我们配置ldap认证

4)配置ldap认证

yum install python-ldap git -y

# git clone https://github.com/nginxinc/nginx-ldap-auth.git

# cd nginx-ldap-auth

# nohup python ./nginx-ldap-auth-daemon.py > /tmp/auth.log 2>&1 &

# nohup python ./backend-sample-app.py > /tmp/login.log 2>&1 &

nginx-ldap-auth-daemon.py 为认证服务

backend-sample-app.py 为登录服务,在里面可以做自定义登录页面

# vim /etc/nginx/conf.d/tomcat.conf

教大家在nginx中如何接入ldap认证


# nginx -t && nginx -s reload

浏览器访问tomact的代理页面htpp://IP/test.html测试,可以看到已经需要输入用户名密码才能访问了,这里的用户名密码就是ldap中的用户,比如之前的zhangsan/123456

教大家在nginx中如何接入ldap认证

验证通过后就可以看到tomcat的服务页面了:

教大家在nginx中如何接入ldap认证


可以在phpldapadmin中新增一个用户测试:

教大家在nginx中如何接入ldap认证


教大家在nginx中如何接入ldap认证


教大家在nginx中如何接入ldap认证


教大家在nginx中如何接入ldap认证


教大家在nginx中如何接入ldap认证


教大家在nginx中如何接入ldap认证


教大家在nginx中如何接入ldap认证

如果大家觉得登录页面丑陋,可以自行修改backend-sample-app.py 中的这段就好: