### token
token 也稱作令牌,由uid+time+sign\[+固定參數\]
token 的認證方式類似于**臨時的證書簽名**, 并且是一種服務端無狀態的認證方式, 非常適合于 REST API 的場景;所謂無狀態就是服務端并不會保存身份認證相關的數據
token在客戶端一般存放于localStorage,cookie,或sessionStorage中。在服務器一般存于數據庫中
#### 組成
* uid: 用戶唯一身份標識
* time: 當前時間的時間戳
* sign: 簽名, 使用 hash/encrypt 壓縮成定長的十六進制字符串,以防止第三方惡意拼接
* 固定參數(可選): 將一些常用的固定參數加入到 token 中是為了避免重復查庫
### token認證流程
token 的認證流程與cookie很相似
* 用戶登錄,成功后服務器返回Token給客戶端。
* 客戶端收到數據后保存在客戶端
* 客戶端再次訪問服務器,將token放入headers中
* 服務器端采用filter過濾器校驗。校驗成功則返回請求數據,校驗失敗則返回錯誤碼
### token優點
* 在Token中包含足夠多的用戶信息,JWT能輕松實現單點登錄,因為用戶的狀態已經被傳送到了客戶端。
* 不存在Cookie跨域的限制問題,也不存在Cookie相關的一些攻擊漏洞,例如CSRF。
* 因為有簽名,所以JWT可以防止被篡改。
* 適用于API的安全機制,適用于移動客戶端與PC客戶端的開發,此時Cookie是不被支持的;Token方案則簡單有效,可以用一套Token認證代碼來應對瀏覽器類客戶端和非瀏覽器類客戶端。
* Token已經標準化,有成熟的標準化規范——JSON Web Token(JWT),多種主流語言也都提供了支持(如.NET、Ruby、Java、Python、PHP)。
## token可以抵抗csrf,cookie+session不行
假如用戶正在登陸銀行網頁,同時登陸了攻擊者的網頁,并且銀行網頁未對csrf攻擊進行防護。攻擊者就可以在網頁放一個表單,該表單提交src為`http://www.bank.com/api/transfer`,body為`count=1000&to=Tom`。倘若是session+cookie,用戶打開網頁的時候就已經轉給Tom1000元了.因為form 發起的 POST 請求并不受到瀏覽器同源策略的限制,因此可以任意地使用其他域的 Cookie 向其他域發送 POST 請求,形成 CSRF 攻擊。在post請求的瞬間,cookie會被瀏覽器自動添加到請求頭中。但token不同,token是開發者為了防范csrf而特別設計的令牌,瀏覽器不會自動添加到headers里,攻擊者也無法訪問用戶的token,所以提交的表單無法通過服務器過濾,也就無法形成攻擊
- 概述
- 網絡時延
- 進程間通信
- URI
- URL
- URN
- NAT
- 操作系統基礎
- 內核
- 用戶空間
- 網絡協議模型
- 四層網絡協議模型
- 鏈路層
- 以太網協議
- ARP協議
- RARP協議
- MAC地址
- 網絡層
- IP協議
- ICMP協議
- 子網掩碼
- 傳輸層
- TCP協議
- TCP慢啟動
- TCP性能
- UDP協議
- SCTP協議
- 應用層
- DNS
- TCP/IP協議族
- Socket
- Socket通信模型
- socket和TCP/IP協議族
- Socket三次握手四次揮手
- OSI七層模型
- 物理層
- 數據鏈路層
- 網絡層
- 傳輸層
- 應用層
- HTTP
- 基礎
- HTTP/1.0
- HTTP/1.1
- http2.0
- HTTP報文
- WEB瀏覽器工作機制
- HTTP事務時延
- HTTP與HTTPS區別
- 持久連接
- 用戶驗證
- web結構組件
- 代理
- 正向代理
- 反向代理
- 緩存
- 網關
- 隧道-tunnel
- Agent代理
- http協議補充
- Servlet3異步請求
- ajax
- Comet
- WebSocket
- SPDY協議
- HTTP/2
- QUIC
- WebDAV
- http方法
- http連接
- 短連接&長連接
- 管線化
- 網絡會話
- cookie
- session
- token
- jwt
- cookie與session的區別
- Spring Session
- 分布式session實現方案
- 同源策略
- 跨域
- CORS
- HTTP三大安全問題
- JWT vs OAuth
- HTTPS
- SSL&TLS
- OpenSSL
- HTTPS和TLS/SSL的關系
- X509標準和PKI
- IO模型
- IO
- I/O模型
- 傳統阻塞式I/O
- 非阻塞式I/O
- IO復用
- Connection Per Thread模式
- IO多路復用模型流程
- Reactor模式
- 單Reactor單線程
- 單Reactor多線程
- 主從Reactor多線程
- Proactor模型
- Selector模型
- 信號驅動I/O
- 異步I/O
- select/poll/epoll
- select
- poll
- epoll
- select/poll/epoll適用場景
- 零拷貝原理
- 讀取文件發送網絡內存拷貝
- 零拷貝
- Netty零拷貝
- 密碼學
- 密碼學Hash算法分類
- 加密算法
- 對稱加密
- 非對稱加密
- 數字簽名
- RSA數字簽名算法
- DSA數字簽名算法
- 數字證書
- MAC算法
- web安全
- CSRF攻擊
- XSS
- cookie劫持
- SQL注入
- DDos攻擊
- 常見面試題
- 瀏覽器工作機制和原理
- XSS如何預防
- 如何防止cookie被劫持
- 附錄
- HTTP狀態碼
- 常用的網絡端口