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

Laravel 8 Passport API线上服务器出现Unauthenticated错误求助

Laravel Passport线上认证失败(Unauthenticated)解决方案

针对你遇到的本地正常、线上CentOS服务器Token生成正常但认证失败的问题,可按以下步骤排查解决:

1. 确保线上已生成Passport加密密钥

线上部署时必须执行Passport安装命令生成密钥文件,否则无法解析Token:

php artisan passport:install

执行完成后,检查storage目录下是否存在oauth-private.key和oauth-public.key,并确保这两个文件的权限正确(赋予Web服务器用户读写权限,比如针对Nginx:chown nginx:nginx storage/oauth-*.key)。

2. 修复Nginx的Authorization头传递问题

CentOS常用的Nginx默认会丢弃Authorization请求头,导致Passport无法获取Token。在你的站点Nginx配置中添加以下规则:

location / {
    try_files $uri $uri/ /index.php?$query_string;
    # 确保Authorization头传递到PHP
    fastcgi_param HTTP_AUTHORIZATION $http_authorization;
}

修改后重启Nginx服务:

systemctl restart nginx

3. 验证服务器是否接收到Authorization头

添加一个临时测试接口,确认请求头是否正确传递:

// 在api.php中添加
Route::get('/test-auth', function(\Illuminate\Http\Request $request) {
    dd($request->header('Authorization'), $_SERVER);
});

用Postman携带Bearer Token调用该接口,查看输出中是否包含Authorization字段。如果没有,说明Web服务器配置仍有问题,需重新调整。

4. 排查SELinux权限限制

CentOS 8默认开启SELinux,可能会阻止Laravel读取Passport密钥或写入日志。临时关闭SELinux测试:

setenforce 0

如果关闭后认证正常,说明是SELinux权限问题,给Laravel的storage目录添加正确的SELinux上下文:

chcon -R -t httpd_sys_rw_content_t /var/www/website/storage

5. 确认APP_KEY配置正确

如果线上.env文件中的APP_KEY与本地不一致,会导致Token解析失败。检查线上APP_KEY,若不一致,重新生成后需再次执行php artisan passport:install。

6. 检查Passport中间件配置

确认app/Http/Kernel.php的$routeMiddleware中已正确注册Passport的中间件:

protected $routeMiddleware = [
    // 其他中间件...
    'auth:api' => \Laravel\Passport\Http\Middleware\CheckClientCredentials::class,
];

内容的提问来源于stack exchange,提问作者Kin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 05:55:19