2016-02-03 2 views
1

Я пишу скрипт Ruby для подключения к веб-сайту REST API. Веб-сайт аутентифицируется с использованием LDAP/SSO с использованием учетных данных AD, поэтому не требуется базовая аутентификация или пользователь/пароль.Как подключиться к HTTP Rest API для аутентификации с LDAP

Это код до сих пор:

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 позволяют мне включить SSO/аутентификацию в приложении для веб-сайта, но я не пытаюсь это сделать, я хочу подключиться к моему скрипту Ruby на существующий веб-сайт с проверкой подлинности LDAP.

Обновление # 1 Некоторые форумы Ruby указали мне на gem HTTPI и использовали адаптер curb. Этот адаптер использует библиотеку Curl для обработки аутентификации Kerberos/SPNEGO. Однако мне не удалось заставить установщик curb работать с библиотекой curl, которую они связывают на своем веб-сайте (для компьютера под управлением Windows).

Я переместил код на Python, используя модуль kerberos. Я могу сгенерировать билет и добавить его в заголовки HTTP-запросов, которые получают аутентификацию API REST и возвращают нужные мне данные.

Я все еще учусь, поэтому, даже если мой код работает на Python, я бы хотел, чтобы он работал над Ruby.

Пример кода в Python: https://gist.github.com/DevOpsCow/d374300304d7beef8a03

+0

Добро пожаловать в переполнение стека. Вот небольшой совет: не говорите, что это глупый вопрос, а затем призывают нас быть нежными. Задавайте хорошие вопросы, убедитесь, что вы провели исследование и предоставили необходимую информацию. http://meta.stackoverflow.com/q/261592/128421 и http://tinyurl.com/stack-hints и http://catb.org/esr/faqs/smart-questions.html - хорошее чтение. –

ответ

0

Есть много способов, вы можете передавать учетные данные через HTTP. Я был бы удивлен, если бы REST API разрешил вам передавать информацию о хосте/порте вашего сервера LDAP (это может быть огромная дыра в безопасности). Наиболее вероятный сценарий заключается в том, что вам нужно указать имя пользователя и пароль в форме, которую ожидает REST API. Затем REST API выполнит аутентификацию на LDAP-сервере, и в зависимости от результатов аутентификации вы получите соответствующий ответ/статус из REST API.

Короче говоря, вам нужно получить информацию от администратора API REST (или из документации по API), чтобы узнать, как вы ожидаете аутентификации по HTTP.

Надеюсь, это поможет.

0

Когда вы получаете 401 Authorization required, сервер также должен предоставить www-authenticate -Header, который содержит дополнительную информацию об аутентификации. Посмотрите на это и проверьте предоставленную информацию.