MS Teams - 消息扩展 SSO - 声明

MS Teams - Messaging Extension SSO - Claims

我正在尝试为 Teams 中的消息传递扩展实施 SSO。我 运行 遇到的问题是缺少同意,User.Read.

我正在使用团队 SDK 通过消息传递扩展中的 microsoftTeams.authentication.getAuthToken 函数生成 ID 令牌,我将在服务器端交换它,但这不包括 User.Read 声明(所以用户不能同意它)我需要在以后的图形调用中使用它。我已经厌倦了将它添加到 AuthTokenRequest 中的“声明”属性,但它似乎没有做任何事情。

    microsoftTeams.authentication.getAuthToken({
      claims: ["https://graph.microsoft.com/user.read"],
      successCallback: (token: string) => {
        setToken(token);
      },
      failureCallback: (message: string) => console.log("Failed:", message)
    });

如果我按照此处找到的应用程序 SSO 示例进行操作,我确信 SSO 设置正确,因为它使用机器人消息工作:https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-sso/nodejs

在打开消息扩展程序之前要求用户登录也正确地请求同意 User.Read。我在服务器上使用的是 node.js,这使得该文档更难理解: https://docs.microsoft.com/en-us/microsoftteams/platform/messaging-extensions/how-to/enable-sso-auth-me

如能提供有关在消息扩展中执行 SSO 时如何获得 User.Read 声明的任何帮助,我们将不胜感激。

干杯

获得我需要的额外范围的唯一方法 (User.Read) 是让服务器 return 出现关于无效授权的特定错误。

当客户端出现此错误时,调用microsoftTeams.authentication.authenticate函数在弹出窗口中打开另一个页面window。

在此页面上,我使用 MSAL npm package 让用户同意 User.Read 权限

// There is more than just this call, but the documentation is pretty good
const request: RedirectRequest = {
    scopes: [`https://graph.microsoft.com/User.Read`],
    loginHint
};
msalClient.loginRedirect(request);

为了让它安静下来,我从团队上下文中获取了 loginHint 并将其传递给请求

microsoftTeams.getContext(context => {
    start(context.loginHint ?? "");
});