每天一点点之laravel框架 - Laravel5.6 + Passport实现Api接口认证
1.首先通过 Composer 包管理器安装 Passport:
composer require laravel/passport
注:如果安装过程中提示需要更高版本的 Laravel:
laravel/passport v5.0.0 requires illuminate/http ~5.6
,可以通过指定版本来安装composer require laravel/passport ~4.0
。
2.注册服务提供者
将 Passport
的服务提供者注册到配置文件 config/app.php
的 providers
数组中
Laravel\Passport\PassportServiceProvider::class,
Laravel 5.5之后会自动注册服务提供者
3.迁移数据库
php artisan migrate
注:如果你不想使用 Passport 的默认迁移,需要在
AppServiceProvider
的register
方法中调用Passport::ignoreMigrations
方法。你可以使用php artisan vendor:publish --tag=passport-migrations
导出默认迁移。
部署 Passport
第一次部署 Passport 到生产服务器时,可能需要运行 passport:keys
命令。这个命令生成 Passport 需要的加密 keys 以便生成访问令牌,生成的 keys 将不会存放在源代码控制中:
php artisan passport:keys
4.创建生成安全访问令牌(token)所需的加密键
需要运行 passport:install
命令,该命令将会创建生成安全访问令牌(token)所需的加密键,此外,该命令还会创建「personal access」和「password grant」客户端用于生成访问令牌:
php artisan passport:install
生成记录存放在数据表 oauth_clients
:

5.运行完这个命令后,添加 Laravel\Passport\HasApiTokens
trait 到 App\User
模型,该 trait 将会为模型类提供一些辅助函数用于检查认证用户的 token 和 scope:
<?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;
}
6.接下来,你需要在 AuthServiceProvider
的 boot
方法中调用 Passport::routes
方法,该方法将会为颁发访问令牌、撤销访问令牌、客户端以及私人访问令牌注册必要的路由:
<?php namespace App\Providers; use Laravel\Passport\Passport;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
]; /**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies(); Passport::routes();
}
}
7.最后,在配置文件 config/auth.php
中,需要设置 api
认证 guard 的 driver
选项为 passport
。这将告知应用在认证输入的 API 请求时使用 Passport 的 TokenGuard
:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
], 'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],
密码授权令牌
OAuth2 密码授权允许你的其他第一方客户端,例如移动应用,使用邮箱地址/用户名+密码获取访问令牌。这使得你可以安全地颁发访问令牌给第一方客户端而不必要求你的用户走整个 OAuth2 授权码重定向流程。
创建密码发放客户端
在应用可以通过密码授权颁发令牌之前,需要创建一个密码授权客户端,你可以通过使用带 --password
选项的 passport:client
命令来实现。如果你已经运行了 passport:install
命令,则不必再运行这个命令:
php artisan passport:client --password
这里我们使用一开始通过 passport:install
命令创建的记录作为测试记录。
请求令牌
创建完密码授权客户端后,可以通过发送 POST
请求到 /oauth/token
路由(带上用户邮箱地址和密码)获取访问令牌。这个路由已经通过 Passport::routes
方法注册过了,不需要手动定义。如果请求成功,就可以从服务器返回的 JSON 响应中获取 access_token
和 refresh_token
和通过授权码返回数据格式一致。
这里的username使用的是email,如果想要通过name、iphone来获取,需要在users模型中添加一下方法
// 允许passport通过这些字段找到你的用户实例
public function findForPassport($name)
{
$user = Users::where('name', $name)
// ->orWhere('phone', $name)
->orWhere('email', $name)
->first();
return $user;
}
注:记住,访问令牌默认长期有效,不过,如果需要的话你也可以配置访问令牌的最长生命周期。
友情链接:
[ Laravel 5.6 文档 ] 安全系列 —— API 认证
每天一点点之laravel框架 - Laravel5.6 + Passport实现Api接口认证的更多相关文章
- 基于swoole框架hyperf开发的纯API接口化的后台RBAC管理工具hyperfly@v1.0.0发布
hyperfly@v1.0.0发布 本文地址http://yangjianyong.cn/?p=323转载无需经过作者本人授权 github地址:https://github.com/vankour/ ...
- 每天一点点之laravel框架开发 - Laravel5.6去除URL中的index.php
在项目routes/web.php文件中添加了自定义的路由后,访问localhost/index.php/aaa,可以正常访问,但是去掉index.php后,提示404 Not Found 1. 按照 ...
- 每天一点点之laravel框架开发 - API通过access_token获取用户id报 Unauthenticated. 错误(passport)
1.首先保证你的config/auth.php 中 guards 的 api 的 driver 选项改为 passport 2.注册中间件,在 app/Http/Kernel.php 文件中的 $ro ...
- 每天一点点之laravel框架开发 - passport授权报invalid_credentials
{"error":"invalid_credentials","message":"The user credentials we ...
- Laravel 5.5 使用 Jwt-Auth 实现 API 用户认证以及刷新访问令牌
最近在做一个公司的项目,前端使用 Vue.js,后端使用 Laravel 构建 Api 服务,用户认证的包本来是想用 Laravel Passport 的,但是感觉有点麻烦,于是使用了 jwt-aut ...
- php的laravel框架使用心得
最近在做一项目,是基于laravel的后台api,用于与手机交互的,数据采用json格式.下面说下怎样在两周内把一个新框架或者语言用的得心应手. 项目采用laravel5.4+dingoapi+jwt ...
- 6个项目带你全面掌握Laravel框架
Laravel框架简介: Laravel是一套简洁.优雅的PHP Web开发框架(PHP Web Framework).它可以让你从面条一样杂乱的代码中解脱出来,帮你构建一个完美的网络APP,而且每行 ...
- laravel框架详解
一.基础篇 1.概念 Laravel是一个有着美好前景的年轻框架,它的社区充满着活力,同时提供了完整而清晰的文档,而且为快速.安全地开发现代应用提供了必要的功能.2011年,Taylor Otwell ...
- laravel框架基础(1)---入门与介绍
1.安装laravel5.7 (composer )2018-12-28 11:59:02 [作者:struggler] Php的版本要求:php>=7.1.3 打开php OpenSSL扩展 ...
随机推荐
- struts2--通配符映射
1.通配符映射: --规则: > 1)若找到多个匹配,没有通配符的优先: > 2)若指定动作不存在,struts2将会尝试把这个URI与任何一个包含着通配符*的动作名进行匹配: > ...
- shell和Makefile
一.shell基础 1.shell介绍 shell是操作系统的终端命令行 意义:快速的编译多个.c文件 shell是一类编程语言 常用shell语言:sh.bash.csh.ksh.perl.pyth ...
- 终于解决ERROR: PHP's 'ldap' extension is not installed/enabled. Please check your MR
我的系统是centos,php是yum的5.6.40,php-ldap也是yum的5.6.40,配置好ldap后,登录时提示ERROR: PHP's 'ldap' extension is not i ...
- pyhton机器学习入门基础(机器学习与决策树)
//2019.07.26#scikit-learn数据挖掘工具包1.Scikit learn是基于python的数据挖掘和机器学习的工具包,方便实现数据的数据分析与高级操作,是数据分析里面非常重要的工 ...
- dfs+记忆化搜索,求任意两点之间的最长路径
C.Coolest Ski Route 题意:n个点,m条边组成的有向图,求任意两点之间的最长路径 dfs记忆化搜索 #include<iostream> #include<stri ...
- SpringData JPA使用JPQL的方式查询和使用SQL语句查询
使用Spring Data JPA提供的查询方法已经可以解决大部分的应用场景,但是对于某些业务来说,我们还需要灵活的构造查询条件, 这时就可以使用@Query注解,结合JPQL的语句方式完成查询 持久 ...
- 最新获取 QQ头像 和 昵称接口
网上找来的测试可用... 获取QQ头像 http://q2.qlogo.cn/headimg_dl?bs=QQ号&dst_uin=QQ号&dst_uin=QQ号&;dst_ui ...
- 【剑指Offer】面试题34. 二叉树中和为某一值的路径
题目 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径.从树的根节点开始往下一直到叶节点所经过的节点形成一条路径. 示例: 给定如下二叉树,以及目标和 sum = 22, 5 / ...
- PE文件结构体-IMAGE_OPTIONAL_HEADER
typedef struct _IMAGE_OPTIONAL_HEADER { // // Standard fields. // WORD Magic; // 标志字, ROM 映像(0107h), ...
- MapReduce会自动忽略文件夹下的.开头的文件
MapReduce会自动忽略文件夹下的.开头的文件,跳过这些文件的处理.