我有一个登录功能,用户可以通过其 Microsoft 帐户登录网站。
使用 HttpContext 类,我尝试使用 SignOutAsync 注销用户。我遇到的问题是,当我在 Edge 中执行此操作时它可以工作,但是当我尝试在私人窗口、Chrome 和 Firefox 中注销时,它不会将我注销。
[HttpGet("Logout")]
public async Task<IActionResult> Logout()
{
await this.HttpContext.SignOutAsync();
return RedirectToAction("Login", "Account");
}
[Authorize(AuthenticationSchemes = OpenIdConnectDefaults.AuthenticationScheme)]
[HttpGet("Login")]
public async Task<IActionResult> Login()
{
return Redirect(this.homepageLink);
}
我尝试了 SignOutAsync 的不同重载,例如放置 CookieAuthenticationDefaults.AuthenticationScheme 和 OpenIdConnectDefaults.AuthenticationScheme,期望它能够解决问题,但最终并没有发生。
如果我遗漏了任何可以帮助解决此问题的信息,我可以提供更多详细信息。
根据您的设置,您需要确保退出正在使用的所有不同架构。这是我使用的一个例子。它首先删除 cookie,然后使用 OIDC 的众所周知的功能通过重定向到我的 SSO 应用程序来执行全局 lout。如果您使用 OIDC,则无需在客户端上添加任何额外代码即可使用。
public IActionResult Logout() => SignOut("Cookies", "oidc");