Cookie
概念
Cookie 是由您访问的网站(Web 服务器)创建并存储在您设备中的小型文本文件
作用
- HTTP 会话管理
- 个性化
- 跟踪
存储
Cookie 存储在您的浏览器上
C:\Users[用户名]\AppData\Local\Microsoft\Edge\User Data\Default\Network
属性
Session ID、Expires、Domain、Path、HttpOnly、Secure、Session、 SameSite
- Strict = 同源发送 cookie
- Lax = 跨域发送 cookie GET 请求
- None = 跨域发送 cookie, 必须同时设置 Secure 属性,否则无效。
导航到目标网址的 GET 请求,只包括三种情况:链接,预加载请求,GET 表单。详见下表。
| 请求类型 | 示例 | 正常情况 | Lax |
|---|---|---|---|
| 链接 | <a href="..."></a> | 发送 Cookie | 发送 Cookie |
| 预加载 | <link rel="prerender" href="..."/> | 发送 Cookie | 发送 Cookie |
| GET 表单 | <form method="GET" action="..."> | 发送 Cookie | 发送 Cookie |
| POST 表单 | <form method="POST" action="..."> | 发送 Cookie | 不发送 |
| iframe | <iframe src="..."></iframe> | 发送 Cookie | 不发送 |
| AJAX | $.get("...") | 发送 Cookie | 不发送 |
| Image | <img src="..."> | 发送 Cookie | 不发送 |
类型
必要 cookies
- Session cookies
- First-party cookies 持久 cookie
- Authentication cookies 身份验证 Cookie
- User-centric security cookies 以用户为中心的安全 Cookie
- User-input cookies 用户输入 Cookie
非必要 cookies
- Analytics and customization cookies 分析和自定义 Cookie
- Advertising cookies 广告 Cookie
- Third-party cookies 第三方 Cookie
- Supercookies
Token
Token 是用于信息交换的自包含且紧凑的 JSON 对象字符串。
Token 类型
- ID token id token
- Access token 授权 token
-
Opaque Access Token
-
JWT Access Token
-
- Refresh token 动态 token
- Bearer token 不记名 token(传递方式)
请求头
Authorization: Bearer token 字符串
JSON Web Token (JWT)
JSON Web Token 是一种标准化对象,用于在两方之间安全地发送数据,就是传输格式。
JSON Web Token 由三部分组成
{{header}}.{{payload}}.{{signature}}
Header
通常,标头由两部分组成,分别描述令牌的类型和签名算法 。
{
"alg": "HS256",
"typ": "JWT"
}
Payload
Payload 是包含所有实际信息的部分。
Signature
标头和有效负载都是 Base64Url 编码的。要对令牌进行签名,需要将编码的标头和编码的有效负载与密钥和签名算法一起使用,以完成签名。
JWT 作为一个令牌(token),有些场合可能会放到 URL(比如 api.example.com/?token=xxx)。Base64 有三个字符+、/和=,在 URL 里面有特殊含义,所以要被替换掉:=被省略、+替换成-,/替换成_ 。
问题
- 大小限制和存储 JWT 数据较大
- 失效 JWT 内部包含失效时间
- 未加密