开发公司【Laravel】Laravel的auth认证中间件的Api-token详细配置说明


文章目录

一、前言

开发公司用户认证在任何框架内开发公司都是很重要的一部分,开发公司为用户认证提供了丰富开发公司的实现方式,开发公司包括但不仅限于

  • session
  • token
  • jwt

开发公司本文将要解决以下问题:

  1. token开发公司的认证方式是如何配置的?
  2. api-token开发公司有什么不足
  3. 推荐哪个认证方式?

二、版本约定

  • Laravel 5.8
  • PHP 7.1

三、配置实现api-token

我们实现的token是api-token,最直观描述是,手动设置token值,自动校验token并返回用户表数据。

第一步,配置数据表。对于需要验证的数据表,对应的model要设置继承Authenticatable

use Illuminate\Foundation\Auth\User as Authenticatable;class User extends Authenticatable{
  • 1
  • 2
  • 3
  • 4

然后,需要在表中增加一列api_token,建议长度64以上。

第二步,修改config/auth.php

Laravel的auth配置可以理解为两层,guards->providers。相关的配置如下。

    'guards' => [        'api' => [            'driver' => 'token',            'provider' => 'user', //这里是下面的provider的名字            'hash' => false,        ],    ],    'providers' => [         'user' => [             'driver' => 'eloquent', //这里指向了model,也可以使用datebase直接指向数据表             'model' => App\Models\User::class,         ],    ],
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

第三步,业务上更新api_token

    public function updateTokenByUid($uid){        $token = hash('sha256', random_bytes(32)); //随机生成64位字符串        User::where('id', $uid)->update(['api_token' => $token]);        return $token;    }
  • 1
  • 2
  • 3
  • 4
  • 5

第四步,需要验证的控制器配置中间件。

这里我们需要注意的是,需要指定上面配置的guards的名字是api的auth。

routes/api.php

Route::resource('/profile', 'ProfileController')->middleware('auth:api');
  • 1

第五步,获取验证的auth数据。

在配置的控制器内,我们可以通过下面的方式拿到验证的身份。

$user = auth('api')->user();
  • 1

打印结果是对应数据表的model模型,我们就可以根据需要取出对应的用户数据。

api_token的请求方式支持几种,我们可以根据实际业务选择。

$response = $client->request('GET', '/api/user?api_token='.$token); //get$response = $client->request('POST', '/api/user', [ //post    'headers' => [        'Accept' => 'application/json',    ],    'form_params' => [        'api_token' => $token,    ],]);$response = $client->request('POST', '/api/user', [ //header    'headers' => [        'Authorization' => 'Bearer '.$token,        'Accept' => 'application/json',    ],]);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

有人就要问题,验证不通过怎么处理呢?如果没有通过验证,请求就会经过app/Http/Middleware/Authenticate.php,我们可以直接给出异常返回。

    protected function redirectTo($request)    {        if(! $request->expectsJson()){            ApiReturn::return([],ErrorCode::FORBIDDEN);            exit();        }    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

四、api-token的不足

api-token的验证显然是非常简单的,只需要自己管理用户表的api_token字段即可。

简单也是有代价的,显而易见的问题有

  • token的生成方式不受控制,有的开发人员的实现方式太简单会导致token不安全
  • token没有有效时间
  • token只能存在一条

五、推荐使用

为什么推荐jwt作为接口的验证方式呢?有以下几点。

  • jwt可以控制ttl,即token的有效期
  • jwt有严谨的结构,Header.Payload.Signature,更加安全
  • jwt通过算法分发token,不与数据库结构绑定

六、总结

Laravel通过auth中间件的形式处理中间件,我们可以轻松更换认证方式,使其满足业务需求。

对于接口验证,我更推荐使用jwt。

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发