我犯了一个错误,就是在PHP中编写自己的OAuth库和包装类。对于Twitter的OAuth实现,一切都很有效,但我没有为Tumblr和Flickr签署access_token步骤。
该步骤的唯一区别是,现在我有oauth_token和oauth_verifier参数。我正在使用Authorization标头,我能想到的唯一问题是有一些字符编码问题,但我不确定。
基本字符串(为清晰起见,已打破):
POST&
http%3A%2F%2Fwww.flickr.com%2Fservices%2Foauth%2Faccess_token&
oauth_consumer_key%3Deeedfcd4c46a2c12080f58eb90a974d8
%26oauth_nonce%3D322190b47ca680d053338724ad1cc56d35d3e7b5
%26oauth_signature_method%3DHMAC-SHA1
%26oauth_timestamp%3D1322981994
%26oauth_token%3D72157628270097303-18aa378b4ab02af3
%26oauth_verifier%3Dec7811503fdd4380
%26oauth_version%3D1.0
这正是Flickr所期望的(他们在错误响应中告诉我),这让我相信签名就是问题。
授权标题(为清晰起见也是如此):
Authorization: OAuth
oauth_consumer_key="eeedfcd4c46a2c12080f58eb90a974d8",
oauth_nonce="322190b47ca680d053338724ad1cc56d35d3e7b5",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="1322981994",
oauth_token="72157628270097303-18aa378b4ab02af3",
oauth_verifier="ec7811503fdd4380",
oauth_version="1.0",
oauth_signature="LYJtgHetQWNKX3rtQlSs643FdWY%3D"
和Flickr的回复:
oauth_problem=signature_invalid&
debug_sbs=POST&
http%3A%2F%2Fwww.flickr.com%2Fservices%2Foauth%2Faccess_token&
oauth_consumer_key%3Deeedfcd4c46a2c12080f58eb90a974d8
%26oauth_nonce%3D322190b47ca680d053338724ad1cc56d35d3e7b5
%26oauth_signature_method%3DHMAC-SHA1
%26oauth_timestamp%3D1322981994
%26oauth_token%3D72157628270097303-18aa378b4ab02af3
%26oauth_verifier%3Dec7811503fdd4380
%26oauth_version%3D1.0
没有GET或POST参数。似乎从我在这里看到的一切都正确地逃脱了。签名适用于request_token步骤(适用于Twitter,适用于任何请求)。我已经验证我的服务器时钟在他们的秒钟之内。我错过了一些明显的东西吗你会如何诊断这个?
答案 0 :(得分:2)
我会回答我自己的问题。
不同的oauth服务提供商实施之间存在一些差异:
<强>微博强>
Flickr&amp; tumblr 强>
Youtube(和其他Google OAuth服务提供商):