Error: AADSTS50058: A silent sign-in request was sent but no user is signed in - Angular ADAL authentication issue in mobile safari browser

Error: AADSTS50058: A silent sign-in request was sent but no user is signed in - Angular ADAL authentication issue in mobile safari browser

我们有一个使用 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).

当 Safari 浏览器的 Prevent Cross-Site Scripting 选项关闭时,身份验证可以正常通过。我们还观察到,在其中一部 Samsung Galaxy S8+ 手机的 Chrome 浏览器中会出现此问题。知道这个问题的确切原因是什么以及补救方法是什么。

原因: 发生此错误是因为静默登录已发送到 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 以防止发生此错误。

请参考这个link

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

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

Disabling the option

确保您没有处于隐身模式。