【问题标题】:How to organize such route protection using Laravel Passport?如何使用 Laravel Passport 组织这样的路由保护?
【发布时间】:2020-05-18 22:36:18
【问题描述】:

在我的 laravel 项目中,我使用 Laravel Passport PasswordClient Credentials Grant Tokens。

客户端凭据授予令牌

客户端凭据授予适用于机器对机器的身份验证。例如,您可以在通过 API 执行维护任务的计划作业中使用此授权。

此授权类型具有用于验证客户端凭据的中间件。

中间件路径

Laravel\Passport\Http\Middleware\CheckClientCredentials

通过在app/Http/Kernel.php 中注册这个中间件,我们可以保护我们的路由

use Laravel\Passport\Http\Middleware\CheckClientCredentials;

protected $routeMiddleware = [
    'client' => CheckClientCredentials::class,
];

路由保护示例

Route::get('/orders', function (Request $request) {
    ...
})->middleware('client');

我们可以通过请求获得任何授权类型的访问令牌:http://your-app.com/oauth/token

示例

$guzzle = new GuzzleHttp\Client;

$response = $guzzle->post('http://your-app.com/oauth/token', [
    'form_params' => [
        'grant_type' => 'client_credentials',
        'client_id' => 'client-id',
        'client_secret' => 'client-secret',
        'scope' => 'your-scope',
    ],
]);

return json_decode((string) $response->getBody(), true)['access_token'];

密码授予令牌

OAuth2 密码授权允许您的其他第一方客户端(例如移动应用程序)使用电子邮件地址/用户名和密码获取访问令牌。这使您可以安全地向您的第一方客户端颁发访问令牌,而无需您的用户完成整个 OAuth2 授权代码重定向流程。

通过Password Grant Client,我们可以授权我们的用户并使用auth:api 中间件保护授权路由。对于访问授权路由,我们必须将令牌设置为请求标头到access_token 字段。

路由保护示例

Route::get('/orders', function (Request $request) {
    ...
})->middleware('auth:api');

现在,当两种授权类型(Password Grant Tokens && Client Credentials Grant Tokens)都需要从标头字段access_token 访问令牌时,我如何保护我的路由?

类似的东西

Route::get('/orders', function (Request $request) {
    ...
})->middleware(['client', 'auth:api']);

当两个中间件都在等待来自 header 的一个字段 access_token 的令牌时,如何使用 Laravel Passport 组织这种保护?

【问题讨论】:

  • 您的要求并不是 100% 清楚。请您提供更多详细信息。
  • 好的@Rwd 现在我将编辑我的问题
  • @Rwd 我已经通过添加更多详细信息来编辑我的问题
  • @Andread Hunter 我认为您正在寻找的是 (filljoyner.com/2017/03/01/…) 作者分解了 client credentials grant (client middleware) 和 password 的路由授予(auth:api 中间件)。我目前对如何同时为两个中间件共享相同的资源有同样的问题。
  • 那篇文章对你有帮助吗? @xyfantis

标签: php laravel laravel-passport


【解决方案1】:

也许像这样??

Route::middleware(['client', 'auth:api'])->group(function(){
            Route::get(....);
        });

【讨论】:

    猜你喜欢
    • 2016-09-13
    • 2018-01-27
    • 2018-08-20
    • 2019-10-28
    • 2017-10-12
    • 2019-09-13
    • 2023-03-28
    • 2020-01-06
    • 1970-01-01
    相关资源
    最近更新 更多