我正在尝试在 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 的客户端控制器,但我不知道如何,你能帮我吗?