ruby - 如何使用事件目录和 ruby​​ 脚本检查用户凭据

标签 ruby active-directory ldap

我正在尝试编写一个 Ruby 脚本,使用事件目录服务器检查用户凭据是否有效。到目前为止,这是我尝试过的:

require 'rubygems'
require 'net-ldap'

host = '10.4.1.6'
port = 389

username = 'username'
password = 'password'

ldap = Net::LDAP.new
ldap.host = host
ldap.port = port
ldap.auth "CN=#{username},CN=Users,DC=companyname,DC=ad", password

if ldap.bind
  puts 'YES!'
  puts ldap.get_operation_result.message
else
  puts 'NO :-('
  puts ldap.get_operation_result.message
end

如果我输入一个不存在的用户名和一个空字符串作为密码,绑定(bind)操作就会成功。如果我输入有效的用户名和有效/无效/空密码,绑定(bind)操作将失败并显示错误消息“无效凭证”。

我查看了其他线程并阅读了 net-ldap 文档,但我无法弄清楚我做错了什么。

有人可以给我一些关于如何实现这一目标的想法吗?

提前感谢任何回复:-)

编辑:

正如@StuartEllis 所建议的,问题出在用户标识符上。为了找出正确的 DN,我使用了以下脚本(取自 net-ldap 文档):

ldap.auth "CN='adminUser',CN=Users,DC=companyname,DC=ad", 'adminUserPwd'
ldap.bind
treebase = "DC=companyname,DC=ad"
filter = Net::LDAP::Filter.eq( "mail", "username@companyname.com" )
attrs = ["mail", "cn", "sn","objectclass"]
ldap.search( :base => treebase, :filter => filter, :attributes => attrs, :return_result => false ) do |entry|
  puts entry._dump 0
end

然后我使用我的原始脚本(上面)和获得的 DN 重试,瞧!

最佳答案

我猜想您的 LDAP 帐户详细信息不正确,但您的 LDAP 服务器接受匿名绑定(bind),这就是为什么在您未指定有效的用户名和密码时它仍然有效的原因。 LDAP 用户标识符非常繁琐,因此我建议仔细检查整个内容,包括各部分的大小写。

关于ruby - 如何使用事件目录和 ruby​​ 脚本检查用户凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4019128/

相关文章:

ruby-on-rails - 没有 :remote => true 的 Ajax 提交

ruby - 如何拒绝在 Ruby 中创建实例变量

c# - .NET OWIN 身份验证 - Cookie + Windows(事件目录)

.net - 如何使用客户的(远程)事件目录服务器对用户进行身份验证

java - Spring Security + LDAP 总是返回 BadCredentialsException

ruby - 在 RHEL6 上安装 Oversip 面临的问题

ruby - 将 ImageMagick 命令移植到 RMagick

azure - Windows Azure Active Directory 与本地 AD(子域)同步

django - 在 Django 中测试身份验证

java - 从 Java 应用程序连接 LDAP 服务器