【问题标题】:How to authenticate and authorize based on membership of group in Active Directory如何根据 Active Directory 中的组成员身份进行身份验证和授权
【发布时间】:2019-03-04 04:45:32
【问题描述】:

我是 Nodejs 的初学者,我正在尝试在我的 Web 应用程序中包含 Active Directory 身份验证。另外,我正在尝试检查用户是否属于某个组,然后才允许他使用它。 我正在尝试关注this article,但它对我不起作用:

我使用了以下代码:

var passport = require('passport')
var ActiveDirectoryStrategy = require('passport-activedirectory')
var ActiveDirectory = require('activedirectory')

var ad = new ActiveDirectory({
    url: 'ldap://my.domain.com',
    baseDN: 'DC=my,DC=domain,DC=com',
    username: 'readuser@my.domain.com',
    password: 'readuserspassword'
})

passport.use(new ActiveDirectoryStrategy({
    integrated: false,
    ldap: ad
    }, function (profile, ad, done) {
        ad.isUserMemberOf(profile._json.dn, 'AccessGroup', function (err, isMember) 
        {
            if (err) return done(err)
            return done(null, profile)
        })
}))

作为中间件,我使用了以下代码:

  var opts = { failWithError: true }
  app.post('/login', passport.authenticate('ActiveDirectory', opts), 
  function(req, res) {
      res.json(req.user)
  }, function (err) {
      res.status(401).send('Not Authenticated')
  })

但是当我尝试打开“登录”页面时收到此错误:

AuthenticationError: 未经授权 完全失败(D:\Java Script\NodeJs\Printer\node_modules\passport\lib\middleware\authenticate.js:172:21) 尝试(D:\Java Script\NodeJs\Printer\node_modules\passport\lib\middleware\authenticate.js:180:28) 在 Strategy.strategy.fail (D:\Java Script\NodeJs\Printer\node_modules\passport\lib\middleware\authenticate.js:297:9) 在 D:\Java Script\NodeJs\Printer\node_modules\passport-activedirectory\index.js:143:22 在 onFind (D:\Java Script\NodeJs\Printer\node_modules\activedirectory\lib\activedirectory.js:1334:21) 在 onSearchEnd (D:\Java Script\NodeJs\Printer\node_modules\activedirectory\lib\activedirectory.js:506:21) 在 EventEmitter。 (D:\Java Script\NodeJs\Printer\node_modules\activedirectory\lib\activedirectory.js:540:7) 在 emitOne (events.js:116:13) 在 EventEmitter.emit (events.js:211:7) 在 sendResult (D:\Java Script\NodeJs\Printer\node_modules\ldapjs\lib\client\client.js:1389:22) 在 messageCallback (D:\Java Script\NodeJs\Printer\node_modules\ldapjs\lib\client\client.js:1421:16) 在 Parser.onMessage (D:\Java Script\NodeJs\Printer\node_modules\ldapjs\lib\client\client.js:1089:14) 在 emitOne (events.js:116:13) 在 Parser.emit (events.js:211:7) 在 Parser.write (D:\Java Script\NodeJs\Printer\node_modules\ldapjs\lib\messages\parser.js:111:8) 最后(D:\Java Script\NodeJs\Printer\node_modules\ldapjs\lib\messages\parser.js:66:19)

非常感谢任何帮助。 谢谢

【问题讨论】:

    标签: node.js active-directory-group


    【解决方案1】:

    不要创建活动目录的实例(var ad = ... bla bla),而是尝试在护照策略上设置 ldap 键值:

    ldap: {
       url: 'ldap://my.domain.com',
       baseDN: 'DC=my,DC=domain,DC=com',
       username: 'readuser@my.domain.com',
       password: 'readuserspassword'
    }
    

    身份验证方法应该是这样的:

    router.post('/login', function(req, res, next) {
       passport.authenticate('ActiveDirectory', { failWithError: true }, function(err, user, info) {
         if (err) { return next(JSON.stringify(err)); }
         if (!user) { return res.send({ success : false, message : 'authentication failed' }); }
         return res.status(200).json({ user });
    })(req, res, next); });
    

    【讨论】:

      猜你喜欢
      • 2019-10-04
      • 1970-01-01
      • 2012-03-02
      • 1970-01-01
      • 2022-12-19
      • 1970-01-01
      • 2013-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多