Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/windows-phone-8/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Microsoft graph api Azure AD身份验证未按预期用于移动设备_Microsoft Graph Api_Botframework_Microsoft Teams - Fatal编程技术网

Microsoft graph api Azure AD身份验证未按预期用于移动设备

Microsoft graph api Azure AD身份验证未按预期用于移动设备,microsoft-graph-api,botframework,microsoft-teams,Microsoft Graph Api,Botframework,Microsoft Teams,我已经使用为Microsoft Team tab-(angular application)构建了一个身份验证系统,它在桌面(应用程序和浏览器)上运行良好,但当我尝试在移动应用程序上运行时,然后按身份验证(见下图)按钮,在登录后将我带到登录弹出窗口,并返回到同一验证页面 现在,当我第二次尝试它时,它会将我放在我想要的页面上,但缺少数据,而且响应速度也不如预期 以下从iOS设备上截取的屏幕截图将进一步提供帮助:我使用的是版本:2.4.0 桌面视图: 主要查询: Azure AD()身份验证是

我已经使用为Microsoft Team tab-(angular application)构建了一个身份验证系统,它在桌面(应用程序和浏览器)上运行良好,但当我尝试在移动应用程序上运行时,然后按
身份验证
(见下图)按钮,在登录后将我带到登录弹出窗口,并返回到同一验证页面

现在,当我第二次尝试它时,它会将我放在我想要的页面上,但缺少数据,而且响应速度也不如预期

以下从iOS设备上截取的屏幕截图将进一步提供帮助:我使用的是版本:2.4.0

桌面视图:

主要查询:

  • Azure AD()身份验证是否不适用于移动设备

  • 如果我切换到Single sign-on(),使用它是否有任何限制,以及它是否支持所有平台

  • Azure AD()身份验证是否不适用于移动设备
  • 它应该在移动设备上工作

  • 如果我切换到Single sign-on(),使用它是否有任何限制,以及它是否支持所有平台
  • 单点登录无法解决任何问题,因为如果失败,您必须退回到默认的身份验证流

    看起来这是一个角度问题,而不是微软的认证问题。 这个问题很有趣,因为从第二次尝试开始,它一般都是有效的

    我认为这可能是同步的问题,当代码的某些部分在Angular区域之外运行,但试图对Angular区域中的变量执行某些操作时

    我不知道microsoftTeams.getContext和microsoftTeams.authentication.authentication是如何工作的,但是它们是异步的,如果使用setInterval/setTimeout,它们肯定会在你的应用程序之外工作。 如果他们在你的角度变量中设置数据,你就会遇到你描述的问题

    在我看来,情况就是这样:

  • 您正在单击“验证”按钮,一切正常。您被重定向、验证并重定向回最终页面
  • 在最后一页,你的应用程序正在尝试将你的令牌保存到本地角度变量中
  • 设置标记的代码在Angular之外工作,Angular没有看到此更改。因此,从angular的角度来看,没有任何变化,您仍然没有经过身份验证
  • 你的应用程序正在将你重定向到你的私人页面,Angular没有看到令牌并将你重定向回身份验证页面
  • 再次单击auth,您将在您的私人页面上完成身份验证,但没有apiKey和UserID(与令牌具有相同的问题)

  • 因此,要解决此问题,您需要使用ChangeDetectorRef.detectChanges手动通知angular。或者使用NgZone包装您的异步代码。运行

    是,要在移动客户端上为您的选项卡工作,您需要确保使用的是Team JavaScript SDK的1.4.1或更高版本。记住,(1)传递给MicrosoftTeam的URL。authentication.authenticate()是身份验证流的起始页。在本例中为/tab auth/simple start。这应该与您在Azure AD应用程序注册门户中注册的内容相匹配。(2) 身份验证流必须从域中的页面开始。此域也应列在清单的validDomains部分。否则将导致出现一个空的弹出窗口。(3) 未能使用microsoftTeams.authentication.authenticate()将导致在登录过程结束时弹出窗口无法关闭的问题。我最初使用的是
    ChangeDetectorRef.detectChanges
    现在我用
    NgZone包装了我的身份验证逻辑。运行
    ,它在所有平台上都能正常工作。