You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:47:25