根据ASP.NET Core documentation,方法HttpContext.Authentication.SignOutAsync()
也必须删除身份验证cookie。
但事实并非如此!一切似乎都还好,尤其是。身份验证方案,因为用户正确登录并且使用cookie .AspNetCore。被建造。
知道为什么在用户发出提示后仍保留cookie吗?
最佳答案
您没有发布足够多的代码来讲述,但是我怀疑在调用SignOutAsync
之后,您具有某种重定向类型(例如RedirectToAction
),该重定向类型会将重定向覆盖到SignOutAsync
尝试发布的OIDC结束 session URL。
(有关重定向覆盖问题的相同解释,由Microsoft的HaoK提供给here。)
编辑:如果我上面的推测是正确的,解决方案是在带有最终AuthenticationProperties
的SignOutAsync
对象中发送重定向URL:
// in some controller/handler, notice the "bare" Task return value
public async Task LogoutAction()
{
// SomeOtherPage is where we redirect to after signout
await MyCustomSignOut("/SomeOtherPage");
}
// probably in some utility service
public async Task MyCustomSignOut(string redirectUri)
{
// inject the HttpContextAccessor to get "context"
await context.SignOutAsync("Cookies");
var prop = new AuthenticationProperties()
{
RedirectUri = redirectUri
});
// after signout this will redirect to your provided target
await context.SignOutAsync("oidc", prop);
}