2011-09-20 58 views
0

我需要在C#中爲Micro Framework實現OAuth 1.0客戶端。這是在與AppEngine交談的應用程序上,並且存在發佈數據。我通過http運行(沒有SSL),所以我需要使用HMAC-SHA1簽名。我已經實現了HMAC和SHA-1,並且我的結果與我能找到的每個參考示例相匹配。我有一個使用Python OAuth客戶端的工作客戶端,但將信息提取出來非常痛苦,所以我所能做的就是檢查它發送的標頭(使用http://www.ericgiguere.com/tools/http-header-viewer.html的超級幫助頁面)使用OAuth 1.0實施時遇到問題

因此,這裏是什麼我知道:

1.) Url = http://www.ericgiguere.com/tools/http-header-viewer.html 
2.) Method = POST 
3.) Body = Hello [Hex: 48 65 6c 6c 6f] 

4.) Timestamp = 1316541449 
5.) Nonce = 83950705 

6.) Consumer Key = www.paulhounshell.com 
7.) OAuth Token = 1/8xRHqPyi8ejwjc3TSoNakWLrzj45yy6rTG0pkDx-pWo 
8.) Consumer Secret = [It's a secret] 
9.) OAuth Secret = [Also a secret] 

下面是我得到的是什麼:

10.) Body SHA1 Hash = 9/+ei3uy4Jtwk1pdeF4MxdnQq/A= (From 3) 
11.) Signature Base String = POST&http://www.ericgiguere.com/tools/http-header-viewer.html&oauth_body_hash%3D9%2F%2Bei3uy4Jtwk1pdeF4MxdnQq%2FA%3D%26oauth_consumer_key%3Dwww.paulhounshell.com%26oauth_nonce%3D83950705%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1316541449%26oauth_token%3D1%2F8xRHqPyi8ejwjc3TSoNakWLrzj45yy6rTG0pkDx-pWo%26oauth_version%3D1.0 
    (From 1, 2, 4, 5, 6, 7, 10 - Probably Wrong) 
12.) Key = [ConsumerSecret]&[OAuthSecret] (From 8, 9) 
13.) Signature = VjIwjKwmvFMe6ewBNwfiPscIPo0= (From 11, 12, Definitely Wrong) 
14.) Authorization = OAuth realm="http://www.ericgiguere.com", oauth_body_hash="9%2F%2Bei3uy4Jtwk1pdeF4MxdnQq%2FA%3D", oauth_consumer_key="www.paulhounshell.com", oauth_token="1%2F8xRHqPyi8ejwjc3TSoNakWLrzj45yy6rTG0pkDx-pWo", oauth_signature_method="HMAC-SHA1", oauth_signature="VjIwjKwmvFMe6ewBNwfiPscIPo0%3D", oauth_timestamp="1316541449", oauth_nonce="83950705", oauth_version="1.0" 

在我工作的客戶,我得到:

15.) Authorization = OAuth realm="http://www.ericgiguere.com", oauth_body_hash="9%2F%2Bei3uy4Jtwk1pdeF4MxdnQq%2FA%3D", oauth_nonce="83950705", oauth_timestamp="1316541449", oauth_consumer_key="www.paulhounshell.com", oauth_signature_method="HMAC-SHA1", oauth_version="1.0", oauth_token="1%2F8xRHqPyi8ejwjc3TSoNakWLrzj45yy6rTG0pkDx-pWo", oauth_signature="4GNDFN2%2FQoJxa2fzVq7sAN9NDxE%3D" 
16.) Signature = 4GNDFN2/QoJxa2fzVq7sAN9NDxE= (From 15, Proves 13 Wrong) 

我懷疑問題在於構建我的簽名基本字符串,可能是在我的編碼中,但我不確定。任何有OAuth經驗的人都知道我被打破的地方?

如果你有一個簽名基礎字符串供我測試,我可以快速週轉以驗證它是否正確,但我不想發佈我的祕密(這就是爲什麼他們是祕密)。

回答

0

在簽名基礎字符串中,需要對URL進行兩次編碼。一旦成爲url參數,然後第二次將參數連接在一起時。