### 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状态码
- 常用的网络端口