Azure AD 身份验证无法按预期在移动设备上运行
Azure AD authentication not working as expected for mobile devices
我已经使用 Authentication for tabs using Azure Active Directory - Teams 为 Microsoft Teams 选项卡构建了一个身份验证系统 -(angular 应用程序)并且它在桌面(应用程序和浏览器)上工作正常但是当我尝试 运行 在移动应用程序上,然后按 Authenticate
(见下图)按钮,它会在登录后将我带到登录弹出窗口 returns 返回到相同的身份验证页面。
现在,当我第二次尝试时,它让我进入了我想要访问的页面,但缺少数据,而且响应速度不如应有的快。
以下从 iOS 设备截取的屏幕截图将对您有进一步的帮助:我的版本:2.4.0
桌面视图:
主要查询:
Azure AD (https://docs.microsoft.com/en-us/microsoftteams/platform/tabs/how-to/authentication/auth-tab-aad) 身份验证是否不适用于移动设备?
如果我切换到单点登录(https://docs.microsoft.com/en-us/microsoftteams/platform/tabs/how-to/authentication/auth-aad-sso),使用它是否有任何限制,它是否支持所有平台?
- Is the Azure AD (https://docs.microsoft.com/en-us/microsoftteams/platform/tabs/how-to/authentication/auth-tab-aad) authentication will not work for mobile devices?
它应该适用于移动设备。
- If I switch to a Single sign-on(https://docs.microsoft.com/en-us/microsoftteams/platform/tabs/how-to/authentication/auth-aad-sso) , are there any limitations to using it and also, will it support all the platforms ?
单点登录不能解决任何问题,因为如果失败,您必须回退到默认的身份验证流程。
看起来这是一个 angular 问题,而不是 Microsoft 的身份验证问题。
这个问题很有趣,因为一般来说它是有效的,但从第二次尝试开始。
我认为这可能是同步问题,当代码的某些部分 运行 在 Angular 之外但试图对 [=63= 中的变量做一些事情时]的区域。
我不知道 microsoftTeams.getContext 和 microsoftTeams.authentication.authenticate 可以工作,但它们是异步的,如果它们使用 setInterval/setTimeout,它们肯定会在您的 Angular 应用程序之外工作。
如果他们将数据设置到您的 angular 变量中,您将遇到您描述的问题。
所以这就是我认为发生的事情:
- 您正在单击授权按钮,一切正常,您将被重定向、验证并重定向回您的最终页面。
- 在最后一页上,您的应用正在尝试将您的令牌保存到本地 angular 变量中。
- 设置令牌的代码在 Angular 之外工作,Angular 看不到此更改。所以从 angular 的角度来看,什么都没有改变,你仍然没有通过身份验证。
- 您的应用正在将您重定向到您的私人页面,Angular 没有看到令牌并将您重定向回授权页面。
- <这里发生了一些事情,例如 ChangeDetectorRef.detectChanges,或其他同步事情>。
- 你再次点击验证,你最终在你的私人页面上通过了身份验证,但是没有 apiKey 和 UserID(与令牌有相同的问题)
因此,要解决此问题,您需要使用 ChangeDetectorRef.detectChanges 手动通知 angular 或包装您的异步代码为 NgZone.run.
我已经使用 Authentication for tabs using Azure Active Directory - Teams 为 Microsoft Teams 选项卡构建了一个身份验证系统 -(angular 应用程序)并且它在桌面(应用程序和浏览器)上工作正常但是当我尝试 运行 在移动应用程序上,然后按 Authenticate
(见下图)按钮,它会在登录后将我带到登录弹出窗口 returns 返回到相同的身份验证页面。
现在,当我第二次尝试时,它让我进入了我想要访问的页面,但缺少数据,而且响应速度不如应有的快。
以下从 iOS 设备截取的屏幕截图将对您有进一步的帮助:我的版本:2.4.0
桌面视图:
主要查询:
Azure AD (https://docs.microsoft.com/en-us/microsoftteams/platform/tabs/how-to/authentication/auth-tab-aad) 身份验证是否不适用于移动设备?
如果我切换到单点登录(https://docs.microsoft.com/en-us/microsoftteams/platform/tabs/how-to/authentication/auth-aad-sso),使用它是否有任何限制,它是否支持所有平台?
- Is the Azure AD (https://docs.microsoft.com/en-us/microsoftteams/platform/tabs/how-to/authentication/auth-tab-aad) authentication will not work for mobile devices?
它应该适用于移动设备。
- If I switch to a Single sign-on(https://docs.microsoft.com/en-us/microsoftteams/platform/tabs/how-to/authentication/auth-aad-sso) , are there any limitations to using it and also, will it support all the platforms ?
单点登录不能解决任何问题,因为如果失败,您必须回退到默认的身份验证流程。
看起来这是一个 angular 问题,而不是 Microsoft 的身份验证问题。 这个问题很有趣,因为一般来说它是有效的,但从第二次尝试开始。
我认为这可能是同步问题,当代码的某些部分 运行 在 Angular 之外但试图对 [=63= 中的变量做一些事情时]的区域。
我不知道 microsoftTeams.getContext 和 microsoftTeams.authentication.authenticate 可以工作,但它们是异步的,如果它们使用 setInterval/setTimeout,它们肯定会在您的 Angular 应用程序之外工作。 如果他们将数据设置到您的 angular 变量中,您将遇到您描述的问题。
所以这就是我认为发生的事情:
- 您正在单击授权按钮,一切正常,您将被重定向、验证并重定向回您的最终页面。
- 在最后一页上,您的应用正在尝试将您的令牌保存到本地 angular 变量中。
- 设置令牌的代码在 Angular 之外工作,Angular 看不到此更改。所以从 angular 的角度来看,什么都没有改变,你仍然没有通过身份验证。
- 您的应用正在将您重定向到您的私人页面,Angular 没有看到令牌并将您重定向回授权页面。
- <这里发生了一些事情,例如 ChangeDetectorRef.detectChanges,或其他同步事情>。
- 你再次点击验证,你最终在你的私人页面上通过了身份验证,但是没有 apiKey 和 UserID(与令牌有相同的问题)
因此,要解决此问题,您需要使用 ChangeDetectorRef.detectChanges 手动通知 angular 或包装您的异步代码为 NgZone.run.