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

时间:2021-07-08 12:44:27

标签: azure azure-active-directory azure-ad-b2c openid-connect azure-ad-b2c-custom-policy

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

我知道这是 B2C 的设计,它没有完全清除社交帐户。

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

如果用户使用 AD 帐户登录公共计算机,这似乎存在安全风险。 可以做些什么来完全注销 AD 用户?我对其他社交会议结束感到满意。

1 个答案:

答案 0 :(得分:0)

与 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,从而正确地结束了会话