https://jwt-auth.readthedocs.io/en/develop/
在Laravel中,web端預設是利用session識別登入者身分合法與否,而API則可利用「JWT (Json Web Tokens)」進行身分驗證,它本身是個JSON格式的輕量級規範,有別於SAML (Security Assertion Markup Language) 較為複雜的XML格式。
即造訪後端的憑證,首先使用者會在前端進行登入的動作,若身分核對成功後,就會發一組 Token 給前端,此時就可以利用Bearer作為驗證方案,將這組憑證夾帶在Header,造訪需要權限的API,讓後端知道你的身分是合法的。一般而言 Token 是具有時效性的,以 JWT 為例,時效預設為60分鐘,時效一過或者自行登出,則該 Token 失效,必須重新取得 Token。
composer require tymon/jwt-auth:dev-develop
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
php artisan jwt:secret
php artisan make:controller AuthController
API參數對照表
URI | description | HTTP Method | Header |
---|---|---|---|
api/auth | 取得user資訊 | GET | Authorization: bearer Token Accept: application/json |
api/auth/login | 登入 | POST | |
api/auth/logout | 登出 | POST | Authorization: bearer Token Accept: application/json |
打開postman後,使用「取得user資訊」的API,若不夾帶token、token失效或者使用非法token,就會收到如下圖的回應,且HTTP Status Code 為401
為何我們會收到401的狀態碼呢?因為這支 API 被宣告使用「auth:api」的中介層,倘若你身分是不合法的,就會被中介層拒於門外。這時我們就透過「登入」,取得合法的Token,並再次取得user資訊,結果就會如下
就這樣,利用 JWT 進行 API 身分驗證的機制就完成了