React+Spring Boot集成Google社交登录获取用户数据遇未授权错误
解决Google OAuth2后端调用userinfo接口未授权问题
排查与修复方案
1. 验证access_token有效性与权限范围
- 先用命令行直接测试token是否可用:
如果返回未授权,说明token本身存在问题,优先排查前端获取逻辑。curl https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token=你的token值 - 确认前端
react-oauth/google的scope参数必须包含基础权限,同时加上Gmail API所需权限:
缺少<GoogleLogin clientId="你的客户端ID" scope="openid email profile https://www.googleapis.com/auth/gmail.readonly" // 其他配置项 />openid或用户信息权限会导致userinfo接口拒绝访问。
2. 核对Google Cloud控制台配置
- 检查OAuth客户端ID类型:前端需用「Web应用」类型,确保JavaScript来源、授权回调地址配置正确。
- 确认授权同意屏幕状态:测试阶段必须添加测试用户,否则非项目所有者的授权请求会触发权限限制。
- 启用必要API:在Google Cloud API库中,确保
Google People API(userinfo接口依赖)和Gmail API已启用,未启用会直接返回未授权。
3. 优化后端调用逻辑
- 避免直接拼接token到URL,改用请求头传递,防止编码或安全问题:
HttpHeaders headers = new HttpHeaders(); headers.setBearerAuth(accessToken); HttpEntity<String> entity = new HttpEntity<>(headers); ResponseEntity<String> response = restTemplate.exchange( "https://www.googleapis.com/oauth2/v1/userinfo?alt=json", HttpMethod.GET, entity, String.class ); - 排查是否有代理、防火墙拦截请求,导致请求头被篡改或无法到达Google服务器。
4. 调试token详细信息
- 调用tokeninfo接口查看token的权限、受众等关键信息:
重点检查curl https://oauth2.googleapis.com/tokeninfo?access_token=你的token值scope字段是否包含所需权限,aud字段是否与你的客户端ID匹配——aud不匹配意味着token是为其他客户端生成的,无法用于当前后端调用。
内容的提问来源于stack exchange,提问作者umesh
相关产品推荐
相关产品推荐

