2011-09-20 54 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参数,然后第二次将参数连接在一起时。