天天一點點之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 認證

相關文章
相關標籤/搜索