1
 def authenticate(username, password)
        require 'net-ldap'
        ldap = Net::LDAP.new
        ldap.host = 'server.local'
        ldap.port = 389
        ldap.base = 'cn=users, dc=server, dc=local'
        ldap.auth username, password
        if ldap.bind
            puts "authentication succeeded"
            else
            puts "authentication failed"
        end

以上是我在我的方法中使用的代码,我不确定为什么我的尝试会失败。我正在尝试对用户进行身份验证。我找不到哪里出错了?它每次都将身份验证失败。为什么?请帮我。

4

1 回答 1

1

首先查看您使用的计算机是否可以与 LDAP 服务器通信

telnet server.local 389

显然,您希望将 server.local 替换为您的实际服务器详细信息。如果您无法以这种方式登录服务器,则端口 389 未打开,您可能需要在 SSL 端口 636 上运行。尝试使用 636 而不是 389 的上一个命令来查看是否是这种情况。

如果您无法通过这些端口中的任何一个远程登录到服务器,那么您要么有防火墙规则阻止您与之交谈,要么是在非标准端口上配置了 LDAP,或者其他严重错误。

工作端口 636 可能意味着您需要运行以下内容。

require "net-ldap"
ldap = Net::LDAP.new(
    host: "server.local"
    port: 636
    encryption: :simple_tls
)
ldap.auth username, password

失败所有这些错误消息将非常有用,因此请尝试运行

if ldap.bind
    # Yay!
else
    puts ldap.get_operation_result
end

有了一些结果,也许我们可以为您提供更多帮助。

于 2013-04-21T00:49:31.963 回答