c# - 使用 Azure B2C 和 .NET Core 进行注销重定向

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

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

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

我可以看到生成的默认注销按钮使用 asp Controller “Account”和 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>

我尝试删除 auth cookie 和 reidrect 的后端方法不起作用。

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);
        }

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

最佳答案

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

当您想要让用户退出应用程序时,仅清除应用程序的 cookie 或以其他方式结束与用户的 session 是不够的。将用户重定向到 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://learn.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-reference-oidc#send-a-sign-out-request

希望有帮助。

关于c# - 使用 Azure B2C 和 .NET Core 进行注销重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56874202/

相关文章:

c# - 如何管理 PostAsync 调用时抛出的 AggregateException?

C#、JSON 解析、动态变量。如何检查类型?

azure - Microsoft Azure 中可用性集的可用区和故障域功能之间有什么区别?

c# - 我们可以从 C# 重新启动 Microsoft Azure 应用服务吗?

c# - Orleans grains 中的单线程

c# - Visual C# (Visual Studio) 和 Mono C# GUI 之间的区别

c# - 从 IHttpActionResult 响应中获取对象 c#

visual-studio - Azure/VS Code/Hive/HDInsight - 如何停止交互式查询

c# - 如何通过 FirebaseAdmin SDK 从自定义 token 获取 ID token ?

c# - WPF - 如何使用 VS Code 将构建操作设置为 'Resource"?