iT邦幫忙

2024 iThome 鐵人賽

DAY 13
0
佛心分享-IT 人自學之術

Token相關的應用場景和技術領域系列 第 13

Day13 認識 JSON Web Token 認證機制

  • 分享至 

  • xImage
  •  

背景與動機:
網絡應用程式變得越來越普及,隨著數據傳輸需求的增加,安全性成為一個重要的問題,市場需求表明用戶端和伺服器之間的數據交換變得更加頻繁和複雜,為了滿足這些需求安全且高效的身份驗證機制變得非常重要。JWT是一種用於網路應用程式的開放標準(RFC 7519),用於在資料間安全地傳遞聲明,它可以被用來進行身分驗證(authentication)和資料交換(data exchange),通過簽名機制可以確保資料的完整性,伺服器不需要保留任何資料來驗證使用者。JWT常見的應用是在網路應用程式中進行身分驗證,當用戶端發送請求時,通常會使用帳號和密碼向伺服器進行身分驗證,一旦驗證成功,伺服器會生成一個JSON Web Token(JWT),並將其發送到用戶的應用程式中。

技術介紹:
利用JWT來對使用者進行驗證,使用者會先請求伺服器給予該JWT,只要使用者帶著這個JWT向伺服器請求資源,如果這個JWT是有效的,就能獲取資源。JWT可以視為用戶端的「入場憑證」,代表了用戶的身分和權限,在之後的每個HTTP請求中,用戶端都會將這個JWT放在Authorization標頭(header)中,以便伺服器驗證用戶的身分。
JWT由三個部分組成:標頭(header)、有效負載(payload)、以及簽名(signature)。標頭通常包含了類型(typ)和使用的加密算法(alg)等資訊。有效負載是有關使用者和其他資訊的一些聲明。簽名則是用來確保資料的完整性和驗證其來源。
1.標頭(header):

  • 加密算法(alg):標頭的第一部分是指定使用的簽名算法,通常是HMAC、SHA256、RSA。
  • 類型(typ):標頭的第二部分是指定token的類型,即JWT。
  1. 有效負載(payload):有效負載包含了關於使用者和其他數據的聲明,分為三種類型:
  • 註冊聲明(Registered Claims):這些是JWT標準公認的一些訊息建議你可以放,但並不強迫,這是用於幫助保證通用性。
  • 公開聲明(Public Claims):這些是用於分享信息的聲明,但必須避免使用與註冊聲明相同的名稱。
  • 私有聲明(Private Claims):這個就是發放JWT伺服器可以自定義的欄位部分,例如會放User Account、User Name、User Role等不敏感的數據,不會放使用者的密碼等敏感數據,因為Payload傳遞的訊息最後也是透過Base64進行編碼,所以是可以被破解的,因此放使用者密碼會有安全性的問題。
  1. 簽名(signature):將標頭(header)與有效負載(payload)編碼,中間用「.」來串接,secret是存放在伺服器端的秘密字串,將這三個部分串接再一起的字串進行加密演算法加密,就是一個合法簽發的JWT字串,加密後的字串會被編碼成Base64字串,三個部分分別為:base64UrlEncode(header).base64UrlEncode(payload).secret

JWT的技術優點:
1.輕量和簡單:JWT使用JSON格式,簡潔且易於理解,大部分的程式語言皆支援。
2.無需存儲狀態:無需在伺服器端存儲會話信息,減輕了伺服器的負擔,提高了系統的效率。
3.跨域使用:JWT可以輕鬆地在不同的域之間傳遞,方便實現跨域身份驗證。
4.安全性:通過簽名機制確保資料的完整性,並且可以使用加密算法保護敏感資訊。
5.便利性:對於現在手機上的APP的應用非常好,使用者不用每次打開APP都要重新輸入帳號與密碼。

流程如下:

[用戶認證] --> [JWT 生成] --> [用戶請求攜帶 JWT] --> [伺服器驗證 JWT]

上一篇
Day12 Token身份驗證-OAuth
下一篇
Day14 Token 在供應鏈管理中的應用
系列文
Token相關的應用場景和技術領域30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言