我正在开发一个从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的回应中。
所以......
更新
遵循Brian的建议:
GET https://www.yammer.com/api/v1/oauth/tokens.json
)中传递当前令牌Bearer: xxxxxxxxx
user_id
都不同。我不知道这是另一个用户,还是同一个用户对每个网络都有不同的user_id
。 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中存在错误,否则这是不可能的。
答案 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帮助台提出一张票。