您现在的位置是:首页 > 文章详情

通俗易懂了解 NJet LDAP 统一认证

日期:2024-01-24点击:67

NGINX 向云原生演进,All in OpenNJet 


一.OpenNJet 认证功能介绍

该功能基于njet 的auth_request 指令,来支持第三方认证,该指令指定一个 uri , 在获取用户请求时,开启 subrequest 子请求,发送认证信息到该指定uri 进行鉴权认证,认证方式有:
1.本地认证
2.调用proxy_pass 调用第三方的认证接口。
3.直接访问认证服务器进行认证。ldap,radius,redis
如果返回2XX 则可以继续后需的资源访问。其他值则访问中断拒绝。返回值如下: 2XX 允许请求操作。 401 不正确授权
403 禁止访问
其他值,500错误
本文使用第二种方式, 使用lua 脚本,直接连接到ldap 服务器进行验证。img

二.LDAP服务器搭建(ubuntu)

Tyler’s Guides

ComputingForGeeks

1.设置hostname

sudo hostnamectl set-hostname http://ldap.example.com sudo vim /etc/hosts 192.168.18.50 http://ldap.example.com

2.安装ldap

sudo apt install slapd ldap-utils 

按照提示输入管理密码如Aa-111111

3.add nodes

add_nodes.ldif

dn: ou=people,dc=example,dc=com objectClass: organizationalUnit ou: People dn: ou=groups,dc=example,dc=com objectClass: organizationalUnit ou: Groups 
ldapadd -x -D cn=admin,dc=example,dc=com -W -f add_nodes.ldif 

4.加载memberof模块

cat memberof_config.ldif

dn: cn=module,cn=config cn: module objectClass: olcModuleList olcModuleLoad: memberof.la olcModulePath: /usr/lib/ldap dn: olcOverlay={0}memberof,olcDatabase={1}mdb,cn=config objectClass: olcConfig objectClass: olcMemberOf objectClass: olcOverlayConfig objectClass: top olcOverlay: memberof olcMemberOfDangling: ignore olcMemberOfRefInt: TRUE olcMemberOfGroupOC: groupOfNames olcMemberOfMemberAD: member olcMemberOfMemberOfAD: memberOf 
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f memberof_config.ldif 

5.加载refint模块

refint1.ldif

dn: cn=module{1},cn=config add: olcmoduleload olcmoduleload: refint 

refint2.ldif

dn: olcOverlay={1}refint,olcDatabase={1}mdb,cn=config objectClass: olcConfig objectClass: olcOverlayConfig objectClass: olcRefintConfig objectClass: top olcOverlay: {1}refint olcRefintAttribute: memberof member manager owner 
sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f /tmp/refint1.ldif sudo ldapadd -Q -Y EXTERNAL -H ldapi:/// -f /tmp/refint2.ldif 

6.增加用户,组

slappasswd -h {SHA} -s Aa-111111 
root@garlic:/home/garlic# cat add_user.ldif dn: uid=john,ou=people,dc=example,dc=com cn: John Doe givenName: John sn: Doe uid: john uidNumber: 5000 gidNumber: 10000 homeDirectory: /home/john mail: john.doe@example.com objectClass: top objectClass: posixAccount objectClass: shadowAccount objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person loginShell: /bin/bash userPassword: {SHA}BS15yozmNosbVHvPv3YDXbZ0IuI= ldapadd -x -D cn=admin,dc=example,dc=com -W -f add_user.ldif 
root@garlic:/home/garlic# cat add_group.ldif dn: cn=mygroup,ou=groups,dc=example,dc=com objectClass: groupofnames cn: mygroup description: All users member: uid=john,ou=people,dc=example,dc=com ldapadd -x -D cn=admin,dc=example,dc=com -W -f add_group.ldif 

7.验证

root@garlic:/home/garlic# ldapsearch -x -LLL -H ldap:/// -b uid=john,ou=people,dc=example,dc=com dn memberof dn: uid=john,ou=people,dc=example,dc=com memberOf: cn=mygroup,ou=groups,dc=example,dc=com

三.部署njet

1.配置文件 conf/njet.conf

img

2.Lua 文件:scripts/http_ldap.lua

img

四.测试

认证成功: [root@k8s-139 ldap]# curl 'http://192.168.40.139:8080/resource?name=john&pass=Aa-111111' ok 
认证失败: [root@k8s-139 ldap]# curl 'http://192.168.40.139:8080/resource?name=john&pass=Aa-111112' <html> <head><title>401 Authorization Required</title></head> <body> <center><h1>401 Authorization Required</h1></center> <hr><center>njet/2.0.1</center> </body> </html> 

OpenNJet 最早是基于 NGINX1.19 基础 fork 并独立演进,具有高性能、稳定、易扩展的特点,同时也解决了 NGINX 长期存在的难于动态配置、管理功能影响业务等问题。 邮件组  官网

原文链接:https://my.oschina.net/u/6606114/blog/10935659
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章