【问题标题】:Laravel Passport - which grant to use for my users apps?Laravel Passport - 哪些授权可用于我的用户应用程序?
【发布时间】:2018-12-08 09:36:15
【问题描述】:

我有一个应用程序,用户可以在其中注册和添加他们自己的应用程序(网站、移动应用程序)。

对于这些应用程序中的每一个,我想授予对我的 API 的访问权限并允许从我的数据库中获取产品。

例如: 用户 X 在我的应用中注册,添加他的博客 user-X-blog.com 并获取访问令牌。接下来,他可以调用我的 API 并让一些产品显示在他的博客文章中。

我应该实施哪种授权以使基于 Laravel Passport 的 API 安全且有用(每个用户应用程序都有自己的令牌,无需用户登录即可进行 api 调用,长期令牌)?

为每个用户应用程序创建专用客户端并使用客户端凭据授予是个好主意吗?它对我来说看起来不太安全(或者我错了)。

【问题讨论】:

    标签: laravel authentication laravel-5 oauth-2.0 laravel-passport


    【解决方案1】:

    在您的情况下,我认为使用Personal Access Tokens 是最好的选择:

    每个注册并添加其博客文章的唯一用户都会获得一个唯一令牌:

    $user = App\User::find(1);
    
    // Creating a token without scopes...
    $token = $user->createToken('Token Name')->accessToken;
    
    // Creating a token with scopes...
    $token = $user->createToken('My Token', ['place-orders'])->accessToken;
    

    然后您可以发出请求并将令牌作为授权标头传递:

    $response = $client->request('GET', '/api/user', [
        'headers' => [
            'Accept' => 'application/json',
            'Authorization' => 'Bearer '.$accessToken,
        ],
    ]);
    

    您还可以在AuthServiceProviderboot 方法中为您的令牌设置lifetimes

    public function boot()
    {
        $this->registerPolicies();
    
        Passport::routes();
    
        Passport::tokensExpireIn(now()->addDays(15));
    
        Passport::refreshTokensExpireIn(now()->addDays(30));
    }
    

    【讨论】:

    • 个人访问令牌从不用于第三方访问
    【解决方案2】:

    根据您的要求,很明显第三方访问了您的 api。有两种方式允许第三方访问

    1. 传统的 oAuth (https://laravel.com/docs/5.6/passport#issuing-access-tokens)

    但如果您的客户的用户在您的系统中有帐户,则此方法适用。就像我们使用 facebook、google 等一样。

    1. 客户端凭据授予令牌 (https://laravel.com/docs/5.6/passport#client-credentials-grant-tokens) 这适用于机器对机器身份验证。

    您可以使用第二个选项。您可以做的是在您身边注册您的客户端并生成client IDclient secret,然后他们将使用此信息从他们的服务器向您的服务器进行身份验证,并且您的服务器返回访问令牌。无需客户端参与,之后他们的服务器或客户端都可以使用 accessToken 直接访问您的 api。

    希望它可以清除您的问题。

    【讨论】:

      猜你喜欢
      • 2019-05-19
      • 2020-03-13
      • 2020-06-26
      • 2013-10-07
      • 1970-01-01
      • 1970-01-01
      • 2019-03-31
      • 2018-08-27
      • 2020-04-08
      相关资源
      最近更新 更多