Laravel Passport发行多个令牌的良好做法

时间:2019-03-20 20:36:49

标签: laravel laravel-passport

我对 Laravel Passport 和管理api access_tokens的最佳方法有疑问。

当前,我们有:

  • grant_type: password发行且没有范围的令牌:
      $data = [
           'grant_type' => 'password',
           'client_id' => $client_id,
           'client_secret' => $client_secret,
           'username' => $user->email,
           'password' => $user->password,
           'scope' => '',
       ];
    
  • 这样创建的令牌,仅用于查看用户的图片
    $token = $user->createToken('User Picture token', ['view-picture'])->accessToken;
    

grant_type: password发行的第一个令牌仅用于获取个人用户信息。

这是一个好习惯吗?

我们要限制对资源的访问,如下所示: 包含具有特定范围的CRUD操作对其访问令牌 的“消息”资源。

因此,我们希望每种资源都受到不同的令牌和不同的范围的保护。

个人access_token是否用于?

这是正确的方法吗?

编辑1:

为了管理用户权限,我们使用Laravel中的Gates&Policies。

1 个答案:

答案 0 :(得分:0)

Laravel Passport使您能够在几分钟内实现完整的Oauth2服务器。这意味着,您可以挂载完整的服务器,不仅可以管理对自己应用程序的访问,还可以管理第三方应用程序的访问。

当我说“您自己的应用” 时,是指您和/或您的团队开发的应用。 “第三方应用” 是指由其他有权访问您的API的开发人员开发的应用。令牌范围是限制此第三方应用程序可以代表您的用户执行的操作的好方法。

以Facebook为例。如果您想通过Facebook在您的应用程序中实现访问权限,您的用户将需要允许您的应用程序访问其个人资料数据,以便检索其详细信息以有效地登录系统。

来自Passport documentation

  

令牌范围

     

范围允许您的API客户端在请求访问帐户的授权时请求一组特定的权限。例如,如果您正在构建一个电子商务应用程序,则并非所有的API使用者都需要具有下订单的能力。取而代之的是,您可以允许使用者仅请求访问订单发货状态的授权。换句话说,作用域允许您的应用程序的用户限制第三方应用程序可以代表他们执行的操作

现在,如果您的API仅由您的应用程序使用,我的意思是,如果您不打算向您的团队以外的任何人公开或公开您的API蓝图,您只需授权具有角色和权限的用户和/或实施Laravel Gates / Policies。

然后,您可以仅通过令牌来识别用户,并检查用户是否具有执行特定操作或访问某些数据(或部分数据)的正确权限/角色。