【認證與授權】JWT(JSON Web Token)簡介

更新於 發佈於 閱讀時間約 5 分鐘
上一個篇章我們有介紹了「【認證與授權】Authentication、Authorization,傻傻分不清楚?」,相信對於兩者個區別已經有一定的認知了, 那麼這次的主軸在於介紹Authentication(認證)的其中一個技術JWT(Json Web Token), 為什麼說這項技術很重要?
隨著系統越來越複雜,雲端模式的興起,我們傳統的驗證機制已經無法負荷現今的大量使用情境,因此才衍生出「無狀態」的「令牌」機制,主要讓我們在有限的時間內得到可以通行的「通行證」。
在這段期間內我們是認證通過的狀態,因此可以隨意進出系統,而對於伺服端來說也不用去特別記住來的是誰,只認令牌不認人,看到這邊想必心中難免會有疑惑,這樣不是很危險嗎,的確,單純的通行證當然不行,所以我們才要搭配授權、更新令牌...的機制,這留在我們後面的章節會逐一介紹。
那就讓我們先來了解一下JWT(Json Web Token)這們技術吧!

概念: 有限時間內可使用通行證來要求對應的操作權限。

JWT 的組成內容有三個部分,由 . 做區隔,最後透過這三個部分,串成一個 Jwt 字串
[HEADER].[PAYLOAD].[SIGNATURE]
1. Header:
主要記載認證的方法
{
    "typ": "JWT",
    "alg": "HS256" # 加密的方法(HS384、RS256、ES256...)
}
2. Payload:
這部分可以裝載一些比較不敏感的資訊,通常建議裝載以下資訊(但不強制)。
- iss (Issuer) — jwt簽發者
- sub (Subject) — jwt所面向的用戶
- aud (Audience) — 接收jwt的一方
- exp (Expiration Time) — jwt的過期時間,這個過期時間必須要大於簽發時間
- nbf (Not Before) — 定義在什麼時間之前,該jwt都是不可用的
- iat (Issued At) — jwt的簽發時間
- jti (JWT ID) — jwt的唯一身份標識,主要用來作為一次性token,從而迴避重放攻擊
{
     "displayName": "John Doe",
     "roles": ["$roleId", "roleId", ...]
     "iat": 1516239022,
     "exp": 1516239022
}
我們也可以利用payload來裝載其它的資訊。
3. Signature
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), 'secret')
簽名後得到Signature的字串,最後組成為
$base64Str(header).$base64Str(payload).$signature

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

JWT的驗證流程

優點

- 採用JSON的形式,大部分的程式語言皆支援。
- 可存放一些使用者資訊,但並非是敏感的資訊。
- 不用在Server端實做Session機制,特別適合多台Server的情境下,使得擴展性容易,因為多台Server要使用Session的話,會有共享Session的問題產生。
- 因為是透過header夾帶,因此不會有傳統用Cookie進行跨域請求等問題。

缺點

- JWT沒辦法主動被失效,也就是說不能像Session一樣被強制無效,只能等到過期。

如何拿jwt token去存取API?

curl -X GET "http://192.168.1.222:5002/users/me" -H "accept: application/json" -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiI1ZThkOWUyYWQ0OWU2MzMzOTBiZWExYTgiLCJpYXQiOjE1ODg4MTE0MzksImV4cCI6MTU4ODgxNDQzOX0.LqgFDdMWXf_nYC3a4_wn8WV3BLqXaklwgGjXVRp2i3I"
即將進入廣告,捲動後可繼續閱讀
為什麼會看到廣告
avatar-img
119會員
268內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
這篇文章將介紹兩個主要的認證工具:Passport 和 JWT。Passport 是一個簡單的身份驗證中介軟體,提供多種登入方式,而JWT則是一種stateless的認證方式,能減輕伺服器負擔。文章探討了 stateful 與 stateless 認證的區別,以及如何將這兩者結合提升安全性與效能。
Thumbnail
前兩篇講了SPL Token與Account Model,現在要正式介紹token extension。 Token Extension Program(以下簡稱TEP) 原名 Token 2022,是一個基於原本Token Prgram(以下簡稱TP)的擴充版本。TEP被部署到的地
在今日數位化的世界中,保護資料的安全性尤為重要。加密憑證(SSL/TLS Certificates)扮演著確保網站和用戶之間資料傳輸安全的重要角色。本文將深入探討加密憑證的原理、作用以及如何選擇適合的加密憑證來保護您的網站。 1. 加密憑證的基本概念 加密憑證是一種數位檔案,用於證明網站身份的真
Thumbnail
什麼是多因素驗證 (MFA)? 多因素驗證 (MFA) 是一種登入保護機制,需要使用者提供多個不同的驗證方式來確認身份。除了輸入密碼,使用者還可能需要: 輸入發送到手機的驗證碼 掃描指紋或面部 回答安全問題 這樣即使密碼被盜用,未經授權的用戶也很難登入帳戶。 為什麼需要多因素
Thumbnail
現在到日本旅遊入境最方便的是事先申請VJW 在台灣填好資料後 入境只要刷QR碼就可以通關了, 而2024年變得更加便利了 原本入境加報關兩個條碼合併成一個條碼 還有家人可以用同一隻手機通關 也就是在自己的帳號之下按登錄家人 幫所有家人填寫VJW 所有人的資料綁在同一個帳號 只有
Thumbnail
台灣數位發展部(簡稱數位部)要推行DIW,很讚!但法源依據呢?依我的觀察與看法:台灣電子簽章新法,應可為台版DIW鋪路,而有了法源依據,要進一步做DIW、防詐,甚至搞DAO(法),也是指日可待!我自己更期待它在web3應用(不論是加密貨幣、區塊鏈領域或多元宇宙)!
Thumbnail
進入區塊鏈/Web3的世界,首先需要擁有一個錢包或帳號。本文從重要名詞和觀念入手,介紹公鑰和私鑰的重要性,以及助記詞的作用。探討加密錢包的種類,從私鑰控制權和網路連接的角度進行分類。同時提醒了私鑰保管的重要性,以及在交易所和網路交互中的安全提醒。最後透過實際案例介紹了社交工程和釣魚的危害。
Thumbnail
授權碼模式連線流程 用戶端請求自己的伺服器。 伺服器發現用戶沒登入,就導向認證伺服器。 認證伺服器顯示授權頁面,等待用戶授權。 用戶確認授權後,授權頁面會向認證伺服器請求授權碼。 用戶獲取授權碼。 用戶將授權碼傳給伺服器。 伺服器拿授權碼向認證伺服器取得token。 應用註冊
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
這篇文章將介紹兩個主要的認證工具:Passport 和 JWT。Passport 是一個簡單的身份驗證中介軟體,提供多種登入方式,而JWT則是一種stateless的認證方式,能減輕伺服器負擔。文章探討了 stateful 與 stateless 認證的區別,以及如何將這兩者結合提升安全性與效能。
Thumbnail
前兩篇講了SPL Token與Account Model,現在要正式介紹token extension。 Token Extension Program(以下簡稱TEP) 原名 Token 2022,是一個基於原本Token Prgram(以下簡稱TP)的擴充版本。TEP被部署到的地
在今日數位化的世界中,保護資料的安全性尤為重要。加密憑證(SSL/TLS Certificates)扮演著確保網站和用戶之間資料傳輸安全的重要角色。本文將深入探討加密憑證的原理、作用以及如何選擇適合的加密憑證來保護您的網站。 1. 加密憑證的基本概念 加密憑證是一種數位檔案,用於證明網站身份的真
Thumbnail
什麼是多因素驗證 (MFA)? 多因素驗證 (MFA) 是一種登入保護機制,需要使用者提供多個不同的驗證方式來確認身份。除了輸入密碼,使用者還可能需要: 輸入發送到手機的驗證碼 掃描指紋或面部 回答安全問題 這樣即使密碼被盜用,未經授權的用戶也很難登入帳戶。 為什麼需要多因素
Thumbnail
現在到日本旅遊入境最方便的是事先申請VJW 在台灣填好資料後 入境只要刷QR碼就可以通關了, 而2024年變得更加便利了 原本入境加報關兩個條碼合併成一個條碼 還有家人可以用同一隻手機通關 也就是在自己的帳號之下按登錄家人 幫所有家人填寫VJW 所有人的資料綁在同一個帳號 只有
Thumbnail
台灣數位發展部(簡稱數位部)要推行DIW,很讚!但法源依據呢?依我的觀察與看法:台灣電子簽章新法,應可為台版DIW鋪路,而有了法源依據,要進一步做DIW、防詐,甚至搞DAO(法),也是指日可待!我自己更期待它在web3應用(不論是加密貨幣、區塊鏈領域或多元宇宙)!
Thumbnail
進入區塊鏈/Web3的世界,首先需要擁有一個錢包或帳號。本文從重要名詞和觀念入手,介紹公鑰和私鑰的重要性,以及助記詞的作用。探討加密錢包的種類,從私鑰控制權和網路連接的角度進行分類。同時提醒了私鑰保管的重要性,以及在交易所和網路交互中的安全提醒。最後透過實際案例介紹了社交工程和釣魚的危害。
Thumbnail
授權碼模式連線流程 用戶端請求自己的伺服器。 伺服器發現用戶沒登入,就導向認證伺服器。 認證伺服器顯示授權頁面,等待用戶授權。 用戶確認授權後,授權頁面會向認證伺服器請求授權碼。 用戶獲取授權碼。 用戶將授權碼傳給伺服器。 伺服器拿授權碼向認證伺服器取得token。 應用註冊