You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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/(带斜杠),两者会被判定为不同地址,导致重定向失败。
  • 解决方法:
    要么把代码中的回调地址改为带斜杠的格式:
    var baseUri = $"{Request.Scheme}://{Request.Host}/";
    
    要么在AWS Cognito的登出URL列表中同时添加带斜杠和不带斜杠的地址。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 10:35:25