利用目录服务器实现单点登录
服务器 实现 利用 目录 登录 单点
2023-09-27 14:28:37 时间
LDAP
https://www.jianshu.com/p/50a214f51dd1
LDAP 是轻量级目录访问协议的简称(Lightweight Directory Access Protocol).用于访问目录服务。它是 X.500 目录访问协议的移植,但是简化了实现方法。
含有目录数据库,提供给用户查询、使用信息的计算机就是目录服务器。X.500是一套目录服务标准,定义了一个机构在全局范围内共享名称和与名称相关联的数据。X.500采用层次结构,其中的管理域可以提供这些域内的用户和资源信息,并定义了强大的搜索功能,因此查询变得更简单。由于X.500目录服务协议过于复杂,因此开发了LDAP(轻量级的目录访问协议)。LDAP目录存储和组织的基本数据结构称为条目,每个条目都有唯一的标识符,并有一些属性,就类似数据库中每一行代表一条数据,并且有一项是唯一标识。但是LDAP比数据库简单很多,并且常用于查询(也就是读取),写操作不常使用。![]()
上图是一个典型的目录结构
第一个节点 DN 命名为:dn:dc=example,dc=com
第二个节点 DN 命名为:dn:ou=People,dc=example,dc=com
第三个节点 DN 命名为:dn:uid=bjensen,ou=people,dc=example,dc=com
ldap.js库
https://www.npmjs.com/package/ldapjs
LDAPjs makes the LDAP protocol a first class citizen in Node.js.
For full docs, head on over to http://ldapjs.org.
var ldap =var server = ldapserverserverTo run that, assuming you've got the OpenLDAP client on your system:
利用LDAP实现登录
https://www.ibm.com/developerworks/cn/opensource/se-use-ldap-authentication-authorization-node.js-bluemix-application/index.html
- 使用用户的 DN,您可尝试使用该用户密码绑定到服务器。
12345// When you have the DN, try to bind with it to check the password
var userClient = ldap.createClient({
url: sessionData.ldap.url
});
userClient.bind(sessionData.dn, sessionData.passwd, function(err) {
- 如果绑定成功,则意味着用户信息是正确的,您可以开始新会话。如果绑定失败,则密码是错误的(该 uid 已被用,否则该流程将在子步骤 4 中失败)。
12345678if (err == null) {
var sessionID = logon(sessionData);
res.setHeader("Set-Cookie", ["sessionID=" + sessionID]);
res.redirect("main.html");
} else
res.send("You are not " + sessionData.uid);
});
源码:
https://github.com/qbzzt/bluemix/tree/master/security/201802/login-using-ldap
app.post("/ad", (req, res) => { var client = ldap.createClient({ url: req.body.serverUrl }); client.bind(req.body.username + '@' + req.body.domain, req.body.password, function(err) { if (err) { res.send("Bind failed " + err); return; } res.send("Log on successful"); }); // client.bind }); // app.post("/ad...")
相关文章
- Python实现简单HTTP服务器
- Samba 系列(五):将另一台 Ubuntu DC 服务器加入到 Samba DC 实现双域控主机模式
- java微信开发(wechat4j)——access_token中控服务器实现
- 前端必学必会-多媒体-本地存储-浏览器与服务器的交互-通信功能
- 高性能服务器架构思路
- supersockets扩展服务器配置
- CGI浏览器与服务器的交互
- Golang 实现 Redis(1): Golang 编写 Tcp 服务器
- 服务器出现故障要如何保护数据减少损失?
- 浅析如何实现浏览器访问远程桌面/服务器界面:NoVNC - 以Web方式交付VNC远程连接
- git 服务器新建仓库 远程仓库
- 云服务器 ECS 建站教程:Drupal建站教程(CentOS7)
- 利用xcopy命令实现本地文件复制到远程服务器的方法
- 分布式服务器框架之Server.Common库中实现 秒级定时器
- Linux 之 rsync实现服务器的文件同步