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

Laravel Passport授权码模式无法获取Token问题求助

解决Laravel Passport授权码解密失败(invalid_request)问题

我在使用Laravel Passport的授权码模式换取Token时,按官方流程实现请求后返回以下错误:

"error": "invalid_request",
"error_description": "The request is missing a required parameter, includes an invalid parameter value, includes a parameter more than once, or is otherwise malformed.",
"hint": "Cannot decrypt the authorization code",
"message": "The request is missing a required parameter, includes an invalid parameter value, includes a parameter more than once, or is otherwise malformed."

请求代码如下:

$response = Http::asForm()->post('http://passport-app.test/sso/oauth/token', [
    'grant_type' => 'authorization_code',
    'client_id' => env('CLIENT_ID'),
    'client_secret' => env('CLIENT_SECRET'),
    'redirect_uri' => env('REDIRECT_URI'),
    'code' => $request->code,
]);

return $response->json();

排查及解决步骤

1. 核对客户端ID一致性

确保换取Token使用的client_id和生成授权码时的客户端ID完全匹配。授权码与生成它的客户端绑定,跨客户端使用会导致解密失败。可查看oauth_clients表确认客户端ID。

2. 统一加密密钥

Passport用服务端的APP_KEY加密授权码,若服务端APP_KEY变更,或客户端与服务端密钥不一致,都会触发解密失败。检查服务端.env的APP_KEY,确保和生成授权码时的密钥一致。

3. 验证授权码有效性

授权码默认10分钟有效期且仅能使用一次,过期或重复使用都会失效。重新发起授权流程获取新的授权码后再尝试请求。

4. 匹配重定向URI

请求中的redirect_uri必须与创建客户端时填写的重定向URI完全一致(包括协议、域名、路径,大小写敏感)。查看oauth_clients表的redirect字段,确保参数值完全匹配。

5. 检查授权码完整性

确认$request->code正确获取到了授权码,没有被转义、截断或为空。可以用dd($request->code)打印验证。

6. 确认Passport配置完整性

  • 确保已执行php artisan passport:install生成必要的加密密钥和客户端
  • 确认用户模型(如App\User)引入了Laravel\Passport\HasApiTokens trait
  • 检查config/auth.php中guards.api.driver是否设置为passport

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:55:12