我在Node中安装了服务器,并试图通过公司的AD向用户授权。 我有这样的路线:

    const {isLogin, signup, login, logout} = require('../services/authorization.js')
app.post('/login', function(req, res, next) {

    login(req,res,next)
        .then((loginObject)=>{
            res.status(200).send({msg:"Login Başarılı",user:loginObject.user});
        })
        .catch(err=>{
            console.log("login hatalı err:",err)
            res.status(400).send({msg:'Login hatalı', err:err});
        })
    ;
});

和登录功能:

var login = function (req,res,next){

        return new Promise(function (resolve, reject) {

            passport.authenticate('ldapauth', {session: false},function(err, user, info) {
                if (err) {
                    console.log("serverjs:login:err",err)
                    return reject(err)
                }
                if (! user) {
                    console.log("serverjs:login:!user",info,"-",user)
                    return reject(info.loginMessage)
                }
                req.login(user, loginErr => {
                    if (loginErr) {
                        console.log("serverjs:login:req.login:err:",loginErr)
                        return reject(loginErr);
                    }
                    req.session.save(() => {
                        req.session.user=user;
                        return resolve({user:user})
                    })
                });    
            })(req, res, next);
        })

    }

我的护照是:

var LocalStrategy   = require('passport-local').Strategy;
var LdapStrategy = require('passport-ldapauth');
// load up the user model
var User           = require('../models/user.js');
const postGreAPI = require('../services/postGreAPI.js');
var logger = require("../../../log4js").logger;
var credentials = require('./credentials.js');
var OPTS = {
    server: {
      url: credentials.AUTH.LDAP.URL,// 'ldap://localhost:389'
      bindDN: 'CN=appuser,OU=someou,DC=somedc,DC=local',//credentials.AUTH.LDAP.BINDDN, //'cn=root',
      bindCredentials: 'XXXX',//credentials.AUTH.LDAP.BINDCREDENTIALS, //'secret',
      searchBase: 'OU=Users,OU=someou,DC=somedc,DC=local',
      searchFilter: '(sAMAccountName={{email}})'
    },
    usernameField : 'email',
    passwordField : 'password',

};
// expose this function to our app using module.exports
module.exports = function(passport) {

    // =========================================================================
    // passport session setup ==================================================
    // =========================================================================
    // required for persistent login sessions
    // passport needs ability to serialize and unserialize users out of session
    // used to serialize the user for the session
    passport.serializeUser(function(user, done) {
        done(null, user.id);
    });

    // used to deserialize the user
    passport.deserializeUser(function(id, done) {

        postGreAPI.readUser(id)
        .then(user=>{
            done(null, user);
        })
        .catch(err=>{
            done(err, null);
        })
    });


    passport.use('ldapauth',new LdapStrategy(OPTS,
    function(user, done) { 


        postGreAPI.readUserByEmail(email)
        .then(user=>{

            if (!user) {
                return done(null, false, {loginMessage:'Hatalı Şifre ya da Kullanıcı Adı'}); // req.flash is the way to set flashdata using connect-flash
            } else {
                return done(null, user);
            }
        })
        .catch(err=>{
            return done(err);
        })
    }));
};

虽然我通过activedirectory2成功进行了身份验证,但是我无法使用passportjs。 我尝试了很多选择。 我查了所有与passport-ldapauth有关的内容。 但是我总是收到消息“无效的用户名/密码”(我认为是来自client.js),这是我的日志:

AlperFindUserThis: LdapAuth {
  opts:
   { url: 'ldap://XX.XXX.X.XX:XXX',
     bindDN:
      'CN=appuser,OU=someou,DC=somedc,DC=local',
     bindCredentials: 'XX',
     searchBase: 'OU=Users,OU=someou,DC=somedc,DC=local',
     searchFilter: '(sAMAccountName={{email}})',
     searchScope: 'sub',
     bindProperty: 'dn',
     groupSearchScope: 'sub',
     groupDnProperty: 'dn' },
  log: undefined,
  _events: { error: [ [Function], [Function] ] },
  _eventsCount: 1,
  _maxListeners: undefined,
  clientOpts:
   { url: 'ldap://XX.XXX.X.XX:XXX',
     tlsOptions: undefined,
     socketPath: undefined,
     log:
      Logger {
        _events: {},
        _eventsCount: 0,
        _maxListeners: undefined,
        _level: 30,
        streams: [Array],
        serializers: [Object],
        src: false,
        fields: [Object] },
     timeout: undefined,
     connectTimeout: undefined,
     idleTimeout: undefined,
     reconnect: undefined,
     strictDN: undefined,
     queueSize: undefined,
     queueTimeout: undefined,
     queueDisable: undefined },
  bindDN:
   'CN=appuser,OU=someou,DC=somedc,DC=local',
  bindCredentials: 'XXX',
  _adminClient:
   Client {
     _events:
      { error: [Function: bound ],
        connectTimeout: [Function: bound ] },
     _eventsCount: 2,
     _maxListeners: undefined,
     host: 'XX.XXX.X.XX',
     port: XXX,
     secure: false,
     url:
      Url {
        protocol: 'ldap:',
        slashes: true,
        auth: null,
        host: 'XX.XXX.X.XX:XXX',
        port: XXX,
        hostname: 'XX.XXX.X.XX',
        hash: null,
        search: null,
        query: null,
        pathname: null,
        path: null,
        href: 'ldap://XX.XXX.X.XX:XXX',
        secure: false },
     tlsOptions: undefined,
     socketPath: false,
     log:
      Logger {
        _events: {},
        _eventsCount: 0,
        _maxListeners: undefined,
        _isSimpleChild: true,
        _level: 30,
        streams: [Array],
        serializers: [Object],
        src: false,
        fields: [Object] },
     timeout: 0,
     connectTimeout: 0,
     idleTimeout: 0,
     strictDN: true,
     queue:
      RequestQueue {
        size: Infinity,
        timeout: 0,
        _queue: [],
        _timer: null,
        _frozen: false },
     _socket: null,
     connected: false,
     _connectRetry:
      Backoff {
        _events: [Object],
        _eventsCount: 2,
        _maxListeners: undefined,
        backoffStrategy_: [ExponentialBackoffStrategy],
        maxNumberOfRetry_: 1,
        backoffNumber_: 0,
        backoffDelay_: 1,
        timeoutID_:
         Timeout {
           _called: false,
           _idleTimeout: 1,
           _idlePrev: [Timeout],
           _idleNext: [TimersList],
           _idleStart: 13484,
           _onTimeout: [Function: bound ],
           _timerArgs: undefined,
           _repeat: null,
           _destroyed: false,
           [Symbol(unrefed)]: false,
           [Symbol(asyncId)]: 73,
           [Symbol(triggerId)]: 69 },
        handlers: [Object] },
     connecting: true },
  _adminBound: false,
  _userClient:
   Client {
     _events:
      { error: [Function: bound ],
        connectTimeout: [Function: bound ] },
     _eventsCount: 2,
     _maxListeners: undefined,
     host: '10.222.8.33',
     port: 389,
     secure: false,
     url:
      Url {
        protocol: 'ldap:',
        slashes: true,
        auth: null,
        host: 'XX.XXX.X.XX:XXX',
        port: XXX,
        hostname: 'XX.XXX.X.XX',
        hash: null,
        search: null,
        query: null,
        pathname: null,
        path: null,
        href: 'ldap://XX.XXX.X.XX:XXX',
        secure: false },
     tlsOptions: undefined,
     socketPath: false,
     log:
      Logger {
        _events: {},
        _eventsCount: 0,
        _maxListeners: undefined,
        _isSimpleChild: true,
        _level: 30,
        streams: [Array],
        serializers: [Object],
        src: false,
        fields: [Object] },
     timeout: 0,
     connectTimeout: 0,
     idleTimeout: 0,
     strictDN: true,
     queue:
      RequestQueue {
        size: Infinity,
        timeout: 0,
        _queue: [],
        _timer: null,
        _frozen: false },
     _socket: null,
     connected: false,
     _connectRetry:
      Backoff {
        _events: [Object],
        _eventsCount: 2,
        _maxListeners: undefined,
        backoffStrategy_: [ExponentialBackoffStrategy],
        maxNumberOfRetry_: 1,
        backoffNumber_: 0,
        backoffDelay_: 1,
        timeoutID_:
         Timeout {
           _called: false,
           _idleTimeout: 1,
           _idlePrev: [TimersList],
           _idleNext: [Timeout],
           _idleStart: 13484,
           _onTimeout: [Function: bound ],
           _timerArgs: undefined,
           _repeat: null,
           _destroyed: false,
           [Symbol(unrefed)]: false,
           [Symbol(asyncId)]: 77,
           [Symbol(triggerId)]: 69 },
        handlers: [Object] },
     connecting: true },
  _getGroups: [Function] }
-----------------------------
AlperSearch: OU=Users,OU=someou,DC=somedc,DC=local
-----------------------------
AlperSerchBaseOpt: { filter: '(sAMAccountName={{email}})', scope: 'sub' }
-----------------------------
-----------------------------
AlperAdminBindErr: { InvalidCredentialsError: 80090308: LdapErr: DSID-0C09042A, comment: AcceptSecurityContext error, data 52e, v3839

我还不能解决。 你有什么建议吗?

  ask by Alper Bilgil translate from so

本文未有回复,本站智能推荐:

1回复

Passport-ldapauth:缺少凭证

我正在尝试使用Passport的Ldap库创建LDAP身份验证,并且出现以下错误: {“ message”:“缺少凭据”} 这是代码: 我应该如何发送用户名? 我应该指定bindCredentials字段吗? 谢谢
1回复

在Node.js上使用passport-ldapauth进行的LDAP认证失败

嗨,我是openldap和nodejs的新手。 我正在尝试创建openldap身份验证,并使用一个简单的节点应用来针对本地ldap服务器测试该身份验证。 我的理解是,我可以创建ldap服务器并在Apache Directory Studio中添加所有用户。 然后编写一个与ldap服务器
2回复

Passport-ldapauth:错误:getaddrinfo ENOTFOUND

这是我设置护照-ldapauth策略的方式: 这是在哪里使用它: 我得到这个错误: 错误:getaddrinfo ENOTFOUND **** ****:389 在errnoException(dns.js:28:10) 在GetAddrInfoReqW
1回复

如何使用passport-ldapauth库在Nestjs应用程序中使用动态ldap配置选项?

我正在尝试在 Nestjs 应用程序中使用passport-ldapauth 对活动目录进行身份验证。 我没有服务帐户,想使用用户名作为 DN 绑定到 Active Directory。 我正在尝试使用异步配置检索,但在策略类的构造函数中调用 super() 时遇到问题。 我收到以下错误: s
1回复

Passport-ldapauth无法执行验证回调

请设置我的护照ldapauth,它与所有参数都可以正常使用,问题是如果用户名或密码错误,它根本不会进一步执行verify回调函数。 它只是停止。 因此,我无法将反馈提供给用户以表明实际出了什么问题。 有什么线索我想念吗? 这是结构 这是我实际进行登录的地方 该代码运行良好
1回复

NodeJS,Passport和本地Passport

因此,我遇到了使用本地策略进行身份验证的问题。 如果我传递了无效的凭据或任何不成功的信息,则会收到相应的错误。 但是,如果他们的身份验证成功,则会出现404错误。 我挖了一下,碰到的最好的主意是删除会话存储(在序列化用户时这似乎正在发生)。 有人遇到这样的问题吗? 这是一些代码
1回复

NodeJS passport-ldapauth始终返回“无效的用户名/密码”

我正在开发一个项目,我正在尝试根据学校的LDAP服务器对用户进行身份验证。 为此,我正在尝试使用NPM Package passport-ldapauth 。 事先说:我要100%确保提供的username和password在LDAP服务器上注册并有效。 下面是我正在尝试使用的代码
1回复

Passport 强制 /login/callback nodejs

我为 nodejs 设置了通行证。 我也在使用 azure 广告,它正在正确验证并呈现我的登录页面,但问题是每次我尝试单击新链接或在 url 中输入路径时,它都会将我重定向到该路径,但是/login 在它前面,所以我从来没有真正进入那个新页面 - 像这样(localhost:3000/login/c