Google OAuth2获取access_token后调用用户信息接口返回401错误求助
问题排查与解决方案
- 先校验授权&兑换token环节的scope配置:你在跳转Google授权页、用code兑换access_token这两个环节传入的
scopes参数,必须包含用户信息相关的授权范围,至少要有https://www.googleapis.com/auth/userinfo.profile或者https://www.googleapis.com/auth/userinfo.email,如果缺少对应scope,拿到的access_token天然没有调用用户信息接口的权限,会返回401。 - 核对code兑换token的必填参数:兑换token时必须传入
grant_type: "authorization_code",同时redirect_uri参数必须和你申请一次性code时传入的redirect_uri完全一致,字符级完全匹配,多一个尾斜杠、参数顺序不同都会导致兑换到的token无效。 - 验证access_token本身的有效性和传递格式:
- 先打印你拿到的
access_token变量值,确认没有误取refresh_token,也没有多余的空格、换行符等脏字符 - 优先使用v3版本的用户信息接口
https://www.googleapis.com/oauth2/v3/userinfo,低版本接口存在兼容问题 - 用curl直接测试验证:
curl -H "Authorization: Bearer 替换为你的access_token" https://www.googleapis.com/oauth2/v3/userinfo,不要将token放在查询字符串中传递,Google当前已逐步废弃该传参方式,仅支持Authorization头传值
- 先打印你拿到的
- 确认token未过期:如果拿到token后间隔了一段时间才调用接口,需注意默认有效期为3599秒,过期后需要用refresh_token兑换新的access_token再调用接口。
内容的提问来源于stack exchange,提问作者Igor Shmukler
相关产品推荐
相关产品推荐

