Как отлаживать параметры HTTP AUTH в Rails? - PullRequest
3 голосов
/ 25 января 2012

Rubyists,

что-то не так с моими параметрами HTTP AUTH, которые поступают в мое приложение Rails 3.Пароль имеет пробел в конце.Я отлаживал свое клиентское приложение, и похоже, что оно отправляет его правильно.

Я делаю это в своем приложении:

params[:auth_username], params[:auth_password] = user_name_and_password(request)

Затем я отправляю это в Warden.

Я хотел бы увидеть необработанные данные, чтобы увидеть, есть ли пробелы.Как это сделать?

Редактировать : Я отладил соединение между httpd и тонким процессом, и я уверен, что данные поступают правильно.Должно быть, что-то не так в моем Rails 3.0.10.Мне удалось декодировать строку base64, которая идет в заголовках, и она не содержала пробелов.

Это действительно похоже на проблему с декодером BASE64.Может быть, проблема с отступами.Моя строка:

Qmxvb21iZXJnOnRjbG1lU1JT

, которая правильно декодирует до

Bloomberg:tclmeSRS

, используя не-Ruby base64 декодеры.Даже в Ruby:

>> Base64.decode64 "Qmxvb21iZXJnOnRjbG1lU1JT"
=> "Bloomberg:tclmeSRS"

Я не понимаю.Поиск сообщения об ошибке в Rails или что-то в этом роде.

Edit : Оказывается, наш Apache httpd proxy добавляет что-то в заголовок:

Authorization: Basic Qmxvb21iZXJnOnRjbG1lU1JT, Basic

Это приводит к неправильным символам в конце пароля, потому что:

>> Base64.decode64('Basic Qmxvb21iZXJnOnRjbG1lU1JT, Basic'.split(' ', 2).last || '')
=> "Bloomberg:tclmeSRS\005\253\""

Вопрос теперь - это правильно ?Это ошибка в httpd или rails?

1 Ответ

2 голосов
/ 25 января 2012

Rails user_name_and_password метод вызывает decode_credentials, который выполняет следующее, а затем разделяется с помощью ":":

::Base64.decode64(request.authorization.split(' ', 2).last || '')

Применительно к вашим данным:

::Base64.decode64("Qmxvb21iZXJnOnRjbG1lU1JT".split(' ', 2).last || '').split(/:/, 2)
=> ["Bloomberg", "tclmeSRS"]

Кажется, все в порядке, проблема лежит в другом месте IMO.Чтобы сбросить данные авторизации с вашего контроллера:

render :text => "Authorization: #{request.authorization}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...