AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

憑證管理揭秘:Cookie-Session 與 JWT 方案的對決

來源: 責編: 時間:2024-04-26 17:31:12 170觀看
導讀概述在上一篇文章我們聊完了授權的過程,在服務器對客戶端完成授權之后,服務器會給客戶端頒發(fā)對應的憑證,客戶端持有該憑證訪問服務端,服務器便能知道你是誰,你有什么權限等信息。這一章我們具體聊聊常見的憑證管理技術有哪

概述

在上一篇文章我們聊完了授權的過程,在服務器對客戶端完成授權之后,服務器會給客戶端頒發(fā)對應的憑證,客戶端持有該憑證訪問服務端,服務器便能知道你是誰,你有什么權限等信息。這一章我們具體聊聊常見的憑證管理技術有哪些。g6Y28資訊網(wǎng)——每日最新資訊28at.com

在軟件架構中,關于憑證如何存儲和傳遞,一直有兩種不同的解決思路,兩種不同的解決方式,實際上反映了兩種不同的架構思路:g6Y28資訊網(wǎng)——每日最新資訊28at.com

  1. 一種是把所有狀態(tài)信息都放在服務器端 (Cookie-Session 方案)
  2. 一種是把所有狀態(tài)將信息存儲在客戶端(JWT 方案)

在互聯(lián)網(wǎng)早期,這個問題早就有了明確的答案。大多數(shù)應用都采用了 “Cookie-Session” 的方法,這種方法通過在服務器上存儲用戶狀態(tài),來實現(xiàn)用戶身份的識別和信息的傳遞。這種方法在很長一段時間里都是主流。g6Y28資訊網(wǎng)——每日最新資訊28at.com

然而,隨著微服務和分布式系統(tǒng)的興起,我們發(fā)現(xiàn)由于 CAP 的限制,服務器端存儲狀態(tài)信息的方式開始面臨很多問題(微服務要求服務端本身是無狀態(tài),才能實現(xiàn)動態(tài)擴縮容)。這就迫使我們重新考慮被放棄的客戶端狀態(tài)存儲方法。在這個背景下,JWT(JSON Web Token)的令牌的方案開始受到關注。JWT 是一種在客戶端存儲用戶狀態(tài)信息的方式,它允許用戶在不同的服務器之間自由切換,而不需要重新登錄。這種特性在分布式系統(tǒng)中非常有用。但是要明白,JWT 和 Cookie-Session 只是對授權信息存儲的主體(客戶端,服務端)不同,各有優(yōu)勢,合適場景不同,不存在誰比誰要先進的問題。在本節(jié)中,我們將探討 Cookie-Session 和 JWT 兩種方案的相同點和不同點,幫你更好地理解這兩種方案的優(yōu)缺點,以及它們在不同場景下的應用。g6Y28資訊網(wǎng)——每日最新資訊28at.com

cookie-session

總所周知,因為 HTTP 是無狀態(tài)協(xié)議,所以 Cookie-Session 的原理其實很簡單,就是解決 HTTP 協(xié)議無狀態(tài)的問題,在 RFC 6265 中定義了 HTTP 的狀態(tài)管理機制,增加 Set-Cookie 指令,服務端向客戶端發(fā)送一組信息(標識)示例:g6Y28資訊網(wǎng)——每日最新資訊28at.com

HTTP/1.1 200 OKContent-type: text/htmlSet-Cookie: session_token=abc123; Expires=Wed, 09 Jun 2021 10:18:14 GMT; Path=/

客戶端收到指令后在此后一段時間的 HTTP 請求中都發(fā)給服務端會話信息(在 Header 中攜帶 cookie 信息),以便服務器區(qū)分不同的客戶端:g6Y28資訊網(wǎng)——每日最新資訊28at.com

GET /profile HTTP/1.1Host: www.example.comCookie: sessionid=xyzasdzxc123789456

客戶端的 Cookies 里通常只存儲一個無意義,不重復的字符串,通常命名是 sessionid 或 jessionid ,服務端則根據(jù)該字符串作為 Key,和用戶信息建立關聯(lián)后存儲在服務端的內(nèi)存或者緩存中。再輔以一些超時自動清理的措施來管理會話。g6Y28資訊網(wǎng)——每日最新資訊28at.com

它們的交互過程如下:g6Y28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片g6Y28資訊網(wǎng)——每日最新資訊28at.com

這種服務端的狀態(tài)管理機制就是 Session,Cookie-Session 也是最傳統(tǒng),但今天依然廣泛應用于大量系統(tǒng)中的,由服務端與客戶端聯(lián)動來完成的狀態(tài)管理機制。g6Y28資訊網(wǎng)——每日最新資訊28at.com

總結(jié)

cookie-session 的方案在存儲授權信息具有以下優(yōu)勢:g6Y28資訊網(wǎng)——每日最新資訊28at.com

  1. 安全性:由于狀態(tài)信息都存儲在服務端,cookie-session 方案在安全性上有天然的優(yōu)勢,能完全規(guī)避上下文信息在傳輸過程中被篡改的風險
  2. 靈活性:由于存儲在服務端,服務端可以存儲各種數(shù)據(jù)對象,而不僅僅是字符串
  3. 狀態(tài)控制:服務端維護狀態(tài)的優(yōu)勢在于可以根據(jù)自己的意愿隨時修改,清除上下文信息,可以很輕松實現(xiàn)用戶強制下線的功能。

Cookie-Session 在單體服務環(huán)境中是最合適的方案,但是因為服務端有狀態(tài),當需要水平擴展服務能力,要部署集群時就開始面臨麻煩了。接下來的 JWT 令牌就是 Cookie-Session 在分布式環(huán)境的替代品,但是不能說 JWT 要比 Cookie-Session 更加先進,更不可能全面取代 Cookie-Session 機制。g6Y28資訊網(wǎng)——每日最新資訊28at.com

JWT

當服務端有多臺,并且不能存儲狀態(tài)的時候,客戶端就要承擔存儲有狀態(tài)(授權信息)的職責了。這就是 JWT 令牌的方案思路。g6Y28資訊網(wǎng)——每日最新資訊28at.com

JWT(JSON Web Token)是一種定義在 RFC 7519 標準中的令牌格式,主要應用于現(xiàn)代分布式應用系統(tǒng)中,經(jīng)常與 OAuth2 協(xié)議配合使用。在深入探討 JWT 的結(jié)構之前,我們先來直觀地了解一下它的基本形式。示例:g6Y28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片g6Y28資訊網(wǎng)——每日最新資訊28at.com

注意:JWT 令牌不加密,只使用 Base64URL 轉(zhuǎn)碼,所以 JWT 令牌里別放敏感信息,令牌只解決防篡改的問題,并不解決防泄漏的問題,JWT 令牌都可以在 JWT 官網(wǎng)(https://jwt.io)上進行解碼。如圖所示,JWT(JSON Web Token)由三部分組成:Header(頭部)、Payload(負載)、Signature(簽名)。這三部分之間使用點(.)分隔。g6Y28資訊網(wǎng)——每日最新資訊28at.com

Header:Header 部分通常包含令牌的類型(通常是 JWT)和使用的加密算法,例如 HS256:g6Y28資訊網(wǎng)——每日最新資訊28at.com

{  "alg": "HS256",  "typ": "JWT"}

Payload:Payload 部分包含所需的聲明,這些聲明可以包括用戶信息或其他相關數(shù)據(jù)。例如,用戶ID和過期時間:g6Y28資訊網(wǎng)——每日最新資訊28at.com

{  "sub": "1234567890",  "name": "John Doe",  "iat": 1516239022,  "exp": 1516242622}

負載部分,JWT 在 RFC 7519 中推薦(非強制約束)了七項聲明名稱(Claim Name),如有需要用到這些內(nèi)容,建議字段名與官方的保持一致:g6Y28資訊網(wǎng)——每日最新資訊28at.com

  • iss(Issuer):簽發(fā)人。
  • exp(Expiration Time):令牌過期時間。
  • sub(Subject):主題。
  • aud (Audience):令牌受眾。
  • nbf (Not Before):令牌生效時間。
  • iat (Issued At):令牌簽發(fā)時間。
  • jti (JWT ID):令牌編號。

此外在 RFC 8225、RFC 8417、RFC 8485 等規(guī)范文檔,以及 OpenID 等協(xié)議中,都定義有約定好公有含義的名稱,可以參考 IANA JSON Web Token Registry。g6Y28資訊網(wǎng)——每日最新資訊28at.com

Signature:Signature 是使用 Header 中指定的算法和一個密鑰對 Header 和 Payload 進行簽名得到的。對前面兩部分內(nèi)容進行加密計算,以例子里使用的 JWT 默認的 HMAC SHA256 算法為例,將通過以下公式產(chǎn)生簽名值:g6Y28資訊網(wǎng)——每日最新資訊28at.com

HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload) , secret)

簽名的意義在于確保負載中的信息是可信的、沒有被篡改的,也沒有在傳輸過程中丟失任何信息。因為被簽名的內(nèi)容哪怕發(fā)生了一個字節(jié)的變動,也會導致整個簽名發(fā)生顯著變化。JWT 默認使用的 HMAC SHA256 算法是一種密鑰哈希算法,適用于單體應用中,因為加密和驗證都需要由同一授權服務完成。在多方或分布式應用中,通常使用非對稱加密算法進行簽名。這種情況下,授權服務使用私鑰簽名,并通過遵循 JSON Web Key 規(guī)范公開一個公鑰。這個公鑰用于驗證簽名,使其他服務能夠獨立驗證 JWT 的真實性,無需直接與授權服務通信。g6Y28資訊網(wǎng)——每日最新資訊28at.com

JWT 令牌的交互流程如下:g6Y28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片g6Y28資訊網(wǎng)——每日最新資訊28at.com

說明:如果是在分布式環(huán)境下,通常會有單獨的認證服務器來負責頒發(fā)令牌。g6Y28資訊網(wǎng)——每日最新資訊28at.com

發(fā)送令牌

按照 HTTP 協(xié)議的規(guī)范,客戶端可以通過多種方式使用 HTTP 協(xié)議發(fā)送 JWT 令牌給服務端。最標準的方式是將 JWT 放在 HTTP 的 Authorization 頭部中,通常與 Bearer 方案一起使用。這種方法簡單且符合 RESTful API 的最佳實踐:g6Y28資訊網(wǎng)——每日最新資訊28at.com

GET /api/resource HTTP/1.1Host: example.comAuthorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIx......

總結(jié)

JWT 令牌是分布式系統(tǒng)下憑證載體的優(yōu)秀解決方案,它優(yōu)點眾多:g6Y28資訊網(wǎng)——每日最新資訊28at.com

  1. 解決了分布式系統(tǒng)下的狀態(tài)信息的管理問題,讓服務端無狀態(tài),實現(xiàn)動態(tài)擴縮容。
  2. 結(jié)構簡單,輕量,憑證本身包含重要信息,服務端無需再查詢數(shù)據(jù)庫
  3. 通過密鑰對和簽名的方式,保證憑證信息的無法被篡改,保證了憑證的真實性

但是沒有完美的解決方案,cookie-session 的優(yōu)點也 JWT 也缺點:g6Y28資訊網(wǎng)——每日最新資訊28at.com

  1. 會話難以主動失效:服務端難以注銷令牌,如果非要實現(xiàn),就要把狀態(tài)信息轉(zhuǎn)移存儲到 redis 中。
  2. 攜帶的信息有限:雖然 HTTP 沒有限制 Header 中可存儲的大小限制,但是 HTTP 服務端大多都有存儲上限,例如 tomcat 限制 8kb,nginx 限制 4kb
  3. 客戶端令牌泄露風險:客戶端令牌存在哪里 ?Cookie ? localStrong ? Indexed ? 存在哪里都有泄露風險。只要拿到令牌就能冒認客戶端身份
  4. 服務端無狀態(tài)會導致很多常見的功能難以實現(xiàn),例如:踢人下線,統(tǒng)計在線人數(shù)等等。。

本文鏈接:http://www.tebozhan.com/showinfo-26-85860-0.html憑證管理揭秘:Cookie-Session 與 JWT 方案的對決

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Go 語言入門指南:基礎語法和常用特性解析

下一篇: 大廠的OLAP架構啥樣的?

標簽:
  • 熱門焦點
  • K60至尊版剛預熱 一加Ace2 Pro正面硬剛

    Redmi這邊剛?cè)缁鹑巛钡男麄髁薑60 Ultra的各種技術和硬件配置,作為競品的一加也坐不住了。一加中國區(qū)總裁李杰發(fā)布了兩條微博,表示在自家的一加Ace2上早就已經(jīng)采用了和PixelWo
  • 6月安卓手機性能榜:vivo/iQOO霸占旗艦排行榜前三

    2023年上半年已經(jīng)正式過去了,我們也迎來了安兔兔V10版本,在新的驍龍8Gen3和天璣9300發(fā)布之前,性能榜的榜單大體會以驍龍8Gen2和天璣9200+為主,至于那顆3.36GHz的驍龍8Gen2領先
  • 三言兩語說透設計模式的藝術-單例模式

    寫在前面單例模式是一種常用的軟件設計模式,它所創(chuàng)建的對象只有一個實例,且該實例易于被外界訪問。單例對象由于只有一個實例,所以它可以方便地被系統(tǒng)中的其他對象共享,從而減少
  • 如何使用JavaScript創(chuàng)建一只圖像放大鏡?

    譯者 | 布加迪審校 | 重樓如果您曾經(jīng)瀏覽過購物網(wǎng)站,可能遇到過圖像放大功能。它可以讓您放大圖像的特定區(qū)域,以便瀏覽。結(jié)合這個小小的重要功能可以大大改善您網(wǎng)站的用戶體驗
  • 虛擬鍵盤 API 的妙用

    你是否在遇到過這樣的問題:移動設備上有一個固定元素,當激活虛擬鍵盤時,該元素被隱藏在了鍵盤下方?多年來,這一直是 Web 上的默認行為,在本文中,我們將探討這個問題、為什么會發(fā)生
  • 東方甄選單飛:有些鳥注定是關不住的

    文/彭寬鴻編輯/羅卿東方甄選創(chuàng)始人俞敏洪帶隊的“7天甘肅行”直播活動已在近日順利收官。成立后一年多時間里,東方甄選要脫離抖音自立門戶的傳聞不絕于耳,“7
  • 攜眾多高端產(chǎn)品亮相ChinaJoy,小米帶來一場科技與人文的視聽盛宴

    7月28日,全球數(shù)字娛樂領域最具知名度與影響力的年度盛會中國國際數(shù)碼互動娛樂展覽會(簡稱ChinaJoy)在上海新國際博覽中心盛大開幕。作為全球領先的科
  • 華為發(fā)布HarmonyOS 4:更好玩、更流暢、更安全

    在8月4日的華為開發(fā)者大會2023(HDC.Together)大會上,HarmonyOS 4正式發(fā)布。自2019年發(fā)布以來,HarmonyOS一直以用戶為中心,經(jīng)歷四年多的發(fā)展HarmonyOS已
  • 華為HarmonyOS 4升級計劃公布:首批34款機型今日開啟公測

    8月4日消息,今天下午華為正式發(fā)布了HarmonyOS 4系統(tǒng),在更流暢的前提下,還帶來了不少新功能,UI設計也有變化,會讓手機煥然一新。華為宣布,首批機型將會在
Top