使用Laravel Socialite stateless模式Google登录报401无效凭证如何解决
401无效凭证错误排查方案
该错误来自Google OAuth的用户信息接口返回,核心原因是你传递的认证凭证不被Google认可,可按以下顺序排查:
1. 优先校验access token本身有效性
- 直接用Postman或curl调用
https://www.googleapis.com/oauth2/v3/userinfo接口,请求头携带Authorization: Bearer 你获取到的token,如果直接调用也报错,说明token本身无效,和后端Socialite代码无关 - 确认前端/客户端传递的是已交换完成的access token,不是Google OAuth返回的授权码code,很多场景下会误把code当成token传给后端,导致校验失败
- 检查token有效期:Google的access token默认有效期仅1小时,过期的token调用接口必然返回401
- 确认申请token时的scope包含
openid profile email,权限不足的token无法调用用户信息接口
2. 检查Google OAuth配置
- 确认
config/services.php内的google配置项和Google Cloud控制台完全一致:client_id、client_secret没有拼写错误,回调地址和客户端申请token时填写的回调地址完全匹配,末尾多斜杠、域名不一致都会导致token校验失败 - 如果你用移动端SDK获取的token,确认后端使用的
client_id和移动端申请token用的client_id属于同一个Google Cloud项目,且应用类型匹配(例如Android端生成的token不能用Web端的client_id校验)
3. 代码层面排查
- 增加临时日志打印
$request->token的完整内容,确认参数没有被中间件篡改、没有多余空格或编码错误 - 可临时替换Socialite调用逻辑,直接手动请求接口校验问题是否出在Socialite封装层:
// 临时测试代码,替换原有Socialite调用部分 $response = \Illuminate\Support\Facades\Http::withToken($accessToken)->get('https://www.googleapis.com/oauth2/v3/userinfo'); if ($response->failed()) { dd($response->body()); } $userInfo = $response->json();
如果手动请求能正常返回用户信息,说明是Socialite配置缓存问题,执行php artisan config:clear清空配置缓存后重试即可。
内容的提问来源于stack exchange,提问作者Rose Riyadh
相关产品推荐
相关产品推荐

