Azure AD B2C:注销社交帐户(使用 OIDC 的 Azure AD)

Azure AD B2C : Log out of social account (Azure AD using OIDC)

我有一个应用程序使用 B2C 让用户通过使用本地帐户或使用 Azure AD 帐户登录。 注销期间,本地会话被完全清除,但 AD 会话仍然存在。

我了解这是 B2C 的设计,它不会完全清除社交帐户。

但是,如果我使用 Azure AD 帐户登录到我的 b2c 应用程序,然后尝试注销,则使用全新的浏览器(清除所有 cookie 和缓存)。它是否还不能完全清除会话? 鉴于我还没有签署任何其他 AD 应用程序。

如果用户使用 AD 帐户登录 public 计算机,这似乎存在安全风险。 如何才能完全注销 AD 用户?我可以接受其他社交活动结束。

已与 Microsoft 确认无法从 b2c 应用程序完全清除外部 AD 登录的登录会话。这是因为 AD 登录(社交)在浏览器的 login.microsoftonline.com 域下创建了一个持久性 cookie。此 cookie 无法被 b2c 清除,因为它在不同的域下。

要清除持久性 cookie,您必须调用 login.microsoftonline.com 的注销端点:https://login.microsoftonline.com/common/oauth2/logout

在 b2c 应用程序中,注销方法如下所示:

 public ActionResult Logout()
    {
        if (Request.IsAuthenticated)
        {
            MsalAppBuilder.ClearUserTokenCache();
            IEnumerable<AuthenticationDescription> authTypes = HttpContext.GetOwinContext().Authentication.GetAuthenticationTypes();
            HttpContext.GetOwinContext().Authentication.SignOut(authTypes.Select(t => t.AuthenticationType).ToArray());
            Request.GetOwinContext().Authentication.GetAuthenticationTypes();
        }
        HttpContext.Response.Redirect("https://login.microsoftonline.com/common/oauth2/logout");
    
    }

这清除了 b2c 会话 cookie 以及 AD 登录 cookie,从而正确结束了会话