每天一点点之laravel框架 - Laravel5.6 + Passport实现Api接口认证
Posted 我若亦如风
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每天一点点之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接口认证的主要内容,如果未能解决你的问题,请参考以下文章