Amazon Cognito令牌签名无效报错求助:密钥长度需至少256位
解决思路
针对你遇到的invalid_token_signature: The secret length must be at least 256 bits报错,核心问题是身份提供商(IdP)用于签名令牌的密钥长度不达标,而非用户池客户端的secret,以下是具体排查和解决步骤:
检查公司IdP的签名密钥配置
- 确认IdP用来签名JWT的密钥规格:如果是HMAC算法(如HS256),密钥长度必须≥256位(32字节);如果是RSA算法(如RS256),密钥对长度至少2048位。很多IdP默认的短密钥(比如1024位RSA、16字节HMAC密钥)会触发这个错误。
- 重新生成符合长度要求的密钥,更新到IdP的配置中,同时同步到Cognito的IdP集成设置里(比如更新SAML元数据、刷新OIDC的JWKS端点)。
验证Cognito与IdP的密钥同步状态
- 若用OIDC协议,手动访问IdP的JWKS端点,检查返回的密钥参数(如
alg对应算法、kty密钥类型、密钥长度相关字段)是否符合要求,确保Cognito能获取到最新的合法密钥。 - 若用SAML协议,检查IdP提供的元数据文件中的签名证书,确认其密钥长度≥2048位,替换旧证书到Cognito的IdP配置项中。
- 若用OIDC协议,手动访问IdP的JWKS端点,检查返回的密钥参数(如
修正用户池客户端的secret配置
- 这个报错和客户端secret无关,但要注意:如果你的应用是SPA、移动端这类公开客户端,Cognito不应该设置client_secret,设置后反而可能引发流程异常;只有后端服务这类机密客户端才需要配置Cognito生成的client_secret(Cognito生成的secret长度默认达标)。
- 对应调整Amplify配置:公开客户端移除
clientSecret字段,机密客户端确保配置的secret是Cognito生成的正确值,之后重新测试认证流程。
确认令牌签名算法兼容性
- 检查IdP使用的签名算法是否在Cognito支持的列表内,且算法对应的密钥长度要求已满足。比如Cognito支持RS256、HS256,但HS256必须搭配256位以上的密钥,RS256需要2048位以上的RSA密钥对,不匹配的话会触发签名验证失败。
开启日志定位细节
- 打开Cognito用户池的CloudWatch日志(在用户池配置的「高级安全设置」中开启),查看更详细的错误日志,明确是IdP令牌的签名密钥还是其他环节的密钥不达标,进一步缩小排查范围。
内容的提问来源于stack exchange,提问作者K.Fanedoul
相关产品推荐
相关产品推荐

