【问题标题】:Safari retaining AD B2C session after calling logout endpointSafari 在调用注销端点后保留 AD B2C 会话
【发布时间】:2022-02-19 01:35:05
【问题描述】:

我发现 Safari 存在一个问题,即使在注销后用户会话也会保留。请参阅以下步骤(由 SPA 调用的端点):

  1. 通过调用登录并提供凭据:

    获取 https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/authorize? client_id=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6 &response_type=id_token &redirect_uri=https%3A%2F%2Fjwt.ms%2F &response_mode=片段 &scope=openid &nonce={nonce}

一旦用户成功通过身份验证,他们将被重定向回应用程序,并带有一个 id 令牌,然后可以将其交换为访问令牌等。

在经过身份验证时,应用程序为用户提供了一个注销链接,使用该链接时将执行下一步..

  1. 通过将客户端重定向到:结束会话:

    GET https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/logout?post_logout_redirect_uri={appUrl}

然后用户被重定向回应用程序登录页面。

问题在于,如果用户随后再次登录(第一步),AD B2C 服务将使用 id 令牌将用户直接重定向回应用程序,而不要求他们再次登录。这仅在 Safari 中发生。它甚至在关闭浏览器并重新打开后也会发生。

这里有什么我遗漏的吗?我在这里关注文档:https://docs.microsoft.com/en-us/azure/active-directory-b2c/openid-connect#send-a-sign-out-request

【问题讨论】:

    标签: oauth-2.0 azure-ad-b2c


    【解决方案1】:

    如果用户使用本地帐户登录,则用户的会话将被清除,但如果他们使用社交身份,则可能不会退出。

    如果用户想要退出您的 B2C 应用,并不一定意味着该用户希望退出其外部身份提供商,例如 Google 或 Facebook。

    如果您将用户定向到 end_session_endpoint ,它将清除用户与 B2C 的一些单点登录状态,但不会将用户从用户的社交身份提供商 (IDP) 会话中注销。如果用户在后续登录期间选择相同的 IDP,则无需输入其凭据即可重新进行身份验证。

    查看OpenID Connect document

    (或)

    问题可能与 AzureAD 的 Safari 兼容性有关,Apple 可能无法正确地将 cookie 发送到 login.microsoftonline。

    如果您使用的是 ASP.NET Core Identity,请尝试通过以下方式禁用保护 使用以下代码配置 cookie

    services.ConfigureExternalCookie(options =>
    {
        // Other options
        options.Cookie.SameSite = SameSiteMode.None;
    });
    services.ConfigureApplicationCookie(options =>
    {
        // Other options
        options.Cookie.SameSite = SameSiteMode.None;
    });
    

    如果您使用没有 ASP.NET Core 身份的 cookie 身份验证 您可以使用以下代码关闭保护

    services.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
    {
        // Other options
        options.Cookie.SameSite = Microsoft.AspNetCore.Http.SameSiteMode.None;
    })
    

    参考资料:

    1. Configure session behavior - Azure Active Directory B2C | Microsoft Docs
    2. ios - Azure Active Directory Safari Redirection Issue - Stack Overflow
    3. active-directory-b2c/openid-connect#send-a-sign-out-request

    【讨论】:

    • 我正在从 SPA 向 B2C 登录和注销端点发出请求,因此不涉及 .NET,我可以在其中更改您提到的这些 cookie 选项。另外,IDP 是 AAD,所以我相信用户应该退出。这正如我在其他浏览器中所期望的那样工作,所以我怀疑这可能与 Apple 阻止 MS cookie 有关?
    【解决方案2】:

    终于找到了一个可行的解决方案。

    我现在使用的是 login.microsoftonline.com(不是 b2clogin.com),而不是在我的问题中使用登录和注销 URL。不确定我是否想这样离开,因为 MS 建议您从使用 login.microsoftonline.com 切换到 b2clogin.com

    现在登录目标:

    https://login.microsoftonline.com/{tenant}.onmicrosoft.com/oauth2/v2.0/authorize?client_id={clientId}&....
    

    现在注销目标:

    https://login.microsoftonline.com/{tenant}.onmicrosoft.com/oauth2/v2.0/logout?p={policy}
    

    【讨论】:

      猜你喜欢
      • 2018-08-10
      • 2017-05-02
      • 2021-04-02
      • 1970-01-01
      • 2020-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多