LQ博客 www.lqblogs.com
arrows
nav

node.js koa1下实现LDAP查询和认证

作者:LQ 来源:原创 发布时间:2020-09-29 浏览量:3234 评论:0 点赞:0

思路描述:

    1、从客户端得到登陆名和密码。注意这里的密码第一次查询的时候没有用到,第二次才用到。

    2、用默认用户和密码绑定到LDAP服务器。

    3、通过基础路径和查询选项,来查询对应用户信息。注意这里的查询选项会用到客户端输入的登陆名。

    4、如果能正确查询并返回用户信息,然后再通过entry的DN和客户端输入的密码重新绑定LDAP服务器。

    5、执行完上一步,主要流程就结束了,如果绑定成功,那么说明验证成功,如果不行,则返回对应的错误信息。

下面是koa1示例,仅供参考:

var resObj = yield new Promise(function(resolve, reject){
            var ldap =  require("ldapjs");
            //创建LDAP client,把服务器url传入
            var client = ldap.createClient({
              url: 'ldap://192.168.11.22:389'
            });
            //创建LDAP查询选项
            //filter的作用就是相当于SQL的条件
            var opts = {
              filter: `(sAMAccountName=${username})`, //查询条件过滤器,查找uid=kxh的用户节点
              scope: 'sub',        //查询范围
              timeLimit: 500       //查询超时
            };
            //将client绑定LDAP Server
            //第一个参数:是用户,必须是从根节点到用户节点的全路径
            //第二个参数:用户密码
            client.bind('testUsername', 'testPassword', function (err1, res1) {
                //开始查询
                //第一个参数:查询基础路径,代表在查询用户信心将在这个路径下进行,这个路径是由根节开始
                //第二个参数:查询选项
                client.search('DC=test,DC=com', opts, function (err2, res2) {
                    //查询结果事件响应
                    res2.on('searchEntry', function (entry) {
                        //获取查询的对象
                        var user = entry.object;
                        // var userText = JSON.stringify(user,null,2);
                        // console.log(userText);
                        console.log(user.dn);
                        // 用户认证
                        client.bind(user.dn, password, function (err3, res3) {
                            if(err3){
                                console.error('error: ' + err3.message);
                                resolve(null);
                            }else{
                                var obj = {};
                                obj.groupName = user.description;
                                resolve(obj);
                            }
                            client.unbind();
                        });
                    });
                    // res2.on('searchReference', function(referral) {
                    //     console.log('referral: ' + referral.uris.join());
                    // });    
                    //查询错误事件
                    res2.on('error', function(err4) {
                        console.error('error: ' + err4.message);
                        //unbind操作,必须要做
                        client.unbind();
                        resolve(null);
                    });
                    // //查询结束
                    // res2.on('end', function(result) {
                    //     // console.log('search status: ' + result.status);
                    //     //unbind操作,必须要做
                    //     client.unbind();
                    // });        
                    
                });
            });
        }).then(function (res){
            return res;
        });


koa1 ldap node
如果你感觉本文章对你有帮助的话,那就点赞、打赏或订阅一下吧
点赞(0)
打赏
倒踩(1)
关闭 感谢您的支持,我会继续努力
微信支付
支付宝支付
扫码打赏,建议金额1-20元
浏览量(3234)
讨论本篇文章(0)
发表评论

最多访问文章

最新文章