如何在 Laravel Passport 中使用 PKCE 为授权代码授予创建客户端?

时间:2021-03-12 22:58:19

标签: laravel oauth-2.0 client laravel-passport

我正在尝试在 Laravel Passport 中使用 PKCE ** 流程实现 **Authorization Code Grant。 Its documentation 说我必须使用这个命令:

php artisan passport:client --public

那很好,但我必须手动完成,我想自动创建这些客户端,我的意思是,为我的用户提供一个仪表板,他们可以在其中创建他们的客户端。为此,我需要从我的前端通过 Ajax(或 fetch)调用 Laravel Passport 的某个端点,它允许我创建 PKCE 客户端,但我不知道哪个端点调用。

Laravel Passport 提供了 POST /oauth/clients 端点来创建客户端,但这只能创建授权代码授予客户端(没有 PKCE),我不知道如何指定创建 PKCE 客户端(密码授予令牌的问题相同)客户)。

我在 Laravel Passport's Client Controller 中搜索,发现无法指定我想要的客户端类型,这是 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's Client Model 中搜索,我意识到,通过模型,我可以指定我想要为该客户提供什么样的赠款:

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

因此,必须有一种方法可以为任何类型的赠款(如 PKCE)创建客户端,但我不知道如何。

我应该覆盖 Laravel Passport 的客户端控制器吗?我该怎么做?我知道我可以使用该模型在自己的端点中创建自己的客户端,但我想保留 POST /oauth/clients 路由,因此我需要覆盖 Laravel Passport 的客户端控制器,但我不知道如何,你能帮我吗?

0 个答案:

没有答案
相关问题