详解Laravel5.6 Passport实现Api接口认证

详解Laravel5.6 Passport实现Api接口认证

在上线的Web应用中,如何保证用户使用的安全性?通常我们需要考虑到用户的认证。在很多情况下,应用对外提供了API接口,我们需要在每个请求中都进行认证,才能保证数据的安全性。这篇文章将通过Laravel的Passport套件充分讲解如何实现API接口认证,为我们的应用增加认证安全性。

安装Passport

先使用composer进行安装Passport:

composer require laravel/passport

安装完基础套件后,我们需要进行数据库迁移和配置

数据库迁移

执行数据库迁移命令:

php artisan migrate

配置

Passport的配置代码都在 config/auth.php 文件中,我们需要增加几个Provider来完成设置。在 providers 数组中添加:

'users' => [
    'driver' => 'eloquent',
    'model' => App\User::class,
],

'clients' => [
    'driver' => 'eloquent',
    'model' => Laravel\Passport\Client::class,
],

'personal_access_tokens' => [
    'driver' => 'eloquent',
    'model' => Laravel\Passport\PersonalAccessClient::class,
],

这意味着要让Passport为我们的应用程序处理用户身份验证和所有Oauth2的客户端。我们还需要执行Passport的安装命令:

php artisan passport:install

这个命令将会自动生成Client ID和Client Secret,并将所有的令牌相关的数据表迁移到您的数据库中。

现在您可以在 app/User 模型中使用 HasApiTokens Trait 来开始给用户发个人访问令牌:

<?php

namespace App;

use Laravel\Passport\HasApiTokens;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;

    // ...
}

实现认证

现在我们来测试下如何使用Passport实现API接口认证。我们需要实现如下三种API认证方式:

  1. Passport API Token认证
  2. Passport基于Auth2的Password Grant认证
  3. Passport基于OAuth2的Implicit Grant认证

Passport API Token认证

API Token认证方式是一种简单的方式,适配已有的基于session的身份验证流程,并增加了一些API额外特点。

使用示例

使用postman进行测试,并添加Header:Authorization: Bearer {$API_TOKEN}

其中{$API_TOKEN}为我们之前创建的个人访问令牌

Passport基于Auth2的Password Grant认证

Password Grant认证方式旨在通过API使用OAuth2。可以在header中带上token或作为查询参数传递。当然也可以在表单以post方式以密码方式(password grant)实现。

使用示例

使用postman进行测试,并向/oauth/token路径post以下数据:

{
    grant_type: 'password',
    client_id: '{$client_id}',
    client_secret: '{$client_secret}',
    username: '{$username}',
    password: '{$password}',
    scope: '',
}

其中:

  • {$client_id}{$client_secret}都可以从/oauth/clients中获取到
  • {$username}{$password}分别为测试用户的用户名和密码

Passport基于OAuth2的Implicit Grant认证

Implicit Grant认证方式是一个尽可能简单的OAuth2认证。当用户可以直接从用户代理(浏览器)中获取令牌时,他们很有用。例如通过前端的登录页面进行的登录后,直接以token方式传给后台。

使用示例

使用postman进行测试,在请求的路径添加以下查询参数:

/oauth/authorize?client_id={$client_id}&redirect_uri={$redirect_uri}&response_type=token&scope=

其中:

  • {$client_id}{$redirect_uri}都需要设置为已有的oauth客户端

结论

使用Laravel Passport可以为我们的应用程序增加安全认证。这个教程中我演示了如何使用Passport实现三种API认证方式,希望会为大家带来帮助。

参考资料

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Laravel5.6 Passport实现Api接口认证 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • redis分布式锁的实现

    一.正常加锁 当两个用户同时注册一个用户名时,为保证用户名不能重复,因此对其注册的用户名加锁。 具体步骤: 获得用户注册的用户名,进行判断,如果为空则对其进行加锁,保存到数据库,释放锁资源。   二.线程出现阻塞 当A线程加锁后出现阻塞时,导致数据还没有存到数据库,锁的时间便会失效。 B线程便会执行,对数据进行加锁,成功后保存到数据库,而这时A线程启动,将数…

    Redis 2023年4月10日
    00
  • 详解MySQL数据库之触发器

    详解MySQL数据库之触发器 简介 触发器是MySQL数据库中的一种特殊的存储过程,是一种与表事件相关的代码块,可以在数据的插入、更新、删除等事件中被自动触发执行。触发器可以对数据的修改进行限制和控制,可以用来实现强制数据一致性、数据审核等功能。 创建触发器 使用CREATE TRIGGER关键字来创建一个触发器: CREATE TRIGGER trigge…

    database 2023年5月21日
    00
  • 详解.NET中使用Redis数据库

    详解.NET中使用Redis数据库 在.NET项目中,Redis数据库是一种常用的高效、可靠的NoSQL数据库。本攻略将详细讲解.NET中使用Redis数据库的完整流程,包括Redis的安装、配置,以及.NET与Redis的交互方法。 安装Redis Redis的安装十分简单直接。可以下载官方版Redis并按照默认安装路径安装,也可以使用包管理工具进行安装。…

    database 2023年5月22日
    00
  • oracle 函数

    什么是 Oracle 函数 Oracle 函数是一种用来封装可重复使用的SQL代码片段的方法。它向用户和应用程序提供了一种自定义的、可重用的函数库。 创建 Oracle 函数 可以使用以下语法来创建 Oracle 函数: CREATE [OR REPLACE] FUNCTION function_name [ (parameter_name [IN | OU…

    database 2023年5月21日
    00
  • SQL 累计求和

    SQL累计求和是指在查询结果中对某一列数据进行累加求和的操作。下面将详细讲解SQL累计求和的完整攻略,包含两条实例。 1. 使用SUM()函数实现累计求和 SUM()函数是用于对某一列数据进行求和操作的函数。使用SUM()函数可以轻松地实现SQL累计求和的功能。下面是一个实例: 实例一 假设有一个订单表,包含如下数据: order_id | customer…

    database 2023年3月27日
    00
  • 详解MySQL使用GROUP BY分组查询

    MySQL中GROUP BY语句用于将数据行按照一个或多个列进行分组,然后对每个组进行聚合计算。在GROUP BY语句中,可以使用聚合函数对每个组进行计算,例如SUM、AVG、MAX、MIN、COUNT等。 以下是GROUP BY语句的一般语法: SELECT column1, column2, …, aggregate_function(column_…

    MySQL 2023年3月9日
    00
  • Mysql避免重复插入数据的4种方式

    下面是Mysql避免重复插入数据的4种方式的完整攻略,包含示例说明。 1.使用UNIQUE约束 可以在建表的时候,指定某个字段为UNIQUE,这样当插入数据的时候,如果该字段的值已经存在,则会插入失败,进而避免重复插入。 示例: 假设我们要创建一张用户表,其中email字段需要保证唯一,可以这样定义: CREATE TABLE user ( id INT(1…

    database 2023年5月19日
    00
  • DBMS 中的候选键

    候选键(Candidate Key)指在一张关系表中,能唯一的标识每一个元组的属性或属性集合。换句话说,候选键是一组属性,其唯一地确定一个关系中的每一行,没有重复行。候选键和主键的概念非常相似,不同的是,一张表可能存在多个候选键,但只能有一个主键。本文将详细解释DBMS中的候选键,包括定义、特性、举例和应用场景。 1. 定义 在一个关系表中,候选键是一组属性…

    database 2023年3月27日
    00
合作推广
合作推广
分享本页
返回顶部