我試圖修改現有的使用設計檢查LDAP連接的rails應用程序。我需要檢查多個不同的LDAP連接。基本上我的用戶羣分爲兩個或三個不同的活動目錄,我希望能夠提供一組連接信息對象,並通過連接運行,直到獲得響應或失敗。這可能與設計?設計多個LDAP連接
1
A
回答
3
這是!有點。我最近一起攻擊了一個解決方案,不確定它現在對你有多大幫助。
首先,您需要使用devise_ldap_authenticatable。安裝完成後,您可以對此gem中的connection.rb文件中的initialize方法進行一些更新,以接受一個配置或多個配置。
def initialize(params = {})
ldap_configs = YAML.load(ERB.new(File.read(::Devise.ldap_config || "#{Rails.root}/config/ldap.yml")).result)[Rails.env]
ldap_configs = ldap_configs.is_a?(Hash) ? [ldap_configs] : ldap_configs
下一部分由您決定。由於我的約束(兩個目錄中存在用戶名),我強制用戶在循環連接之前輸入一個有效的域。你可能沒有這個約束。無論哪種情況,只需循環配置即可。一旦你成功綁定,打破循環。該配置值將存儲在這裏初始化的變量@ldap -
ldap_configs.each do |ldap_config|
#Maybe not needed if you don't have usernames in each directory. @domain is a user-entered value
if @domain == ldap_config["domain"]
#This should all stay the same, until you check the bindings
if @ldap.bind
#If it binds, break the loop. the values in @ldap will be stored
break
else
#keep looping
end
end
end
接下來,確保devise_ldap_authenticatable生成配置了所有的連接,包括域名的,如果需要的話ldap.yml文件 -
## Environment
development:
-
host: "localhost1.com"
port: "389"
attribute: uid
base: dc=my-domain,dc=com
admin_user: cn=admin,dc=my-domain,dc=com
admin_password: admin_password
ssl: false
domain: "FIRST"
-
host: "localhost2.com"
port: "389"
attribute: uid
base: dc=my-domain,dc=com
admin_user: cn=admin,dc=my-domain,dc=com
admin_password: admin_password
ssl: false
domain: "SECOND"
0
我建立在史蒂夫的回答下面,似乎工作得很好。這樣做的好處是它包裝了原始代碼併爲其添加了功能。您可以保持ldap.yml
文件相同,並添加一個hosts
密鑰以及YAML的一組主機來執行此操作。
請注意,我挽救了循環中的連接錯誤。當它試圖再次建立圖書館已經試圖建立的聯繫時,它仍然會拋出。
module Devise
module LDAP
module ConnectionExtensions
def initialize(params = {})
super
ldap_config = YAML.load(File.read("#{Rails.root}/config/ldap.yml"))[Rails.env]
ldap_config["hosts"]&.each do |host|
begin
@ldap.host = host
break if @ldap.bind
rescue Net::LDAP::Error => e
DeviseLdapAuthenticatable::Logger.send(e)
next
end
end
end
end
class Connection
prepend ConnectionExtensions
end
end
end
這裏是樣本YAML文件:
development:
host: localhost1.com
hosts:
- localhost1.com
- localhost2.com
port: 389
attribute: uid
base: dc=my-domain,dc=com
admin_user: cn=admin,dc=my-domain,dc=com
admin_password: admin_password
ssl: false
相關問題
- 1. Django Ldap連接設置
- 2. LDAP未連接
- 3. 連接到Ldap
- 4. PHP LDAP連接
- 5. LDAP連接
- 6. 設計 - openid + ldap
- 7. 與多個連接計數
- 8. 有多個連接的多個計數
- 9. SSL Ldap連接(ldaps)
- 10. ldap連接問題
- 11. LDAP連接錯誤
- 12. 從Spring連接LDAP
- 13. 設計/架構:網絡插座一個連接vs多個連接
- 14. 找到多個多計連接SQL
- 15. MySQL多重計數和多個連接
- 16. 數據庫設計 - 一個表或多個表/連接
- 17. Tomcat 5.5 https連接器vs ldap連接
- 18. MySQL連接設計和併發連接
- 19. 如何配置多個Ldap連接 - WSO2縮進服務器
- 20. 設計連接多個數據庫的系統
- 21. 如何設計具有多個持久連接的服務器
- 22. 多個「數據」連接的應用程序設計問題
- 23. 連接四個多線程設計 - 作業
- 24. 通過SSL連接到LDAP
- 25. Ldap連接失敗,在php
- 26. LDAP連接字符串
- 27. GWT JDBC LDAP連接失敗
- 28. 檢查LDAP連接(Java)
- 29. 春LDAP:創建連接
- 30. Python ldap連接測試
是可能的,如果我有一個主機(運行全局編錄),多基地CONFIGS爲多個域,以簡化這個解決方案? –