如何在ASP.NET Core中阻止SignOutAsync登出后的自动重定向?
解决登出后自动重定向的问题
要实现登出后不进行任何重定向,需要从调用登出的代码和OIDC事件配置两方面修改:
1. 修改OIDC事件处理逻辑
在你的AddOpenIdConnect配置中,替换OnSignedOutCallbackRedirect事件的处理逻辑,直接返回成功响应而非执行重定向:
options.Events.OnSignedOutCallbackRedirect += context => { // 设置响应状态码为200,告知客户端登出成功 context.Response.StatusCode = StatusCodes.Status200OK; context.Response.ContentType = "application/json"; // 可根据业务需求返回自定义响应内容,比如JSON格式 return context.Response.WriteAsJsonAsync(new { Success = true, Message = "登出成功" }); };
2. 调整登出调用代码
调用SignOutAsync时,需要同时处理OIDC和Cookie认证方案,并通过AuthenticationProperties明确禁用默认重定向行为:
var authProperties = new AuthenticationProperties { // 清空重定向地址,避免触发默认跳转逻辑 RedirectUri = string.Empty }; // 先触发OIDC登出流程(通知身份认证服务端销毁会话) await _httpContextAccessor.HttpContext.SignOutAsync(OpenIdConnectDefaults.AuthenticationScheme, authProperties); // 再清除本地Cookie会话,确保客户端认证状态完全清除 await _httpContextAccessor.HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
逻辑说明
- 原配置中
OnSignedOutCallbackRedirect事件默认会执行重定向操作,修改后直接返回响应终止流程。 - 同时登出Cookie和OIDC方案,确保本地会话与身份认证服务端的会话都被销毁,避免残留认证状态。
内容的提问来源于stack exchange,提问作者Rajdip Busa
相关产品推荐
相关产品推荐

