Я пишу скрипт Ruby для подключения к веб-сайту REST API. Веб-сайт аутентифицируется с помощью LDAP / SSO с использованием учетных данных AD, поэтому не требуется никакой базовой аутентификации или пользователя/пароля.
Это код до сих пор:
resource_http = Net::HTTP.new(webserver.company.com, 443)
resource_http.use_ssl = true
resource_http.verify_mode = OpenSSL::SSL::VERIFY_NONE
resource_request = Net::HTTP::Post.new("/api/endpoint")
resource_request.set_form_data({"chocolate"=>"yes","beer"=>"yes"})
resource_response = resource_http.request(resource_request)
Но получаю ошибку авторизации:
Net::HTTPUnauthorized 401 Authorization Required
Играя с Net::LDAP, я могу аутентифицировать свои учетные данные на своем компьютере:
ldap = Net::LDAP.new
ldap.host = "ldap.company.com"
ldap.port = "389"
ldap.auth "[email protected]", "password"
ldap.bind
Но я понятия не имею, как «прикрепить» или передать эту информацию LDAP в HTTP-запросе.
Все мои поисковые запросы в Google указывают на включение единого входа/аутентификации в приложении веб-сайта, но я не пытаюсь этого сделать, я хочу подключиться с помощью своего скрипта Ruby к существующему веб-сайту, прошедшему проверку подлинности LDAP.
Обновление №1. Некоторые форумы Ruby указали мне на HTTPI gem и использование адаптера 'curb'. Этот адаптер использует библиотеку Curl для обработки проверки подлинности Kerberos/SPNEGO. Однако мне не удалось заставить установщик curb работать с библиотекой curl, на которую они ссылаются на своем веб-сайте (для компьютера с Windows).
Я перенес код на Python с помощью модуля kerberos. Я могу сгенерировать билет и добавить его в заголовки HTTP-запроса, которые проходят аутентификацию с помощью REST API и возвращают нужные мне данные.
Я все еще учусь, поэтому, даже если мой код работает на Python, я бы хотел, чтобы он работал на Ruby.
Пример кода на Python: https://gist.github.com/DevOpsCow/d374300304d7beef8a03