获取OAuth访问令牌(不是语言特定的) - 对于Flickr和Tumblr而言不是相同的问题,但不是Twitter

问题描述:

我在使用PHP编写自己的OAuth库和包装类时犯了一个巨大的错误。对于Twitter的OAuth实现来说,一切都非常有效,但我无法为Tumblr和Flickr签署access_token步骤。获取OAuth访问令牌(不是语言特定的) - 对于Flickr和Tumblr而言不是相同的问题,但不是Twitter

该步骤的唯一区别是现在我有oauth_token和oauth_verifier参数。我使用授权标题,我能想到的唯一问题是有一些字符编码问题,但我不确定。

基础线(打破了清晰度):

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

什么确切是你正在得到的问题,我的意思是错误? –

+0

哈哈。专注于给我所有的信息,我忘记了错误。对不起,一秒钟! – landons

我会回答我自己的问题。

有不同的OAuth服务提供商实现之间的几个差异:

Twitter的

  • 预计公司oauth_callback上request_token一步
  • 不返回oauth_token_secret直到响应的access_token
  • 因此,在签署access_token请求时有一个空的oauth_token_secret

的Flickr &的tumblr

  • 期待上的authenticate oauth_callback(即授权)上request_token步步
  • 返回oauth_token_secret(并希望你记住它,并用它来签署的access_token要求)

的Youtube(和其他谷歌的OAuth服务提供商):

  • 预计Google专有的“范围”在request_token步骤
  • 预计oauth_callback在身份验证(即OAuthAuthorizeToken)步骤
  • 在access_token步骤中似乎不喜欢授权标头中传递的oauth_token(由于所需的基本字符串中的双重编码而以“标记无效”响应)。请将其传递到帖子正文或查询字符串中。
+1

我被困在如何从tumblr获取access_token。我从tumblr获得了oauth_token_secret&oauth_token,但现在不知道如何获得access_token。如果我在这里使用oauth_token作为access_token,那么tumblr会给出一个身份验证警告。如果在这个过程中有任何使用oauth_verifier,请告诉我们吗?请帮帮我。我已经浪费了2天的时间。 –