LDAP Node.js Active Directory 认证

9

我目前正在使用node.js开发一个web应用程序,用户需要登录才能访问信息。我想使用外部活动目录服务器来检查用户的登录名和密码。我尝试过使用node-ldapauth,但无法使其工作(我不知道它是否适用于活动目录,也许只适用于openLdap)。有什么建议吗?

3个回答

4

我使用了一个rubyldap库来解决问题,谢谢!

更新:按要求提供我用来解决问题的库https://github.com/ruby-ldap/ruby-net-ldap/

在服务器上安装ruby库后,使用gem install(查找一下,不难)即可。

 require 'rubygems'
  require 'net/ldap'

  ldap = Net::LDAP.new :host => server_ip_address,
       :port => 389,
       :auth => {
             :method => :simple,
             :username => "cn=manager, dc=example, dc=com",
             :password => "opensesame"
       }

  filter = Net::LDAP::Filter.eq("cn", "George*")
  treebase = "dc=example, dc=com"

  ldap.search(:base => treebase, :filter => filter) do |entry|
    puts "DN: #{entry.dn}"
    entry.each do |attribute, values|
      puts "   #{attribute}:"
      values.each do |value|
        puts "      --->#{value}"
      end
    end
  end

  p ldap.get_operation_result

按照上述方法设置一个 Ruby 文件。

您可以使用以下方式运行 Ruby 库:

var ldap = 'ruby '+process.cwd()+'/src/ruby/ruby_file_name '+ user+' '+password;

要在Ruby中获取用户和密码,请使用ARGV [0]和ARGV1。您可以通过使用回调函数在node.js中获取Ruby返回的结果。

var result = exec(ldap, theCallBack);

在 theCallBack 函数中,您可以通过传入 stdout 来获取返回的 Ruby 库结果。
例如:
function theCallBack(err,stdout) {
    ----your code here, stdout is what you PUT in the ruby library.

希望这有所帮助!

1
如果您能编辑此答案并包含有关您使用的解决方案的更多信息/链接/代码,以便帮助其他可能遇到此问题的人,那就太好了。 - Dhaust

0

0

请问您能否发布您的代码片段和错误信息?

我正在尝试实现类似的功能,并找到了 ldapjs 库。它允许您实现与 LDAP 服务器的客户端连接,并在连接过程中验证用户的用户名和密码。

我尝试在 Windows 上使用版本 0.8.2,但遇到了一些问题,听起来开发者正在处理。这个库的好处是它不依赖于您提到的那个 OpenLDAP 绑定。


https://github.com/mcavage/node-ldapjs/issues/81 是提到在Windows上安装问题的问题。 - Christophe
我的代码片段看起来很像ldapauth库(https://github.com/trentm/node-ldapauth),基本上使用了示例代码。 - Denis
如果我使用console.log(ldap),我会得到类似以下内容的回复:连接: { pair: [Object], writable: true, readable: true, _paused: false, _needDrain: false, _pending: [], _pendingCallbacks: [], _pendingBytes: 0, socket: [Object], encrypted: [Object], 等等。 - Denis
然而,当我调用ldap.authenticate时,什么也没有发生,这让我觉得可能它不适用于活动目录。在我的情况下,Active Directory服务器已经设置好了所有用户信息在目录中,所以我真的没有更改我正在运行的LDAP类型的选项,因为它是公司Active Directory。 - Denis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接