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 で実行する必要がある場合があります。前のコマンドを 389 ではなく 636 で試して、そうであるかどうかを確認してください。

これらのポートのいずれかでサーバーに telnet で接続できない場合は、ファイアウォール ルールによってサーバーとの通信がブロックされているか、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 に答える