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

Laravel Passport如何通过API创建带PKCE的授权码授予客户端

实现场景

正在Laravel Passport中实现*带PKCE的授权码授予(Authorization Code Grant with PKCE)*流程,根据官方文档说明,需要执行以下命令创建客户端:
php artisan passport:client --public

手动执行该命令没有问题,但需要实现客户端的自动创建功能:计划给用户提供控制台页面,让用户可以自行创建自己的客户端。为此需要从前端通过Ajax(或fetch)调用Laravel Passport的端点来创建PKCE客户端,但暂时不清楚该调用哪个端点。

现存问题

Laravel Passport提供了POST /oauth/clients端点用于创建客户端,但这个端点只能创建普通授权码授予客户端(不带PKCE),不清楚该如何指定创建PKCE客户端,Password Grant Tokens客户端也存在同样的问题。

源码排查发现

查看Laravel Passport的客户端控制器源码后发现,原生逻辑无法指定想要的客户端类型,客户端控制器的store方法实现如下:

public function store(Request $request)
{
    $this->validation->make($request->all(), [
        'name' => 'required|max:191',
        'redirect' => ['required', $this->redirectRule],
        'confidential' => 'boolean',
    ])->validate();

    $client = $this->clients->create(
        $request->user()->getAuthIdentifier(), $request->name, $request->redirect,
        null, false, false, (bool) $request->input('confidential', true)
    );

    if (Passport::$hashesClientSecrets) {
        return ['plainSecret' => $client->plainSecret] + $client->toArray();
    }

    return $client->makeVisible('secret');
}

可以看到,客户端create()方法中部分参数是硬编码的,导致无法通过该JSON API创建其他类型的客户端。

另外查看Laravel Passport的客户端模型源码后发现,通过模型可以为客户端指定想要的授权类型,模型的类型转换配置如下:

protected $casts = [
    'grant_types' => 'array',
    'personal_access_client' => 'bool',
    'password_client' => 'bool',
    'revoked' => 'bool',
];

这说明肯定存在为任意类型授权流程(比如PKCE)创建客户端的方式,但目前不清楚具体实现路径。

待解决的困惑
  • 是否应该重写Laravel Passport的客户端控制器?具体该如何操作?
  • 已知可以使用客户端模型在自定义端点中创建自己的客户端,但希望保留POST /oauth/clients路由,因此需要重写Laravel Passport的客户端控制器,不清楚具体实现方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 23:06:00