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

.NET 5集成AWS Cognito JWTBearer认证出现401重定向死循环问题

问题排查与修复方案

你的认证无限循环问题由3处核心配置错误共同导致,逐一修正即可恢复正常认证流程:


1. 客户端请求头与状态码判断逻辑错误

  • JWT Bearer认证默认读取的请求头字段为Authorization,你当前代码写的是Authentication,字段名不匹配会导致服务端完全无法获取到你传入的令牌,必然返回401。
  • 原有状态码判断逻辑将所有400以上的响应都触发登录跳转,400参数错误、403权限不足、500服务错误都会触发无意义跳转,进一步放大循环问题。

修正后的客户端代码:

// Token格式为 `Bearer ${实际获取到的accessToken值}`
fetch(config.getResourceUrl, {
  headers: {
    // 必须使用Authorization作为请求头键名
    Authorization: Token
  }
})
.then(res => {
  // 仅401未授权状态触发登录跳转
  if (res.status === 401) {
    window.location.replace("{Cognito UI地址}");
    return;
  }
  return res.json();
})

2. 服务端JWT Authority配置格式错误

你当前填写的Authority地址是Cognito托管UI的域名,不符合JWT中间件的要求:

  • JWT Bearer中间件需要从Authority地址拉取OpenID Connect元数据、令牌签名公钥完成校验,Cognito的合法Authority格式为https://cognito-idp.{区域标识}.amazonaws.com/{用户池ID},例如用户池位于美东1区、池ID为us-east-1_xxxxxx时,Authority值为https://cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxxx。

3. 服务端Audience配置错误

Cognito默认签发的Access Token的aud(受众)字段值为对应应用客户端的ID,不是你填写的本地服务地址http://localhost:5000,受众校验不匹配时服务端会直接判定令牌无效返回401。你需要将options.Audience的值替换为Cognito用户池中对应App Client的客户端ID。

修正后的服务端JWT配置代码:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        // 替换为实际的Cognito区域、用户池ID
        options.Authority = "https://cognito-idp.{区域标识}.amazonaws.com/{用户池ID}";
        // 替换为实际的Cognito应用客户端ID
        options.Audience = "{Cognito App Client ID}";
    });

额外校验点

你当前Configure方法中app.UseAuthentication()在app.UseAuthorization()之前的顺序是正确的,无需调整;控制器的[Authorize]特性默认使用JWT认证方案,配置修正后即可正常生效。修复后可以先手动解析获取到的AccessToken,确认iss、aud字段值与服务端配置完全一致,排除令牌本身签发错误的问题。

内容的提问来源于stack exchange,提问作者KOO

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:18:22