ASP.NET Core MVC集成Cognito时登出功能报错排查
ASP.NET Core MVC集成Cognito登出重定向失败排查方案
核心问题分析
你的登出逻辑已移除登录Cookie,但Cognito重定向失败,即使回调地址已在AWS配置中,问题大概率出在回调地址的精确匹配或ASP.NET Core中间件的路径处理逻辑上,以下是具体排查和解决步骤:
1. 确保Cognito登出URL与回调地址完全精确匹配
Cognito对登出回调URL的校验是严格精确匹配,包括是否包含末尾斜杠:
- 你调试的重定向URI是
https://localhost:7085,如果AWS控制台应用客户端的"登出URL"配置的是https://localhost:7085/(带斜杠),两者会被判定为不同地址,导致重定向失败。 - 解决方法:
要么把代码中的回调地址改为带斜杠的格式:
要么在AWS Cognito的登出URL列表中同时添加带斜杠和不带斜杠的地址。var baseUri = $"{Request.Scheme}://{Request.Host}/";
2. 使用框架辅助方法生成回调路径,避免手动拼接
手动拼接的baseUri可能不符合ASP.NET Core OpenIdConnect中间件对回调地址的要求,原始代码使用Url.Page("/")生成的是符合规范的根路径(自动包含斜杠和正确的路由信息)。
- 推荐修改代码:
public IActionResult SignOut() { // 针对MVC控制器用Url.Action生成根路径 var callbackUrl = Url.Action("Index", "Home", null, Request.Scheme); // 如果是Razor Pages项目,保留原始的Url.Page("/") // var callbackUrl = Url.Page("/", pageHandler: null, values: null, protocol: Request.Scheme); return SignOut( new AuthenticationProperties { RedirectUri = callbackUrl }, CookieAuthenticationDefaults.AuthenticationScheme, OpenIdConnectDefaults.AuthenticationScheme ); }
3. 检查OpenIdConnect中间件的登出配置
确认Program.cs/Startup.cs中的OpenIdConnect配置已正确设置登出回调相关参数,且该地址在Cognito的登出URL列表中:
services.AddAuthentication(options => { options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme; }) .AddCookie() .AddOpenIdConnect(options => { // 其他Cognito配置(Authority、ClientId等)... options.PostLogoutRedirectUri = "https://localhost:7085/"; options.SignedOutRedirectUri = "https://localhost:7085/"; });
内容的提问来源于stack exchange,提问作者BENBUN Coder
相关产品推荐
相关产品推荐

