iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 16
1
自我挑戰組

Laravel 實戰經驗分享系列 第 16

Laravel 實戰經驗分享 - Day16 JWT 概念分享(上)

安安,今天是重度拖延的狀態,在最後一個小時才開始寫稿 QQ
一放長假果然就鬆懈了呢 XDDDDD
今天來談一下 JWT(Json Web Token)的設計,JWT 在這幾年也是許多系統在做登入及登出功能時常會使用的方式。

Session

JWT 是一種無狀態(Stateless)的方式,既然是無狀態,那我們就先稍微提一下伺服器有狀態的實作方式,通常都是使用 Session 來實作,而 Session 在網頁技術中,要嘛是用 Cookie 儲存,但是 Cookie 是存在客戶端,因此無法保證資料的正確。另一種方式則是使用直接輸出並嵌入頁面的方法,因此變成 Server 這邊需要儲存,如果網站大量使用 Session,則會造成 Server 負擔。

JWT

JWT 是一組 Json 組成的字串,包含三個部分,並以 . 來區分:

  • Header
  • Payload
  • Signature

通常會長得像這個樣子。

eyJ0eXAiOiJKV1TGHJKGowrhkopadf1NiJ9.eyJpc3MiOiJodHRwczpcL1wvZGV2LWNybS4xLW9uZXN0b25lLmNvbVwvYXBpXC9hdXRoXC9sb2dpbiIsImlhdCI6MTaopwketrjOUHOqetjFWaetkEFJzdWIiOjEsInBydiI6Ijg3ZTBhZjFlZjlmZDE1ODEyZmRlYzk3MTUzYTE0ZTBiMDQ3NTQ2YWEifQ.8sQa2Wm2BjQym5s9i6r_IOGjwrhX9SF1CvRfnUBeA

可以至 jwt.io 看一下如何解析 JWT 資訊。
Header 會存放產生這組 Token 的演算法編碼方式,Payload 可以存放任何用戶的資訊,但這串資訊是能夠被解開的,所以並不建議存放較機敏的資訊,Signature 存放 Header、Payload 與我們定義的密鑰產生。

JWT 有以下優點:

  • 無狀態的傳輸適用於 RESTful API 的設計
  • 不需要 cookie
  • 相較於 Session 所消耗的伺服器效能來得小
  • 由於為無狀態輸出,減少 CSRF 攻擊的可能性
  • 輸出檔案為 JSON,在各類終端皆支援其格式
  • 主機端拿到 token 後不需要再去查詢使用者的訊息,適合用於微服務

今天中秋假期,礙於回鄉緣故來不及寫完,沒辦法把所有的概念講清楚,對有看文章的人感到抱歉,明天我會補上 JWT 實作時的完整流程,再請大家收看囉,明天見!


上一篇
Laravel 實戰經驗分享 - Day15 在 Laravel 上實現 RESTful API 設計
下一篇
Laravel 實戰經驗分享 - Day17 JWT 概念分享(下)
系列文
Laravel 實戰經驗分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言