iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 17
1
Modern Web

使用 Laravel 打造 RESTful API系列 第 17

Laravel 安裝 Passport 身分驗證

使用Laravel 8 PHP主流框架打造RESTful API(iT邦幫忙鐵人賽系列書)ISBN:9789864345304

本系列文章已集結成冊與鐵人賽文章差異內容,有以下幾點:

更新至Laravel 8、基礎的PHP重點筆記、加強製作API流程細節、加入程式設計模式,優化、重構程式碼的部分,並且於書籍前面的章節介紹Git。

讓您從製作第一個簡單的API到優化自己的程式碼,分享我的經驗給您,打造自己的最強大腦API,若有興趣的朋友可以參考看看

天瓏網路書局:
https://www.tenlong.com.tw/products/9789864345304


此篇文章同步發於個人部落格

安裝

composer require laravel/passport

安裝完成大致上會顯示差不多內容。

安裝完成

animal/composer.json 可以看到多了 passport

安裝完成

php artisan migrate

安裝完成

如上圖 Passport 會幫助我們加入相關的資料表,儲存客戶端和Access Token 相關資料表。

客戶端的意思是指,開發者的網站或其他介面要先來我們的API系統,取的一組客戶端的ID 以及 secret,才能在他們自己的網站向我們請求Token,獲取會員的權限。

有點像是白名單的意思,要在這個API系統內有紀錄的才可以對我們申請代表會員的Token。

就跟Facebook 的帳號,可以登入很多網站一樣。例如 FB 帳號可以登入 iT邦幫忙 道理一樣。

Token 這是驗證用戶的憑證,明天會詳細介紹今天先把 Passport 套件裝好!

查看一下資料庫狀態剛剛下 php artisan migrate 指令以後的資料庫,新增了五張表。

查看新增資料表

然後運行命令會創建加密需要公鑰以及私鑰,讓我們可以安全的產生 Access Token。

php artisan passport:install

passport:install運行結果

產生出來的公鑰、私鑰存放在 animal/storage 資料夾中

公鑰私鑰

除此之外,它也會直接幫我們建置客戶端用來產生 Access Token 的資料,新建了兩種客戶端資料 personal access和password grant。

id、secret 就是我們客戶端開發者要在他們的網站,或是其他軟體介面上(手機APP...)請求會員身份的token時需要提供的內容。

設定 Passport

基本內容都有了,接下來做一些設定,引用
Laravel\Passport\HasApiTokenstraitApp\User Model 中

use Laravel\Passport\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;
    
    //略過
}

這個 trait 會幫我們加入 Passport 寫好的方法。

接著 AuthServiceProvider 中的 boot 方法中調用 Passport::routes 方法。

use Laravel\Passport\Passport;

class AuthServiceProvider extends ServiceProvider
{
    public function boot()
    {
        $this->registerPolicies();

        Passport::routes();
    }
}

這個方法會註冊必要的路由去核發、換發、撤銷 Token以及請求客戶端的 id、secret 之類的路由,如下圖路由表顯示。

安裝Passport後的路由表

默認情況下,Passport發放的 Token 是有一年有效期的。

config/auth.php

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'passport', //<-修改這裡
        'provider' => 'users',
        'hash' => false, //這個是Laravel 5.8 出現的,他主要是可以讓 Token 再 SHA-256 保護存入資料表
    ],
],

需要認證的API請求時,系統會去使用 Passport 的TokenGuard。

hash 這裡先不調整,以存文字的方式把Token存入資料表就好! 如果設定 true 等於存入資料表中的 Token 在 SHA-256 加密保護。

無法反向解開 Token,請求 Token 時回傳 未加密的 Token,資料表儲存 SHA-256 加密後的副本,所以必須要求客戶端請求Token 後一定要牢牢記住,不然無法解開。另外默認情況下,Passport發放的 Token 是有一年有效期的。

安裝完成!結束今天這回合~


上一篇
加入會員認證、註冊帳號
下一篇
OAuth2 認證機制 Token 原理
系列文
使用 Laravel 打造 RESTful API30

尚未有邦友留言

立即登入留言