Node.js 无法在MS Team桌面应用程序上运行选项卡

Node.js 无法在MS Team桌面应用程序上运行选项卡,node.js,botframework,microsoft-teams,Node.js,Botframework,Microsoft Teams,我有MS团队的构建选项卡,并在桌面应用程序上显示此错误,如下所示 此外,这在其他所有平台(浏览器、移动应用程序)上都能正常工作 InteractionRequiredAuthError:AADSTS50058:已发送静默登录请求,但没有用户登录。用于表示用户会话的Cookie未在Azure AD请求中发送。如果用户正在使用Internet Explorer或Edge,并且发送静默登录请求的web应用程序位于与Azure AD端点(login.microsoftonline.com)不同的IE安全

我有MS团队的构建选项卡,并在桌面应用程序上显示此错误,如下所示

此外,这在其他所有平台(浏览器、移动应用程序)上都能正常工作

InteractionRequiredAuthError:AADSTS50058:已发送静默登录请求,但没有用户登录。用于表示用户会话的Cookie未在Azure AD请求中发送。如果用户正在使用Internet Explorer或Edge,并且发送静默登录请求的web应用程序位于与Azure AD端点(login.microsoftonline.com)不同的IE安全区域,则会发生这种情况。跟踪ID:f6450045-e435-4fa7-8dcb-b1e7da7f2300相关ID:b88afb3e-7b95-48fc-a68e-5875238dd1d3时间戳:2021-01-28 08:56:59Z


这里我们使用的是MSAL,静默身份验证

const tokenRequestObj = {
  scopes: ["user.read"],
  loginHint: loginHint,
};
this.msalService.acquireTokenSilent(tokenRequestObj) //get silent token using context.
  .then(async authTokenResult => {
    console.log(authTokenResult); //Got access token.
  }).catch((error) => {
    if (error.name === 'InteractionRequiredAuthError') {
      this.msalService.acquireTokenRedirect(tokenRequestObj)
    }
  });
this.msalService.handleRedirectCallback(this.authCallback);
这不是一个bug,而是一个特性

================您可以向下滚动到解决方案部分=======================

这是一个无聊的部分

让我来解释一下背景上发生了什么

首先调用msalService.acquireTokenSilent,它在背景上发挥了一些魔力,类似于:

  • 检查localStorage以查找可以获取的令牌。(Web应用程序级别)
  • 调用MSTeam应用程序Api并尝试从中获取令牌。(团队应用程序级别)
  • 从图中请求令牌(网络级)
  • 如果后台魔法不起作用,则意味着您必须登录用户并从OAuth获取令牌。这就是您看到此错误的原因:

    InteractionRequiredAuthError:AADSTS50058:已发送静默登录请求,但没有用户登录。用于表示用户会话的Cookie未在Azure AD请求中发送。如果用户正在使用Internet Explorer或Edge,并且发送静默登录请求的web应用程序位于与Azure AD端点(login.microsoftonline.com)不同的IE安全区域,则会发生这种情况。跟踪ID:f6450045-e435-4fa7-8dcb-b1e7da7f2300相关ID:b88afb3e-7b95-48fc-a68e-5875238dd1d3时间戳:2021-01-28 08:56:59Z

    下一步调用msalService.acquireTokenRedirect将用户重定向到login.microsoftonline.com,这就是问题所在

    你们看,Teams应用程序在不同的平台上以不同的方式工作。有4个平台:IOS、Android、Web和桌面

    IOS-在webview中打开选项卡/任务,没有重定向限制

    Android-在webview中打开选项卡/任务,没有重定向限制

    Web-在iframe中打开选项卡/任务,具有重定向限制(X-Frame-Options)

    桌面-在iframe中打开选项卡/任务,具有重定向限制(X-Frame-Options)。基本上桌面是一个电子应用,它承载着网络应用但它有弹出限制,我将在下面介绍

    您面临的问题与桌面平台有关

    =====================================================================================

    因此,您应该采取以下措施来解决此问题:

  • 仅对移动平台实施重定向
  • 避免在Web/桌面平台上重定向,而是使用msalService.acquireTokenPopup
  • 桌面应用程序不会打开弹出窗口(为什么是微软,为什么是微软?),而是将其转换为默认的操作系统浏览器(这是我上面提到的限制)。所以你必须自己处理
  • 下面是一个如何处理桌面弹出问题的示例:

  • 在后端创建会话
  • 通过websocket从桌面应用程序连接到后端会话
  • 等待来自websocket的数据
  • 当用户成功登录并重定向时,从重定向URI页面(在OS web浏览器中)向websocket发送数据

  • 请不要只是粘贴图像,而是引用错误消息以便搜索。您是否可以共享使用的身份验证方法,是否遵循“推荐的团队”选项卡sso?您的选项卡是否实现登录?您可以查看@JosVerlinde的以下代码,我们使用的是MSAL,静默身份验证。另外,我已经用这个方法更新了这个问题。你能检查一下吗?