Laravel 10 Passport客户端认证失败(OAuthServerException)求助
Laravel 10 Passport 客户端认证失败问题排查
问题描述
新建Laravel 10 REST API项目,严格按照Passport文档配置,调用createToken生成个人访问令牌时出现Client authentication failed错误,错误栈指向PersonalAccessGrant的客户端验证环节。已尝试重置数据库、重新安装Passport、切换端口,问题仍未解决。
错误信息
"message": "There was some internal error", "result": null, "exception": { "message": "Client authentication failed", "file": "/var/www/html/vendor/league/oauth2-server/src/Exception/OAuthServerException.php", "line": 154, "code": 4, "trace": [ { "file": "/var/www/html/vendor/league/oauth2-server/src/Grant/AbstractGrant.php", "line": 199, "function": "invalidClient", "class": "League\\OAuth2\\Server\\Exception\\OAuthServerException", "type": "::" }, { "file": "/var/www/html/vendor/laravel/passport/src/Bridge/PersonalAccessGrant.php", "line": 21, "function": "validateClient", "class": "League\\OAuth2\\Server\\Grant\\AbstractGrant", "type": "->" }, { "file": "/var/www/html/vendor/league/oauth2-server/src/AuthorizationServer.php", "line": 201, "function": "respondToAccessTokenRequest", "class": "Laravel\\Passport\\Bridge\\PersonalAccessGrant", "type": "->" } ] }
登录函数代码
$credentials = $request->only(['email', 'password']); $validation = $this->validate($request, [ 'email' => 'required|email', 'password' => 'required' ]); if (!auth()->attempt($credentials)) { return $this->apiResponse( [ 'success' => false, 'message' => 'Unauthorized', 'alerts'=> ["type"=>"error","message"=>"Your Email address or Password is wrong"] ], 401 ); } /* ------------ Create a new personal access token for the user. ------------ */ $tokenData = auth()->user()->createToken('Personal Access Client'); $token = $tokenData->accessToken; $expiration = $tokenData->token->expires_at->diffInSeconds(Carbon::now());
解决方案
检查并创建Personal Access Client
运行命令创建个人访问客户端:php artisan passport:client --personal执行完成后,确认
oauth_clients表中存在name为Personal Access Client的记录,且secret字段不为空。配置.env参数
将上述客户端的id和secret填入.env文件:PASSPORT_PERSONAL_ACCESS_CLIENT_ID=你的客户端ID PASSPORT_PERSONAL_ACCESS_CLIENT_SECRET=你的客户端Secret执行命令清除配置缓存:
php artisan config:clear验证Passport安装完整性
- 确认用户模型(如
App\Models\User)引入了HasApiTokenstrait:use Laravel\Passport\HasApiTokens; class User extends Authenticatable { use HasApiTokens, HasFactory, Notifiable; // ... } - 确认
AuthServiceProvider的boot方法中注册了Passport路由:use Laravel\Passport\Passport; public function boot() { $this->registerPolicies(); Passport::routes(); // ... } - 确认
config/auth.php中API guard的驱动设置为passport:'guards' => [ 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ],
- 确认用户模型(如
显式指定客户端ID生成令牌
在调用createToken时,显式传入Personal Access Client的ID,避免自动匹配失败:$tokenData = auth()->user()->createToken( 'Personal Access Client', [], // 权限范围(可选) env('PASSPORT_PERSONAL_ACCESS_CLIENT_ID') );清除所有缓存
执行以下命令清除各类缓存:php artisan cache:clear php artisan route:clear php artisan view:clear
内容的提问来源于stack exchange,提问作者Talhak
相关产品推荐
相关产品推荐

