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

Posted

技术标签:

【中文标题】Azure AD B2C:注销社交帐户(使用 OIDC 的 Azure AD)【英文标题】:Azure AD B2C : Log out of social account (Azure AD using OIDC) 【发布时间】:2021-09-18 22:27:57 【问题描述】:

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

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

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

如果用户使用 AD 帐户登录公共计算机,这似乎存在安全风险。 怎样才能完全退出 AD 用户?我可以接受其他社交活动的结束。

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于Azure AD B2C:注销社交帐户(使用 OIDC 的 Azure AD)的主要内容,如果未能解决你的问题,请参考以下文章

Azure B2C 自定义 - 更改“使用您的社交帐户登录”文本

会话超时后 Azure AD B2C 注销

使用 Azure AD B2C 在注册期间添加帐户 ID

如何在 Azure AD B2C 中管理用户流之间的单个帐户/会话

Azure AD B2C OpenID使用WS-Federation和SAML声明提供程序连接单一注销

在 Azure AD 中创建用户之前,是不是可以使用 Azure B2C 自定义策略验证来自社交身份提供商 (iDP) 的电子邮件声明?