我需要在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处的超级有用页面)
所以这就是我所知道的:
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 :(得分:0)
在签名基本字符串中,数据需要进行两次URL编码。一旦成为url参数,然后第二次将参数连接在一起。