本篇內容主要講解“JWT與cookie和token的區別有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“JWT與cookie和token的區別有哪些”吧!
一. cookie
A)cookie如何認證
B)cookie認證方式的不足之處
二. token
A)token的認證過程
B)token認證方式的特點
三. JWT
A)JWT介紹
B)JWT組成
C)為什么要使用JWT
D)JWT的Maven引入
1.用戶輸入用戶名與密碼,發送給服務器。
2.服務器驗證用戶名和密碼,正確的就創建一個會話(session),同時會把這個會話的ID保存到客戶端瀏覽器中,因為保存的地方是瀏覽器的cookie,所以這種認證方式叫做基于cookie的認證方式。
3.后續的請求中,瀏覽器會發送會話ID到服務器,服務器上如果能找到對應的ID的會話,那么服務器就會返回需要的數據給瀏覽器。
4.當用戶退出登錄,會話會同時在客戶端和服務器端被銷毀。
1.服務器要為每個用戶保留session信息,連接用戶過多會造成服務器內存壓力過大。
2.適合單一域名,不適合第三方請求。
1.用戶輸入用戶名和密碼,發送給服務器。
2.服務器驗證用戶名和密碼,正確的話就返回一個簽名過的token(token 可以認為就是個長長的字符串),瀏覽器客戶端拿到這個token。
3.后續每次請求中,瀏覽器會把token作為http header發送給服務器,服務器驗證簽名是否有效,如果有效那么認證就成功,可以返回客戶端需要的數據。
4.一旦用戶退出登錄,只需要客戶端銷毀token即可,服務器端不需要任何操作。
這種方式的特點就是客戶端的token中自己保留有大量信息,服務器沒有存儲這些信息,而只負責驗證,不必進行數據庫查詢,執行效率大大提高。
1.JWT是json web token縮寫。它將用戶信息加密到token里,服務器不保存任何用戶信息。服務器通過使用保存的密鑰驗證token的正確性,只要正確即通過驗證。
2.優點是在分布式系統中,很好地解決了單點登錄問題,很容易解決了session共享的問題。jwt長度較小,且可以使用URL傳輸(URLsafe)。不想cookies只能在web環境起作用。 JWT可以同時使用在web環境和RESTfull的接口。
缺點是無法作廢已頒布的令牌/不易應對數據過期。
JWT包含三個部分: Header頭部,Payload負載和Signature簽名。由三部分生成token,三部分之間用“.”號做分割。
列如 :
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
1.Header
在Header中通常包含了兩部分:type:代表token的類型,這里使用的是JWT類型。 alg:使用的Hash算法,例如HMAC SHA256或RSA.
{ “alg”: “HS256”, “typ”: “JWT” }
這會被經過base64Url編碼形成第一部分
2.Payload
token的第二個部分是荷載信息,它包含一些聲明Claim(實體的描述,通常是一個User信息,還包括一些其他的元數據)
聲明分三類:
1)Reserved Claims,這是一套預定義的聲明,并不是必須的,這是一套易于使用、操作性強的聲明。包括:iss(issuer)、exp(expirationtime)、sub(subject)、aud(audience)等
2)Plubic Claims,
3)Private Claims,交換信息的雙方自定義的聲明
{ “sub”: “1234567890”, “name”: “John Doe”, “admin”: true }
同樣經過Base64Url編碼后形成第二部分
3.signature
使用header中指定的算法將編碼后的header、編碼后的payload、一個secret進行加密。
例如使用的是HMAC SHA256算法,大致流程類似于: HMACSHA256( base64UrlEncode(header) + “.” + base64UrlEncode(payload), secret)
這個signature字段被用來確認JWT信息的發送者是誰,并保證信息沒有被修改
相比XML格式,JSON更加簡潔,編碼之后更小,這使得JWT比SAML更加簡潔,更加適合在HTML和HTTP環境中傳遞。
在安全性方面,SWT只能夠使用HMAC算法和共享的對稱秘鑰進行簽名,而JWT和SAML
token則可以使用X.509認證的公私秘鑰對進行簽名。與簡單的JSON相比,XML和XML數字簽名會引入復雜的安全漏洞。
因為JSON可以直接映射為對象,在大多數編程語言中都提供了JSON解析器,而XML則沒有這么自然的文檔-對象映射關系,這就使得使用JWT比SAML更方便
java json web token工具類
<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.0</version> </dependency>
到此,相信大家對“JWT與cookie和token的區別有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。