2010-10-25 46 views
1

我正在嘗試編寫一個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 

如果我輸入一個不存在的用戶名和一個空字符串作爲密碼,綁定操作成功。如果輸入有效的用戶名和有效/無效/空密碼,則綁定操作將失敗,並顯示錯誤消息「無效憑證」。

我已經看過其他線程並閱讀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", "[email protected]") 
attrs = ["mail", "cn", "sn","objectclass"] 
ldap.search(:base => treebase, :filter => filter, :attributes => attrs, :return_result => false) do |entry| 
    puts entry._dump 0 
end 

我再重試用我原來的腳本(上圖)與所獲得的DN,瞧!

回答

2

我猜你的LDAP帳戶信息不正確,但你的LDAP服務器接受匿名綁定,這就是爲什麼當你沒有指定一個有效的用戶名和密碼時它的工作原理。 LDAP用戶標識非常繁瑣,所以我建議仔細檢查整個事情,包括零件的情況。

1

這裏是我與net-ldap寶石用我的作品來驗證從ActiveDirectory的服務器用戶登錄的示例代碼:

def name_for_login(email, password) 
    email = email[/\A\w+/].downcase # Throw out the domain, if it was there 
    email << "@mycompany.com"  # I only check people in my company 
    ldap = Net::LDAP.new(
    host: 'ldap.mycompany.com', # Thankfully this is a standard name 
    auth: { method: :simple, email: email, password:password } 
) 
    if ldap.bind 
    # Yay, the login credentials were valid! 
    # Get the user's full name and return it 
    ldap.search(
     base:   "OU=Users,OU=Accounts,DC=mycompany,DC=com", 
     filter:  Net::LDAP::Filter.eq("mail", email), 
     attributes: %w[ displayName ], 
     return_result:true 
    ).first.displayName.first 
    end 
end