使用Yammer Api时返回的OAuth签名无效

时间:2009-10-21 06:41:35

标签: php authentication oauth http-authentication signpost

我正在尝试编写一个从Yammer中提取数据的小型webapp。我必须通过Yammer的OAuth桥来访问他们的数据。我尝试使用Oauth php library并进行3次握手。但是在最后一步,我收到一条错误消息,指出我的OAuth签名无效。

以下是一系列步骤:

  1. 第一部分涉及获取请求令牌URL,这些是我传递的查询参数。

        [oauth_version] => 1.0
        [oauth_nonce] => 4e495b6a5864f5a0a51fecbca9bf3c4b
        [oauth_timestamp] => 1256105827
        [oauth_consumer_key] => my_consumer_key
        [oauth_signature_method] => HMAC-SHA1
        [oauth_signature] => FML2eacPNH6HIGxJXnhwQUHPeOY=
    
  2. 完成此步骤后,我按如下方式获取请求令牌:

    [oauth_token] => 6aMcbRK5wMqHgZQsdfsd [oauth_token_secret] => ro8AJxZ67sUDoiOTk8sl4V3js0uyof1uPJVB14asdfs [oauth_callback_confirmed] =>真

  3. 然后我尝试通过将参数传递给授权网址来授权给定的令牌和令牌秘密。它将我带到Yammer的身份验证页面,我允许我的应用与Yammer交谈。

  4. 然后Yammer给了我一个4位数的代码,我必须将其放回我的应用程序,然后尝试获取永久访问令牌。我将以下信息传递给访问令牌URL:

        [oauth_version] => 1.0
        [oauth_nonce] => 52b22495ecd9eba277c1ce6b97b00fdc
        [oauth_timestamp] => 1256106815
        [oauth_consumer_key] => myconsumerkey
        [callback_token] => 61A7
        [oauth_token] => 6aMcbRK5wMqHgZQsdfsd
        [oauth_token_secret] => ro8AJxZ67sUDoiOTk8sl4V3js0uyof1uPJVB14asdfs
        [oauth_callback_confirmed] => true
        [oauth_signature_method] => HMAC-SHA1
        [oauth_signature] => V9YcMDq2rP7OiZTK1k5kb/otMzA=
    
  5. 这里我应该收到Oauth永久访问令牌,但我得到无效的Oauth签名。我不知道我做错了什么。我使用相同的签名来签署请求。我应该使用新令牌和密码签署请求吗?我也尝试过,但无济于事。我甚至尝试使用signpost library在java中实现它,并且卡在完全相同的位置。帮助帮助!!

3 个答案:

答案 0 :(得分:0)

Yammer在今年早些时候回应OAuth安全公告时引入了callback_token。当OAuth 1.0a发布时,它被命名为oauth_verifier。但是,Yammer仍然不支持他们的解决方法,但重命名并重新确认。

此外,以下是昨天Yammer发展网络提供的信息:

  

明天我们将发布一些   将Yammer API更改为   方便用户网络切换   API客户端。大多数变化都在   OAuth访问令牌调用哪个   允许您生成预授权   给定用户的OAuth访问令牌。   将为每个生成一个令牌   他们所在的网络和您的客户   通过发送API切换网络   请求与相应的签署   该网络的令牌。

我假设可能需要根据此更改更新Yammer OAuth库。我还没有看过它。

编辑:尽管Yammer改变了他们的观点,但我的python-yammer-oauth库仍然有效。

Edit2 :您可以尝试使用签名方法PLAINTEXT代替HMAC-SHA1吗?我遇到了Yammer和HMAC-SHA1的问题。

答案 1 :(得分:0)

我尝试使用PLAINTEXT ..但是对于这种方法,即使是请求令牌,它也会给我相同的“无效OAuth签名”错误。

因此可以生成访问令牌,我们使用HMAC-SHA1并访问实际的API方法,即发布消息..我们使用PLAINTEXT?

答案 2 :(得分:0)

刚发现问题!

我忘了在CONSUMER_SECRET的末尾添加一个&符号(“&”)。也许这也是你的问题?