【问题标题】:Logout Redirect with Azure B2C and .NET Core使用 Azure B2C 和 .NET Core 进行注销重定向
【发布时间】:2024-05-16 22:25:01
【问题描述】:

请耐心等待,因为我对 Azure B2C 还很陌生。我的问题是,当我注销 Azure B2C 身份验证的应用程序时,我似乎无法设置注销重定向 uri。

一些背景信息,该应用是一个带有剃须刀页面的 .NET 核心 Web 应用,并且在创建项目时通过 Visual Studio 中的帮助工具设置了身份验证。

我可以看到生成的默认注销按钮使用 asp 控制器“帐户”和 asp 操作“SignOut”访问标题为“AzureADB2C”的 asp 区域。所有这些都隐藏在我的解决方案中似乎无法访问的 B2C 库中。

我尝试创建自己的注销按钮,删除身份验证 cookie,然后向 Microsoft 发送注销请求并附加重定向 URL,但这似乎不起作用。

这是创建项目时提供的默认注销

<a class="nav-link text-dark" asp-area="AzureADB2C" asp-controller="Account" asp-action="SignOut">Sign out</a>
        </li>

后端方法我尝试删除身份验证 cookie 并重新重定向,但不起作用。

public async Task<RedirectResult> OnPostLogout()
        {
            foreach (var cookieKey in Request.Cookies.Keys)
            {
                Response.Cookies.Delete(cookieKey);
            }

            return new RedirectResult(https://MyApp.azurewebsites.net/.auth/logout?post_logout_redirect_uri=https%3A%2F%2Fgoogle.com);
        }

当我尝试自己的注销按钮时,重定向似乎不起作用。

【问题讨论】:

    标签: c# azure .net-core azure-ad-b2c


    【解决方案1】:

    虽然将用户定向到 end_session_endpoint 会清除用户在 Azure AD B2C 中的部分单点登录状态,但它不会将用户从用户的社交身份提供程序 (IDP) 会话中注销。如果用户在后续登录期间选择了相同的 IDP,他们将被重新验证,而无需输入他们的凭据。如果用户想要退出您的 B2C 应用程序,并不一定意味着他们希望完全退出他们的 Facebook 帐户。但是,对于本地帐户,用户的会话将正常结束。

    当您想要让用户退出应用程序时,仅清除应用程序的 cookie 或以其他方式结束与用户的会话是不够的。将用户重定向到 Azure AD B2C 以注销。如果您不这样做,用户可能无需再次输入其凭据即可重新对您的应用程序进行身份验证。

    您可以简单地将用户重定向到 OpenID Connect 元数据文档中列出的 end_session 端点:

    GET https://fabrikamb2c.b2clogin.com/fabrikamb2c.onmicrosoft.com/oauth2/v2.0/logout?
    p=b2c_1_sign_in
    &post_logout_redirect_uri=https%3A%2F%2Faadb2cplayground.azurewebsites.net%2F
    
    https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/v2.0/.well-known/openid-configuration?p=b2c_1_sign_in
    

    请参阅下面的文档以获取更多参考

    https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-reference-oidc#send-a-sign-out-request

    希望对你有帮助。

    【讨论】:

    • 感谢您的建议和文章链接。这是否意味着我不应该在注销时进行自定义重定向?例如,如果用户退出我的应用程序,我不应该让退出的重定向将他们带回登录页面吗?
    【解决方案2】:

    您没有指定您的 B2C 租户是设置为允许“社交”身份提供者(例如 Google、Facebook 等)还是只允许 B2C 租户中内置的本地身份提供者。外部 IdP 会增加一些重大问题。

    无论如何,在注销时,您应该重定向到 Microsoft 的 documentation 页面上指定的 URL,这与您尝试的不同:

    https://fabrikamb2c.b2clogin.com/fabrikamb2c.onmicrosoft.com/oauth2/v2.0/logout?p=b2c_1_sign_in&post_logout_redirect_uri=https%3A%2F%2Faadb2cplayground.azurewebsites.net%2F
    

    由于注销机制是基于浏览器的,您可以使用浏览器的开发工具或 Fiddler 轻松查看是否正确重定向。

    【讨论】:

      最近更新 更多