根据ASP.NET Core documentation,方法HttpContext.Authentication.SignOutAsync()也必须删除身份验证cookie。

但事实并非如此!一切似乎都还好,尤其是。身份验证方案,因为用户正确登录并且使用cookie .AspNetCore。被建造。
知道为什么在用户发出提示后仍保留cookie吗?

最佳答案

您没有发布足够多的代码来讲述,但是我怀疑在调用SignOutAsync之后,您具有某种重定向类型(例如RedirectToAction),该重定向类型会将重定向覆盖到SignOutAsync尝试发布的OIDC结束 session URL。

(有关重定向覆盖问题的相同解释,由Microsoft的HaoK提供给here。)

编辑:如果我上面的推测是正确的,解决方案是在带有最终AuthenticationPropertiesSignOutAsync对象中发送重定向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);
}

09-05 00:59