摘要:簡稱,在通信過程中,進行身份認(rèn)證。服務(wù)器完全只靠這個對象認(rèn)定用戶身份。規(guī)定了個官方字段,供選用。
1. JSON WEB TOKEN
? JSON Web Token(JWT)是一個非常輕巧的規(guī)范。這個規(guī)范允許我們使用JWT在用戶和服務(wù)器之間傳遞安全可靠的信息。 ? 簡稱JWT,在HTTP通信過程中,進行身份認(rèn)證。 ? 我們知道HTTP通信是無狀態(tài)的,因此客戶端的請求到了服務(wù)端處理完之后是無法返回給原來的客戶端。因此需要對訪問的客戶端進行識別,常用的做法是通過session機制:客戶端在服務(wù)端登陸成功之后,服務(wù)端會生成一個sessionID,返回給客戶端,客戶端將sessionID保存到cookie中,再次發(fā)起請求的時候,攜帶cookie中的sessionID到服務(wù)端,服務(wù)端會緩存該session(會話),當(dāng)客戶端請求到來的時候,服務(wù)端就知道是哪個用戶的請求,并將處理的結(jié)果返回給客戶端,完成通信。 ? 通過上面的分析,可以知道session存在以下問題: ? 1、session保存在服務(wù)端,當(dāng)客戶訪問量增加時,服務(wù)端就需要存儲大量的session會話,對服務(wù)器有很大的考驗; ? 2、當(dāng)服務(wù)端為集群時,用戶登陸其中一臺服務(wù)器,會將session保存到該服務(wù)器的內(nèi)存中,但是當(dāng)用戶的訪問到其他服務(wù)器時,會無法訪問,通常采用緩存一致性技術(shù)來保證可以共享,或者采用第三方緩存來保存session,不方便。
客戶端通過用戶名和密碼登錄服務(wù)器;
服務(wù)端對客戶端身份進行驗證;
服務(wù)端對該用戶生成Token,返回給客戶端;
客戶端發(fā)起請求,需要攜帶該Token;
服務(wù)端收到請求后,首先驗證Token,之后返回數(shù)據(jù)。
客戶端將Token保存到本地瀏覽器,一般保存到cookie中。
服務(wù)端不需要保存Token,只需要對Token中攜帶的信息進行驗證即可;
無論客戶端訪問后臺的那臺服務(wù)器,只要可以通過用戶信息的驗證即可。
JWT 的原理是,服務(wù)器認(rèn)證以后,生成一個 JSON 對象,發(fā)回給用戶,就像下面這樣。
{ "姓名": "張三", "角色": "管理員", "到期時間": "2018年10月31日0點0分" }
以后,用戶與服務(wù)端通信的時候,都要發(fā)回這個 JSON 對象。服務(wù)器完全只靠這個對象認(rèn)定用戶身份。為了防止用戶篡改數(shù)據(jù),服務(wù)器在生成這個對象的時候,會加上簽名(詳見后文)。
服務(wù)器就不保存任何 session 數(shù)據(jù)了,也就是說,服務(wù)器變成無狀態(tài)了,從而比較容易實現(xiàn)擴展。
實際的 JWT 大概就像下面這樣。
它是一個很長的字符串,中間用點(.)分隔成三個部分。注意,JWT 內(nèi)部是沒有換行的,這里只是為了便于展示,將它寫成了幾行。
JWT 的三個部分依次如下。
Header(頭部)
Payload(負載)
Signature(簽名)
寫成一行,就是下面的樣子。
Header 部分是一個 JSON 對象,描述 JWT 的元數(shù)據(jù),通常是下面的樣子。
{ "alg": "HS256", "typ": "JWT" }
上面代碼中,alg屬性表示簽名的算法(algorithm),默認(rèn)是 HMAC SHA256(寫成 HS256);typ屬性表示這個令牌(token)的類型(type),JWT 令牌固定寫為JWT。
最后,將上面的 JSON 對象使用 Base64URL 算法(詳見后文)轉(zhuǎn)成字符串。
Payload 部分也是一個 JSON 對象,用來存放實際需要傳遞的數(shù)據(jù)。JWT 規(guī)定了7個官方字段,供選用。
iss (issuer):簽發(fā)人
exp (expiration time):過期時間
sub (subject):主題
aud (audience):受眾
nbf (Not Before):生效時間
iat (Issued At):簽發(fā)時間
jti (JWT ID):編號
除了官方字段,你還可以在這個部分定義私有字段,下面就是一個例子。
{ "sub": "1234567890", "name": "John Doe", "admin": true }
注意,JWT 默認(rèn)是不加密的,任何人都可以讀到,所以不要把秘密信息放在這個部分。
這個 JSON 對象也要使用 Base64URL 算法轉(zhuǎn)成字符串。
Signature 部分是對前兩部分的簽名,防止數(shù)據(jù)篡改。
首先,需要指定一個密鑰(secret)。這個密鑰只有服務(wù)器才知道,不能泄露給用戶。然后,使用 Header 里面指定的簽名算法(默認(rèn)是 HMAC SHA256),按照下面的公式產(chǎn)生簽名。
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
算出簽名以后,把 Header、Payload、Signature 三個部分拼成一個字符串,每個部分之間用"點"(.)分隔,就可以返回給用戶。
前面提到,Header 和 Payload 串型化的算法是 Base64URL。這個算法跟 Base64 算法基本類似,但有一些小的不同。
JWT 作為一個令牌(token),有些場合可能會放到 URL(比如 api.example.com/");
JWT實戰(zhàn)推薦看此篇博客
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/6674.html
摘要:框架具有輕便,開源的優(yōu)點,所以本譯見構(gòu)建用戶管理微服務(wù)五使用令牌和來實現(xiàn)身份驗證往期譯見系列文章在賬號分享中持續(xù)連載,敬請查看在往期譯見系列的文章中,我們已經(jīng)建立了業(yè)務(wù)邏輯數(shù)據(jù)訪問層和前端控制器但是忽略了對身份進行驗證。 重拾后端之Spring Boot(四):使用JWT和Spring Security保護REST API 重拾后端之Spring Boot(一):REST API的搭建...
摘要:部分是對前兩部分的簽名,防止數(shù)據(jù)篡改。也就是說,一旦簽發(fā)了,在到期之前就會始終有效,除非服務(wù)器部署額外的邏輯。為了減少盜用,的有效期應(yīng)該設(shè)置得比較短。為了減少盜用,不應(yīng)該使用協(xié)議明碼傳輸,要使用協(xié)議傳輸。 JSON Web Token(縮寫 JWT)是目前最流行的跨域認(rèn)證解決方案,本文介紹它的原理和用法。 showImg(https://www.wangbase.com/blogimg...
摘要:由于是存在客戶端上的,所以瀏覽器加入了一些限制確保不會被惡意使用,同時不會占據(jù)太多磁盤空間。簽名是對前兩部分的簽名,防止數(shù)據(jù)被篡改。的作用最開始的初衷是為了實現(xiàn)授權(quán)和身份認(rèn)證作用的,可以實現(xiàn)無狀態(tài),分布式的應(yīng)用授權(quán)。 前言 無狀態(tài)的HTTP協(xié)議 很久很久之前, Web基本都是文檔的瀏覽而已。既然是瀏覽, 作為服務(wù)器, 不需要記錄在某一段時間里都瀏覽了什么文檔, 每次請求都是一個新的HT...
摘要:登錄認(rèn)證幾乎是任何一個系統(tǒng)的標(biāo)配,系統(tǒng)客戶端等,好多都需要注冊登錄授權(quán)認(rèn)證。假設(shè)我們開發(fā)了一個電商平臺,并集成了微信登錄,以這個場景為例,說一下的工作原理。微信網(wǎng)頁授權(quán)是授權(quán)碼模式的授權(quán)模式。 登錄認(rèn)證幾乎是任何一個系統(tǒng)的標(biāo)配,web 系統(tǒng)、APP、PC 客戶端等,好多都需要注冊、登錄、授權(quán)認(rèn)證。 場景說明 以一個電商系統(tǒng),假設(shè)淘寶為例,如果我們想要下單,首先需要注冊一個賬號。擁有了賬...
摘要:一什么是為什么使用是機制的一種替代方案。這種情況下使用就會有更加方便。的數(shù)據(jù)結(jié)構(gòu)一般為三部分組成頭部一般包含簽名的算法和令牌的屬性負載實際需要傳遞的數(shù)據(jù)一般不加密,因此不要把重要信息放在里面簽名部分是對前兩部分的簽名,防止數(shù)據(jù)篡改。 一、什么是JSON Web Token? 1、為什么使用JSON Web Token JSON Web Token是cookie session機制的一種...
閱讀 3004·2021-10-13 09:39
閱讀 2700·2021-09-27 13:34
閱讀 2040·2019-08-30 15:55
閱讀 3267·2019-08-30 15:43
閱讀 3646·2019-08-30 11:16
閱讀 1762·2019-08-26 18:28
閱讀 1297·2019-08-26 13:56
閱讀 922·2019-08-26 13:35