在SharePoint Online中使用ADAL实现Yammer JS SDK身份验证
我确实帮不少客户实现过这两个场景,分享下实操经验:
1. Azure AD应用通过ADAL令牌调用Yammer API的成功案例
当然有成熟的落地案例,核心是把Azure AD令牌与Yammer API的权限体系对应起来,关键步骤如下:
- 权限配置核心:确保Azure AD应用已添加Yammer的委托权限(比如
User.Read、Group.Read.All等),并且完成了权限同意(租户级管理员同意会更顺畅,避免每个用户手动授权)。 - 令牌获取的关键参数:用ADAL获取令牌时,必须指定Yammer API的资源标识符为
https://api.yammer.com,否则令牌的受众(aud字段)不匹配,调用会直接失败。示例代码片段:
var authContext = new AuthenticationContext("https://login.microsoftonline.com/your-tenant-id"); authContext.acquireToken("https://api.yammer.com", "your-client-id", "https://your-redirect-uri", function(error, tokenResponse) { if (!error) { // 用获取到的token调用Yammer API fetch("https://api.yammer.com/api/v1/users/current.json", { headers: { "Authorization": `Bearer ${tokenResponse.accessToken}` } }) .then(res => res.json()) .then(data => console.log("当前Yammer用户信息:", data)); } });
- 避坑提示:部分旧版Yammer API端点不支持Azure AD令牌,尽量使用v1版本的最新端点;另外,调用某些需要管理员权限的Yammer接口时,要确保当前用户本身拥有Yammer的对应管理员权限。
完全可以实现,核心是利用用户已有的SPO登录会话,通过MSAL/ADAL的静默令牌获取能力,无需用户重复输入密码。实操要点:
- 应用注册配置:在Azure AD中注册应用时,把重定向URI设置为你的SPO站点URL(比如
https://contoso.sharepoint.com/sites/your-team-site),同时添加Yammer的委托权限并完成同意。 - SPO页面内的实现方式:可以通过SPFx WebPart集成,也可以在普通页面中注入脚本。示例静默获取令牌的代码(用MSAL.js):
const msalConfig = { auth: { clientId: "your-client-id", authority: "https://login.microsoftonline.com/your-tenant-id", redirectUri: "https://contoso.sharepoint.com/sites/your-team-site" } }; const msalInstance = new msal.PublicClientApplication(msalConfig); // 尝试静默获取令牌 msalInstance.acquireTokenSilent({ scopes: ["https://api.yammer.com/User.Read"], account: msalInstance.getAllAccounts()[0] }) .then(tokenResponse => { console.log("静默获取Yammer令牌成功", tokenResponse.accessToken); // 后续调用Yammer API逻辑 }) .catch(error => { // 静默失败(比如会话过期),触发交互式登录 if (error instanceof msal.InteractionRequiredAuthError) { msalInstance.acquireTokenPopup({ scopes: ["https://api.yammer.com/User.Read"] }) .then(popupToken => console.log("弹出登录获取令牌成功", popupToken.accessToken)); } });
- 限制说明:静默获取仅在用户当前有有效Azure AD会话(已登录SPO)时生效;如果SPO站点禁用了自定义脚本,需要先开启该权限才能注入代码。
内容的提问来源于stack exchange,提问作者Michael Armstrong
相关产品推荐
相关产品推荐

