11.26 laravel5.5安裝jwt-auth 生成token令牌的示例

laravel5.5安裝jwt-auth 生成token令牌的示例

1:首先通過composer進行安裝

composerrequiretymon/jwt-auth

laravel5.5安裝jwt-auth 生成token令牌的示例

2:添加服務提供者

編輯config/app.php,在"providers"添加:

'Tymon\\JWTAuth\\Providers\\JWTAuthServiceProvider',

laravel5.5安裝jwt-auth 生成token令牌的示例

3:添加Facades

編輯config/app.php,在"alias"添加:

'JWTAuth'=>'Tymon\\JWTAuth\\Facades\\JWTAuth',

'JWTFactory'=>'Tymon\\JWTAuth\\Facades\\JWTFactory',

laravel5.5安裝jwt-auth 生成token令牌的示例

4:發佈配置文件:

phpartisanvendor:publish--provider="Tymon\\JWTAuth\\Providers\\JWTAuthServiceProvider"

laravel5.5安裝jwt-auth 生成token令牌的示例

5:生成secretkey

:phpartisanjwt:generate

安裝完成後,執行phpartisanjwt:generate,會報錯:

(1).MethodTymon\\JWTAuth\\Commands\\JWTGenerateCommand::handle()doesnotexist

解決方法,這個需要修改源碼:

編輯vendor/tymon/jwt-auth/src/Commands/JWTGenerateCommand.php,新增:

laravel5.5安裝jwt-auth 生成token令牌的示例

(2)如果未添加服務提供者,直接執行該命令,可能也會報錯!

Therearenocommandsdefinedinthe"jwt"namespace

解決方法:

就是上面的添加服務提供者

配置(Configuration)

secret(secretkey)-秘鑰

用來簽名token的秘鑰。作者將秘鑰與Laravel的APP_KEY分開,以便開發者可以獨立地修改它們。

提供了一個artisan命令,為我們生成一個隨機秘鑰。(phpartisanjwt:generate)

ttl(tokentimetolive)-token生存時間

token的有效時間,以分鐘為單位。建議儘可能設置短點,尤其是當我們也使用token刷新機制。

refresh_ttl(refreshtimetolive)-refresh生存時間

可以刷新token的有效時間,以分鐘為單位。例如,如果設置為2周,那麼只能在2周內,刷新對應的token,否則將會拋出TokenExpiredException異常。如果超過了刷新的有效時間,必須生成一個全新的token,這意味著用戶需要重新登錄。

注:ttl和refresh_ttl,用於保持用戶的登錄狀態

algo(hashingalgorithm)-hash算法

用於簽名token的算法,保留默認值即可

user(usermodelpath)-用戶模型路徑

應該指向我們項目的User類的命名空間路徑

identifier(useridentifier)-用戶標識

從token的主題聲明中,根據什麼標識來檢索用戶(一般是id)

required_claims(requiredclaims)

這些聲明必須存在於token的payload中,否則將拋出TokenInvalidException異常(會檢測token的payload是否存在這些聲明)

blacklist_enabled(blacklistenabled)

如果設置為false,將無法使token失效。雖然我們仍然可以刷新令牌,但是之前的令牌仍舊有效,因此這樣做非常不安全。但對於非常簡單的實現,可能不需要額外的開銷(刷新token等),我們可以配置它。

providers

jwt-auth包已經有一些具體實現,可用來實現各種需求。只要遵循相關接口,我們就可以覆蓋這些具體實現。

providers.user

指定基於主題聲明,來查找用戶的實現。

providers.jwt

完成token的編碼和解碼的繁重工作

providers.auth

通過憑證或id來認證用戶

providers.storage

用於驅動黑名單,並存儲token直到過期。

創建tokens(CreatingTokens)

jwt-auth包為我們提供了創建token的多種方法。有簡單的方法,如果你想更好的控制,也有更進一步的方法。

開箱即用(outofbox),有許多必須的聲明,雖然這些都可以配置:

sub(Subject)-包含token的標識符(默認是用戶ID)

iat(IssuedAt)-token發佈時間(unix時間戳)

exp(Expiry)-token過期日期(unix時間戳)

nbf(NotBefore)-可以使用token的最早時間點(unix時間戳)

iss(Issuer)-token發佈者(默認為請求的url)

jti(JWTId)-token的唯一標識符(sub和iat聲明的md5值)

aud(Audience)-token的目標受眾(默認不需要)

創建一個基於用戶憑證的token

創建token的最常用方法是,通過用戶的登錄憑證,來認證用戶。如果認證成功,則返回一個與該用戶相關的token。例如,假設我們有一個LaravelAuthenticateController

laravel5.5安裝jwt-auth 生成token令牌的示例

創建一個基於用戶對象的token

我們可以跳過用戶認證,只傳遞一個用戶對象

laravel5.5安裝jwt-auth 生成token令牌的示例

上面的2個方法也有第二個參數,可以傳遞一個'自定義聲明'的數組

在解碼token時,這些自定義聲明,將和其他聲明一起提供。

注意:添加大量的自定義聲明,將增加token的大小

創建一個基於任意你喜歡的內容的token

作者給我們提供了對底層類和方法的訪問,來提供高級的、可自定義的功能。

示例使用了內建的'Tymon\\JWTAuth\\PayloadFactory'實例(或者使用JWTFactory門面):

laravel5.5安裝jwt-auth 生成token令牌的示例

也可以在'Tymon\\JWTAuth\\PayloadFactory'實例上鍊式調用聲明(或者使用JWTFactory門面):

laravel5.5安裝jwt-auth 生成token令牌的示例

認證(Authentication)

一旦用戶使用他們的憑證登錄,下一步將使用token發起一個後續請求,來檢索用戶詳情,以便我們可以將其顯示為已登錄。

使用內置方法,通過http發起認證請求,我們需要設置一個Authorization請求頭,如下所示:

laravel5.5安裝jwt-auth 生成token令牌的示例

Apache用戶需要注意:

Apache好像會丟棄Authorization請求頭,如果該請求頭不是base64編碼的user/pass組合。為了解決此問題,我們可以在apache配置文件中添加一下內容:

laravel5.5安裝jwt-auth 生成token令牌的示例

或者,我們可以通過在查詢字符串中包含token來實現:

laravel5.5安裝jwt-auth 生成token令牌的示例

為了從請求中獲取token,我們可以:

laravel5.5安裝jwt-auth 生成token令牌的示例

為了獲取token的值,我們可以調用:

laravel5.5安裝jwt-auth 生成token令牌的示例

如果設置了一個token,則會返回token,否則(為方便起見),它將使用上述方法,嘗試從請求中解析token,如果沒有設置token或沒有token可以被解析,最終返回false。

當然,如果在我們的程序中有其他入口點,我們也可以根據需要手動設置token。例如:

laravel5.5安裝jwt-auth 生成token令牌的示例

從token中檢索認證過的用戶

laravel5.5安裝jwt-auth 生成token令牌的示例

如果不喜歡內聯捕獲多個異常的方法,我們可以隨意使用Laravel添加全局異常處理程序。

在app/Exceptions/Handler.php中,將下面代碼添加到render()方法:

laravel5.5安裝jwt-auth 生成token令牌的示例

中間件和過濾器

如果我們使用的是Laravel5,可以使用內置的2箇中間件:

GetUserFromToken

檢查請求頭和查詢字符串(正如上面解釋過的)是否存在token,並嘗試解碼token。如上所述,同樣的事件被觸發。

RefreshToken

此中間件將再次嘗試從請求中解析token,然後將刷新token(從而使舊token失效),並將其作為下一次響應的一部分返回。這實際上產生了單個使用token流,如果token被洩露,這種方式會減少攻擊,因為它僅對單個請求有效。

為了使用這2箇中間件,我們需要將它們註冊到app/Http/Kernel.php裡的$routeMIddleware屬性:

laravel5.5安裝jwt-auth 生成token令牌的示例

以上這篇laravel5.5安裝jwt-auth生成token令牌的示例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持小編。


分享到:


相關文章: