Я пытаюсь изменить существующее приложение rails, которое использует программу для проверки на соединение LDAP. Мне нужно проверить несколько разных соединений LDAP. В основном моя база пользователей разделена между 2 или 3 различными активными каталогами, и я хотел бы иметь возможность предоставить массив объектов информации о соединении и пропустить их через соединения, пока не получит ответ или не сработает. Возможно ли это с разработкой?Несколько соединений LDAP с использованием
ответ
Это! Вид. Недавно я взломал решение, не уверен, поможет ли оно вам сейчас.
Во-первых, вам необходимо использовать devise_ldap_authenticatable. После того, как вы установили это, вы можете сделать некоторые обновления для метода initialize в файле connection.rb в этом камне, чтобы принять либо одну конфигурацию, либо многие из них.
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
Далее, убедитесь, что файл ldap.yml что devise_ldap_authenticatable генерируемый настроен все соединения, в том числе области, при необходимости -
## 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"
Я построил на ответ Стива следующее, что, кажется, хорошо работает. Преимущество этого в том, что он обертывает исходный код и добавляет к нему функциональность. Вы можете оставить файл 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. Несколько соединений LDAP с C# DirectoryEntry class
- 2. Несколько соединений с использованием OpenSSL
- 3. Пул соединений LDAP с защитой от пружины
- 4. Несколько соединений сокета с использованием асинхронных сокетов
- 5. Несколько соединений с использованием Entity Framework
- 6. несколько соединений с использованием спящего режима
- 7. Тестирование соединений LDAP с сервером Active Directory
- 8. Как настроить несколько соединений Ldap - сервер industity WSO2
- 9. Несколько соединений с SQLiteQueryBuilder
- 10. Соединения LDAP с использованием механизма аутентификации BIND
- 11. Несколько соединений и несколько потоков
- 12. Несколько типов соединений DB
- 13. Аутентификация с использованием LDAP
- 14. Пул соединений HTTP-соединений с использованием HttpClient
- 15. Несколько соединений в node.js
- 16. Несколько соединений с общей памятью с использованием PyRserve
- 17. Тестирование соединений AD со строкой LDAP - Azure
- 18. Несколько соединений в peewee
- 19. Несколько последовательных соединений с pyspark
- 20. Несколько соединений с предложением «IN»
- 21. JPQL - несколько соединений с OR
- 22. Несколько соединений с выражением лямбда
- 23. Несколько соединений с сетевыми соединениями
- 24. Несколько соединений, состояния сеанса
- 25. LDAP с использованием UserPrincipal отсутствует несколько полей в ActiveDirectory
- 26. Отфильтровать несколько групп для отображения с использованием LDAP
- 27. MySQL: несколько выборок, несколько соединений?
- 28. Jsoup несколько соединений - с использованием уже разобраны элемент для URL
- 29. Несколько соединений BLE с использованием Linux и Bluez 5.0
- 30. с использованием нескольких соединений codeigniter
возможно упростить это решение, если у меня есть один хост (работает глобальный каталог) и несколько базовых конфиги для нескольких доменов? –