使用Azure B2C和.NET Core登出重定向

时间:2019-07-03 16:07:47

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

因为我对Azure B2C相当陌生,所以请和我一起承受。我的问题是,注销从Azure B2C身份验证的应用程序时,似乎无法设置注销重定向uri。

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

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

我尝试创建自己的注销按钮,该按钮删除auth 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);
        }

当我尝试使用自己的注销按钮时,重定向似乎无效。

2 个答案:

答案 0 :(得分:0)

在将用户定向到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

希望有帮助。

答案 1 :(得分:0)

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

无论如何,在注销时,您都应重定向到Microsoft documentation页上指定的URL,该URL与您尝试的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正确重定向了。