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

使用AWS Cognito用户池登录时缺失认证令牌问题求助

解决AWS Cognito登录报错"Missing Authentication Token"的问题

根据你的代码和描述,我整理了几个最可能导致这个错误的原因,你可以逐一排查:

1. Admin操作需要有效的IAM凭证

AdminInitiateAuthAsync属于Cognito的Admin级操作,这意味着你的AmazonCognitoIdentityProviderClient实例必须使用拥有对应权限的IAM用户凭证(Access Key ID和Secret Access Key)初始化,而不是普通用户的身份令牌。

检查你的AmazonUtils.IdentityClientProvider是否正确配置了:

  • 与用户池一致的AWS区域
  • 拥有cognito-idp:AdminInitiateAuth权限的IAM凭证

你可以参考这个方式初始化客户端:

var provider = new AmazonCognitoIdentityProviderClient(
    "your-access-key-id",
    "your-secret-access-key",
    RegionEndpoint.USEast1 // 替换成你的用户池实际区域
);

⚠️ 生产环境请避免硬编码凭证,建议使用AWS SDK的凭证链(比如环境变量、IAM角色等)来获取凭证。

2. AuthParameters的键名错误

使用ADMIN_NO_SRP_AUTH认证流程时,AuthParameters的键名必须是USERNAME和PASSWORD——哪怕你用邮箱作为用户名,也不能用email作为键名。你的代码里用了"email"作为键,这会导致Cognito无法识别用户名参数,进而引发认证异常。

修改你的登录代码:

authRequest.AuthParameters.Add("USERNAME", "test.user@email.com"); // 将键名从email改为USERNAME
authRequest.AuthParameters.Add("PASSWORD", "Password12!");

3. 应用客户端未启用ADMIN_NO_SRP_AUTH流程

登录AWS控制台,进入你的Cognito用户池,检查对应应用客户端的配置:

  • 路径:用户池 → 应用集成 → 应用客户端 → 点击你的客户端 → 滚动到「认证流程配置」
  • 确保ADMIN_NO_SRP_AUTH被勾选

如果未启用这个流程,Cognito会直接拒绝你的Admin登录请求。

4. 用户是否完成邮箱验证?

虽然当前错误提示和验证无关,但部分用户池配置会要求用户验证邮箱(或其他属性)后才能登录。你可以在AWS控制台的用户池用户列表中,查看该用户的「状态」是否为「已确认」。如果是「未确认」,可以通过以下代码让用户完成验证:

await userPool.ConfirmSignUpAsync(email, verificationCode, null);

额外提示:优先使用非Admin登录流程

如果只是普通用户登录场景,其实不需要使用Admin级的AdminInitiateAuthAsync,可以直接用CognitoUser的StartWithPasswordAuthAsync方法,这样不需要管理IAM凭证,更适合客户端应用:

var user = userPool.GetUser(email);
var authRequest = new InitiatePasswordAuthRequest
{
    Password = Password,
    AuthFlowType = AuthFlowType.USER_PASSWORD_AUTH
};
var authResponse = await user.StartWithPasswordAuthAsync(authRequest);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:53:19