2

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

现在我想切换到另一个网络并从中获取消息。我已经阅读了所有文档,特别是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 通过服务器端代码从外部网络获取消息?
  • 如何获取外部网络的令牌?

更新

按照布赖恩的建议:

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

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 应用程序的用户(我)。我在用着。除非我在该网络中,否则其他用户无法从外部网络获取消息。所以看起来他们正在使用我的令牌,但除非 API 中存在错误,否则这是不可能的。

4

3 回答 3

2

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

于 2014-03-24T16:20:29.433 回答
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}'))
于 2014-09-13T04:40:41.017 回答
0

如果您希望您的应用程序在启用 SSO 的网络中工作,您需要全球化您的应用程序。为此,您需要向 yammer 帮助台提出票证。

请参阅:yammer oauth2 返回 403 客户端错误:禁止

于 2015-05-29T07:35:53.517 回答