AWS Cognito调用/oauth2/token时遇unauthorized_client错误求助
我之前也踩过Cognito这个unauthorized_client的坑,明明勾选了授权码类型还是报错,咱们一步步来排查:
1. 确认应用客户端配置是否真的生效
有时候Cognito的配置保存会有延迟,或者可能你没点保存更改就离开了页面。重新进入你的应用客户端的「App client settings」页面,逐一核对:
- 「Authorization Code Grant」确实处于勾选状态
- 「Allowed OAuth Scopes」至少勾选了
openid(授权码流必须要有这个基础权限) - 回调URL
https://localhost和你请求里的redirect_uri完全一致——注意大小写、有没有多余的斜杠,比如不能是https://localhost/(末尾多了斜杠)
2. 检查授权码的有效性
授权码是一次性的,而且有效期只有5分钟。如果你之前用过这个code_uuid,或者它已经过期,也会返回这个错误。建议重新走一遍授权流程,获取新的授权码再发起请求。
3. 核对无密钥客户端的参数匹配
你创建的是无密钥应用客户端,要确认:
- 应用客户端的「Generate client secret」是未勾选状态
- 请求里不要加
client_secret参数(因为无密钥客户端不需要这个),你的curl请求里已经做到了这一点,这部分没问题,但要确保没有不小心添加这个参数。
4. 仔细验证请求参数的细节
再逐行检查你的curl命令:
curl -X POST https://{{user_pool_domain}}.auth.us-east-2.amazoncognito.com/oauth2/token \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'grant_type=authorization_code&redirect_uri=https%3A%2F%2Flocalhost&code={{code_uuid}}&client_id={{user_pool_client_id}}'
- 确认
user_pool_domain和user_pool_client_id替换成了实际的正确值,没有打错字符 - 确认授权时的
redirect_uri和请求里的完全一致——比如你跳转到授权页面时,URL里的redirect_uri参数是不是也是https://localhost?
5. 检查用户池域名是否生效
刚创建的Cognito用户池域名可能需要几分钟才能完成域名解析。你可以访问https://{{user_pool_domain}}.auth.us-east-2.amazoncognito.com/.well-known/openid-configuration,如果能正常返回JSON格式的配置信息,说明域名已经生效;如果返回404或者错误,等几分钟再重试。
如果以上都排查过还是有问题,建议删除当前应用客户端重新创建一个,有时候Cognito的客户端配置会出现奇怪的缓存问题,重新创建往往能解决。
内容的提问来源于stack exchange,提问作者TranquilMarmot
相关产品推荐
相关产品推荐

