Laravel Passport调用API始终返回"Unauthenticated"问题求助
解决Laravel Passport API认证返回"Unauthenticated"的问题
结合你描述的情况——能成功获取token,但携带Bearer头访问/api/v1/user时返回未认证,以及更新的报错信息League\OAuth2\Server\Exception\OAuthServerException: The resource owner or authorization server denied the request.(根源是Missing "Authorization" header),咱们一步步排查解决:
1. 先确认请求头的正确性
这是最常见的出错点:
- 检查ARC里的
Authorization头拼写是否完全正确,注意是大写开头的Authorization(虽然HTTP头不严格区分大小写,但部分工具/服务器可能对大小写敏感) - 严格遵循格式:
Bearer 你的token内容,Bearer和token之间必须有一个空格,很多人会漏掉这个空格导致验证失败 - 临时修改路由,打印服务器收到的请求头,确认Authorization是否真的传达到后端:
如果打印结果里没有Route::group(['prefix' => 'v1', 'middleware' => 'auth:api'], function(){ Route::get('/user', function( Request $request ){ dd($request->header()); // 打印所有请求头,查看Authorization字段是否存在 return $request->user(); }); });Authorization,说明请求头没传对,或者被工具/服务器拦截了。
2. 检查Laravel核心配置
- 确认
config/auth.php里的api守卫配置正确,指定使用passport驱动:'guards' => [ 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ], - 检查CORS配置:如果是跨域请求,确保
config/cors.php里允许携带Authorization头:
否则浏览器会拦截这个头,导致后端收不到。'allowed_headers' => ['Content-Type', 'Authorization'],
3. 排查服务器(Nginx/Apache)配置
如果用Nginx作为Web服务器,默认情况下它不会把Authorization头传递给PHP-FPM,需要在站点配置里添加:
fastcgi_param HTTP_AUTHORIZATION $http_authorization;
添加后重启Nginx,再测试请求。
4. 验证Token的有效性
- 确认你获取token的授权方式和验证逻辑匹配:比如用密码授权模式生成的token,要确保对应的客户端存在且未被禁用
- 可以在Laravel项目里执行Artisan命令,查询token状态:
// 替换成你的token内容对应的ID $token = \Laravel\Passport\Token::where('id', '你的token_id')->first(); dd($token->valid(), $token->expires_at); // 查看token是否有效、是否过期
按照这个顺序排查,应该能定位到问题所在——从你的报错信息来看,优先检查请求头的传递和服务器是否能接收到Authorization头,这大概率是核心原因。
内容的提问来源于stack exchange,提问作者Kasnady
相关产品推荐
相关产品推荐

