通俗易懂了解 NJet LDAP 统一认证
NGINX 向云原生演进,All inOpenNJet 一.OpenNJet 认证功能介绍 该功能基于njet 的auth_request 指令,来支持第三方认证,该指令指定一个 uri , 在获取用户请求时,开启 subrequest 子请求,发送认证信息到该指定uri 进行鉴权认证,认证方式有: 1.本地认证 2.调用proxy_pass 调用第三方的认证接口。 3.直接访问认证服务器进行认证。ldap,radius,redis 如果返回2XX 则可以继续后需的资源访问。其他值则访问中断拒绝。返回值如下: 2XX 允许请求操作。 401 不正确授权 403 禁止访问 其他值,500错误 本文使用第二种方式, 使用lua 脚本,直接连接到ldap 服务器进行验证。 二.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 2.Lua 文件:scripts/http_ldap.lua 四.测试 认证成功: [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 长期存在的难于动态配置、管理功能影响业务等问题。邮件组官网