国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
從session、cookie到token以及JWT

主要講token和jwt技術(shù),關(guān)于session和cookie文章很多。簡單提一下

session和cookie

現(xiàn)在一般都是session和cookie一起用,一起提。但是他們倆其實(shí)不是一定要在一起。

首先牢記一點(diǎn),http協(xié)議是無狀態(tài)的。就是說,一個(gè)請求過來,服務(wù)器不知道這個(gè)請求的用戶是不是已經(jīng)登錄過了,不知道他的狀態(tài)。只能再把這個(gè)請求重定向到登陸頁面。

這樣用戶就瘋了,怎么一直讓我登錄。

所以,前人想了一個(gè)辦法,在第一次登錄后,在服務(wù)器端記錄一個(gè)會話id(sessionId),記錄一下用戶及其狀態(tài)。然后把sessionId回給瀏覽器。瀏覽器將這個(gè)sessionId記錄到cookie里,下一次請求再帶上。這樣服務(wù)器從請求中拿到cookie里的sessionId,到自己的存儲(一般是用redis)里查一下,得到用戶的狀態(tài)。之后就可以愉快的進(jìn)行下面的操作了。

總之,

  1. session是服務(wù)器端的,cookie是瀏覽器端的
  2. cookie只是實(shí)現(xiàn)session的其中一種方案。雖然是最常用的,但并不是唯一的方法。禁用cookie后還有其他方法存儲,比如放在url中
  3. 現(xiàn)在后端服務(wù)都是分布式部署,session一般統(tǒng)一放在redis集群中。這樣有個(gè)問題就是一旦redis故障,可能會影響所有的用戶請求。

所以,在后臺進(jìn)行session的存儲和運(yùn)維這件事是非常重要和危險(xiǎn)的,對可靠性的要求非常高。

解決問題其實(shí)一直有兩條路,一是解決問題,二是解決問題本身。

那么,我們有沒有可能不存儲session呢?

token

其實(shí)是可以的。這樣來一步步思考:

  1. 如果我們講所有信息全部放在cookie里,那么只要cookie將用戶的id和狀態(tài)給服務(wù)器傳過去就好了。
  2. 但是,這樣非常危險(xiǎn)。用戶可以隨意偽造cookie,并且非常容易被劫持
  3. 所以,問題變成了,怎么確保安全性?
  4. 答案就是做簽名。在用戶第一次登錄時(shí),服務(wù)端使用如SHA256算法對數(shù)據(jù)進(jìn)行加密。就稱之為token。

下一次瀏覽器把加密后的token帶過來,服務(wù)器再使用相同的算法對數(shù)據(jù)進(jìn) 行一次加密,比較兩次加密的結(jié)果,相等即為驗(yàn)證通過。

因?yàn)樗借€只要服務(wù)器知道。所以用戶過來的請求是無法偽造的。

這樣一來,服務(wù)器不需要再費(fèi)力的保存session數(shù)據(jù)。服務(wù)器端是無狀態(tài)的。即使流量大增,只要增加服務(wù)器即可。

token的優(yōu)勢:

  • 無狀態(tài)、可擴(kuò)展
  • 支持移動(dòng)設(shè)備(移動(dòng)設(shè)備是沒有cookie的)
  • 跨程序調(diào)用
  • 安全

現(xiàn)在大部分你見到過的API和Web應(yīng)用都使用token。例如Facebook, Twitter, Google+, GitHub等。

JWT

我們知道了token技術(shù)是個(gè)好東西,那么我們怎么用呢?

JWT就是token的一種實(shí)現(xiàn)方式,并且基本是java web領(lǐng)域的事實(shí)標(biāo)準(zhǔn)。

JWT全稱是JSON Web Token?;究梢钥闯鍪鞘褂肑SON格式傳輸token

JWT 由 3 部分構(gòu)成:

  1. Header :描述 JWT 的元數(shù)據(jù)。定義了生成簽名的算法以及 Token 的類型。
  2. Payload(負(fù)載):用來存放實(shí)際需要傳遞的數(shù)據(jù)
  3. Signature(簽名):服務(wù)器通過Payload、Header和一個(gè)密鑰(secret)使用 Header 里面指定的簽名算法(默認(rèn)是 HMAC SHA256)生成。

流程:

在基于 Token 進(jìn)行身份驗(yàn)證的的應(yīng)用程序中,用戶登錄時(shí),服務(wù)器通過Payload、Header和一個(gè)密鑰(secret)創(chuàng)建令牌(Token)并將 Token 發(fā)送給客戶端,

然后客戶端將 Token 保存在 Cookie 或者 localStorage 里面,以后客戶端發(fā)出的所有請求都會攜帶這個(gè)令牌。你可以把它放在 Cookie 里面自動(dòng)發(fā)送,但是這樣不能跨域,所以更好的做法是放在 HTTP Header 的 Authorization字段中:Authorization: 你的Token。

JWT 與 Oauth2.0

Oauth 2.0 是一種授權(quán)機(jī)制,用來授權(quán)第三方應(yīng)用,獲取用戶數(shù)據(jù),它與 JWT 其實(shí)并不是一個(gè)層面的東西。Oauth2.0 是一個(gè)方便的第三方授權(quán)規(guī)范,而 JWT 是一個(gè) token 結(jié)構(gòu)規(guī)范。只是 JWT 常用來登陸鑒權(quán),而 Oauth2.0 在授權(quán)時(shí)也涉及到了登陸,所以就比較容易搞混。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
認(rèn)證授權(quán)基礎(chǔ)
Cookie.Session到Token和JWT
Cookie、Session、Token 解析
Cookie、Session、Token 的區(qū)別
什么是session?什么是cookie?session和cookie有什么區(qū)別?
說一說幾種常用的登錄認(rèn)證方式,你用的哪種?
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服