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

无托管UI下Amplify与OpenID Connect联合身份认证失败求助

问题排查与解决建议

针对你遇到的NotAuthorizedException: Invalid login token. Not a valid OpenId Connect identity token错误,以下是几个可能的原因和对应的解决方法:

1. 过期时间计算错误

你的代码中expires_at的计算逻辑有误:

expires_at: user.exp * 1000 + new Date().getTime()

user.exp本身就是令牌的过期时间(Unix时间戳,单位为秒),转成毫秒只需要乘以1000即可,加上当前时间会导致过期时间被错误放大,让Cognito判定令牌无效。修改为:

expires_at: user.exp * 1000

2. 身份提供商名称不匹配

Auth.federatedSignIn中传入的提供商名称,必须和你在Cognito用户池里配置的OIDC身份提供商的提供商名称(不是显示名称)完全一致(大小写敏感)。比如如果Cognito里配置的是小写line,这里传入'LINE'就会匹配失败,导致令牌验证不通过。

3. 令牌类型或格式问题

确认liff.getIDToken()返回的是OIDC标准的ID Token:

  • 用jwt.io解码令牌,检查typ字段是否为ID Token,Cognito只接受OIDC的ID Token,而非Access Token;
  • 确保令牌的iss(颁发者)字段和你在Cognito OIDC配置里填写的Issuer URL完全一致,包括协议(https://)和结尾是否带斜杠。

4. Cognito OIDC配置验证

检查Cognito用户池的OIDC身份提供商配置:

  • 确认授权范围包含openid(必须勾选,否则LINE不会返回标准的ID Token);
  • 确认ID Token签名验证处于启用状态,Cognito需要验证令牌的签名有效性,若LINE的JWKS端点无法被Cognito访问或配置错误,会导致令牌验证失败。

5. Amplify federatedSignIn调用格式错误

Amplify的Auth.federatedSignIn针对自定义OIDC提供商,推荐使用对象参数的调用方式,而非分开传递参数。修改你的调用代码:

const cred = await Auth.federatedSignIn({
  provider: 'LINE',
  token: token,
  expires_at: user.exp * 1000
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 03:15:15