在我的应用程序中,我使用 Passport 进行身份验证。我创建了一个密码授权客户端,用于为我们的移动和网络应用程序生成访问令牌。
现在我必须添加一个可以访问我们的一些资源的第三方客户端。为此,我创建了一个客户端。
现在可以授权这个第三方客户端代表他访问资源的用户必须来到我们的网站并登录,然后需要授权才能获得授权码。这是我想在我们自己的网络应用程序中做的。为此,我需要创建一个 API,作为请求,我将接收 client_id、client_secret、grant_type、redirect_url、范围等并返回授权码。
但是我在任何地方都没有看到创建自定义 API 以生成授权代码的选项?
-- 编辑
https://laravel.com/docs/9.x/passport#approving-the-request
如前所述,Passport 将自动向用户显示一个模板,允许他们批准或拒绝授权请求
我们有自己的 SPA,不能使用 Passport 提供的模板。我们需要以某种方式覆盖它并创建一个 API,我们的 SPA 可以调用该 API 来创建或拒绝授权请求。
回答1
要为授权创建自定义 api,您需要覆盖 AuthServiceProvider.php 中的默认 Passport 路由
app/Providers/AuthServiceProvider.php
use Illuminate\Support\Facades\Route;
public function boot()
{
$this->registerPolicies();
Passport::routes();
Route::post('<route_you_want_to_override>', [
'uses' => '<YourCustomAuthorizationController@Method>',
'as' => 'passport.token',
]);
}
完成后确保清除路由缓存
php artisan route:clear
要覆盖 Passport 默认模板,您首先需要发布护照视图,以便在 resources/views/vendor/passport
路径中提供所需的视图,并且您可以修改所需的视图
php artisan vendor:publish --tag=passport-views
回答2
不久前,我们的应用也有类似的需求。
我们最终使用了护照 API 来满足我们的需求(通过密码授予),并且我们已经为我们的应用部署了 https://laravel.com/docs/9.x/sanctum最终用户/客户。对于客户而言,从 Sanctum 获取唯一令牌然后使用它进行 api 调用要简单/容易得多。
好的部分是您将拥有两个独立的系统,专用于两个不同的需求(您的和您的客户)。
希望这对您有所帮助。