错误:AADSTS50058:已发送无提示登录请求,但没有用户登录 - 移动 Safari 浏览器中的 Angular ADAL 身份验证问题

skA*_*low 6 safari cross-site adal angular

我们有一个使用 Angular 7 开发的站点,它使用 Adal-Angular4 库进行 Azure Active Directoty 身份验证。在 iPhone 上的 safari 中浏览该网站时,会遇到以下错误。

Error: AADSTS50058: A silent sign-in request was sent but no user is signed in. The cookies used to represent the user's session were not sent in the request to Azure AD. This can happen if the user is using Internet Explorer or Edge, and the web app sending the silent sign-in request is in different IE security zone than the Azure AD endpoint (login.microsoftonline.com).
Run Code Online (Sandbox Code Playgroud)

当Safari 浏览器的防止跨站点脚本选项关闭时,身份验证将顺利通过。我们还观察到,在其中一部三星 Galaxy S8+ 手机的 Chrome 浏览器中会出现此问题。知道这个问题的确切原因是什么以及修复它的方法是什么。

mun*_*zig 11

在隐身模式下通过 Chrome 浏览器访问我的 angular 应用程序时,我遇到了这个问题。默认情况下,它会在主页上通过切换来禁用第三方 cookie。我只是禁用了它,并没有再次遇到错误。

禁用该选项


小智 7

原因:发生该错误是因为向 login.microsoftonline.com 终结点发送了静默登录,但未检测到 AAD SSO cookie。此 cookie 确定用户是否已登录。静默登录仅适用于已知用户已登录或具有刷新令牌来交换新访问令牌的情况。

可能的解决方法 #1主动检查是否过期 您可以通过检查您是否拥有有效的 id 令牌来尝试防止此错误发生。如果您的 ID 令牌无效,您将要求用户重新登录。

可能的解决方法#2捕获错误并要求用户再次登录要解决此错误,您需要在回调中捕获此错误,您可以将其传递给acquiretoken ADAL JS 函数。如果出现 AADSTS50058 错误,您将要求用户再次登录。

可能的解决方法 #3禁用浏览器扩展 Cookie 阻止程序和第三方 Cookie 由于浏览器扩展阻止 cookie 以进行跟踪,某些用户可能会遇到此问题。这将导致发生此 AADSTS50058 错误,您需要在浏览器扩展中将 login.microsoftonline.com 端点列入白名单,以避免再次收到此错误。

如果您的浏览器中禁用了第三方 cookie,也会发生此错误。在您的浏览器中重新启用第三方 cookie 以防止发生此错误。

请参考这个链接


skA*_*low 4

除了“Raghavendra- MSFT Identity”在他的答案中提到的内容(可能的解决方案#2)之外,我们设法通过捕获 acquireToken 调用的错误,然后使用 acquireTokenRedirect 调用获取令牌来使其工作。它增加了一个重定向,但完成了这项工作。请注意,无论是使用 ADAL 还是 MSAL v1,这是我从我能做的任何研究中找到的唯一选择。MSAL v2 即 @azure/msal-browser 包,特别是基于带有 PKCE 的 OAuth 2.0 授权代码流,消除了对第三方 cookie 的任何需要,并且可以是一个合适的选项;但是,它目前处于 Beta 阶段,因此需要更多时间才能用于生产代码。