2015-10-13 75 views
1

我有一段時間讓omniauth-ldap能夠正常使用我們的AD服務器,我相信這是因爲我們的用戶名有我們的域名。Omniauth-ldap無效的憑據

這將成功地連接到我們的LDAP服務器:

ldapsearch -h ldap.ourdomain.com -b "dc=ourdomain,dc=int" -D "OURDOMAIN\username" -w <password> '(sAMAccountName=username)' 

但是,在OmniAuth這些設置只會導致 「無效憑證」

Padrino.use OmniAuth::Strategies::LDAP, 
    :host => "ldap.ourdomain.com", 
    :base => "dc=OURDOMAIN,dc=INT", 
    :uid => "sAMAccountName", 
    :bind_dn => 'OURDOMAIN\%{username}', 
    # This is hard coded for now, but I need it to be the value entered by the user 
    :password => "mypassword" 

UPDATE

這方面的工作此外,我發現omniauth-ldap會將bind方法設置爲:anonymous,如果:bind_dn和:password未設置。

但是,如果設置的值爲,則不會插入用戶名,也不會提供用戶輸入的密碼。

我需要的是

:bind_dn => 'OURDOMAIN\<user entered username>', 
:password => <user entered password> 

但密碼和輸入的用戶名只提供給連接,如果你硬編碼他們。

回答

0

我不得不通過創建一個服務帳戶來解決這個問題。該帳戶登錄,然後查詢實際嘗試登錄的用戶的存在和有效性。服務帳戶憑證可以在您的Omniauth配置中設置,然後您可以像使用任何其他omniauth方法一樣使用omniauth-ldap。

1

這主要是因爲omniauth-ldap所做的設計選擇。 設計是用戶提供的用戶名(電子郵件或ID)不足以構造可用於綁定的DN(專有名稱)。因此,omniauth ldap所做的是

  1. 調用ldap搜索(如果匿名搜索不允許在AD/LDAP中使用,則使用bind_dn和密碼)爲用戶提取DN。
  2. 然後它使用來自步驟1的DN和用戶輸入的密碼綁定到LDAP/AP。

我相信步驟1)是不必要的。大多數DN可以從用戶名派生。