天天一点点之laravel框架 - Laravel5.6 + Passport实现Api接口认证

 

1.首先经过 Composer 包管理器安装 Passport:php

composer require laravel/passport

注:若是安装过程当中提示须要更高版本的 Laravel:laravel/passport v5.0.0 requires illuminate/http ~5.6,能够经过指定版原本安装 composer require laravel/passport ~4.0html

 

2.注册服务提供者laravel

将 Passport 的服务提供者注册到配置文件 config/app.php 的 providers 数组中web

Laravel\Passport\PassportServiceProvider::class,

Laravel 5.5以后会自动注册服务提供者数据库

 

3.迁移数据库api

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」客户端用于生成访问令牌:session

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官网-API身份验证

  [ Laravel 5.6 文档 ] 安全系列 —— API 认证

相关文章
相关标签/搜索