2012-01-25 17 views
2

Rubyists,如何在Rails中調試HTTP AUTH參數?

我的HTTP AUTH params出現在我的Rails 3應用程序中出現問題。密碼末尾有一些空格。我正在調試我的客戶端應用程序,看起來它正確地發送它。

我在我的應用程序這樣做:

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

然後我送到監獄長這一點。

我想查看原始數據,看看是否有空白。怎麼做?

編輯:我已經調試了httpd和精簡進程之間的線路,並且我確信數據正常傳輸。它在我的Rails 3.0.10中一定是錯誤的。我能夠解碼標題中出現的base64字符串,並且它不包含任何空格。

這真的看起來像BASE64解碼器問題。也許是填充問題。我的字符串是:

Qmxvb21iZXJnOnRjbG1lU1JT 

其解碼爲

Bloomberg:tclmeSRS 

正確使用非紅寶石的base64解碼器。即使在Ruby中:

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

我不明白。在Rails或類似的東西中搜索bugreport。

編輯:因此,原來我們的Apache httpd的代理增加了一些以頭:

Authorization: Basic Qmxvb21iZXJnOnRjbG1lU1JT, Basic 

這導致在密碼的末尾不正確的字符,這是因爲:

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

現在的問題是 - 這是正確的?這是在httpd或rails的錯誤嗎?

+0

似乎問題在於您的httpd配置。 ',基本'部分聽起來很奇怪。 – Jef

+0

是我們的apache httpd配置中的一個錯誤:RequestHeader追加Authorization「Basic」提前 – lzap

回答

1

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}"