【发布时间】:2012-01-25 21:42:04
【问题描述】:
Ruby 主义者,
进入 Rails 3 应用程序的 HTTP AUTH 参数有问题。密码末尾有一些空格。我正在调试我的客户端应用程序,它看起来发送正确。
我在我的应用程序中这样做:
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 中搜索错误报告或类似的东西。
编辑:事实证明我们的 Apache httpd 代理在标头中添加了一些内容:
Authorization: Basic Qmxvb21iZXJnOnRjbG1lU1JT, Basic
这会导致密码末尾的字符不正确,因为:
>> Base64.decode64('Basic Qmxvb21iZXJnOnRjbG1lU1JT, Basic'.split(' ', 2).last || '')
=> "Bloomberg:tclmeSRS\005\253\""
现在的问题是 - 正确吗?是 httpd 还是 rails 的 bug?
【问题讨论】:
-
似乎问题出在您的 httpd 配置上。
, Basic对我来说听起来很奇怪。 -
是我们的 apache httpd 配置中的一个错误:RequestHeader append Authorization "Basic" early
标签: ruby-on-rails