Yammer REST API:如何获取外部网络的访问令牌?

时间:2014-03-24 02:08:41

标签: api rest oauth-2.0 access-token yammer

我正在开发一个从Yammer读取数据的ASP.NET Web应用程序。我已成功完成身份验证并从“家庭”网络获取消息。

现在我想切换到另一个网络并从中获取消息。我已经阅读了所有documentation,特别是Networks部分,其中说明了以下内容:

  

便于在不同的Yammer网络之间切换用户。所有   Yammer Web请求包含URL中的网络永久链接   (https://www.yammer.com/network_permalink/resource_path)表示   网络环境。 API请求为每个请求使用不同的OAuth令牌   用户/网络组合。

     

端点:返回当前用户所拥有的网络列表   访问。支持included_suspended参数。

     

GET https://www.yammer.com/api/v1/networks/current.json

好的,所以我需要为用户/网络组合获取相应的令牌。完善。 我向GET端点发出networks/current.json请求,并获得当前用户有权访问的所有网络。大。现在,令牌在哪里?他们不在json的回应中。

所以......

  • 如何使用Yammer REST从外部网络获取消息 API通过服务器端代码?
  • 如何获取外部令牌 网络?

更新

遵循Brian的建议:

  1. 我在验证标题(GET https://www.yammer.com/api/v1/oauth/tokens.json)中传递当前令牌Bearer: xxxxxxxxx
  2. 这将返回我正在使用的用户所在的2个网络。家庭和外部。我注意到的一件事是每个网络的user_id都不同。我不知道这是另一个用户,还是同一个用户对每个网络都有不同的user_id
  3. 现在我想从其他网络获取消息,所以我做了
  4. GET https://www.yammer.com/api/v1/messages.json

    但现在使用我从tokens.json端点获得的外部网络令牌。但我得到以下回应:

    {
      "response":
         {
          "stat":"fail",
          "code":17,
          "message":"Attempt to access a protected resource failed."
         }
     }
    

    同样,根据文档,端点用于模拟并限制在付费Yammer网络中经过验证的管理员用户。

    我真的不知道。

    更新2

    上述更新中描述的过程适用于创建Yammer App的用户(我)。我正在使用。除非我在该网络中,否则其他用户无法从外部网络获取消息。所以看起来他们正在使用我的令牌,但除非API中存在错误,否则这是不可能的。

3 个答案:

答案 0 :(得分:2)

您需要点击https://www.yammer.com/api/v1/oauth/tokens.json。在Zapier博客上,此主题为covered。他们的博客将access_token指定为查询字符串参数,但不再支持。在授权标头上指定当前用户的访问令牌,如Yammer开发人员站点上所示。

答案 1 :(得分:2)

到目前为止,我发现的是: 由于某些跨域限制,SDK会在页面上创建隐藏的iframe,以充当代理桥,以使用用户主网络凭据并访问外部网络资源。 网络参数是拼图中的关键。

每当重新加载页面时,可以手动设置获取的令牌以进一步请求,从而避免登录窗口再次显示。

yam.platform.login({ network: '{your-permalink-goes-here}' }, function (data) {

    console.log('login-status: ',data)
    if(data.status ==='connected')
        yam.platform.request({
            url: "oauth/tokens.json"     
            , method: "GET"
            , success: function (tokens) { console.log('user-tokens:',tokens); }
            , error: function (err) { alert("There was an error with the request."); }
        });
})

然后对于下一个请求,setAuthToken就可以了。

yam.platform.setAuthToken('{the-token-goes-here}'))

答案 2 :(得分:0)

如果您希望自己的应用在支持SSO的网络中运行,则需要全球化您的应用。为此,您需要向yammer帮助台提出一张票。

参考:yammer oauth2 returning 403 Client Error: Forbidden