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

原创
01/24 16:53
阅读数 98

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 长期存在的难于动态配置、管理功能影响业务等问题。 邮件组  官网

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部