一、JWT
需要在 HTTP 这种无状态的机制下,记录下(标识)出来是不是连续(逻辑上的连续)的请求。
思路:如果多次请求,携带了相同的标识型数据,则认为是逻辑上连续的。这个标识,就称为token。
token必要的特征:
- 时效性
- 保密性
- 不可篡改性
- 不可伪造性
- 信息携带,具有载荷
JWT,就是典型的token设计方案,被大多数的HTTP后端所采用。
JWT:JSON Web Tokens,将特定数据的JSON编码后,通过签名,base64编码,形成特定的字符串,称为 JWTtoken。
例:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
JWT,由三个部分构成,编码后,使用点分割:
1. header,头信息(属性部分)
{
"alg": "HS256",
"typ": "JWT"
}
2. payload,载荷(数据部分)
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
3. signature,数字签名
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
your-256-bit-secret
) secret base64 encoded
数据采用base64编码,不是加密。
base64编解码网址:把上方token按照点分开去解码内容如上
TOKEN 生成的流程:
- 后端生成,secret key 保存在后端
- 响应给前端
- 前端存储
- 后续请求时携带
前端请求时,通常使用 query-string, header、cookie 的方式进行存储传递。建议使用header的方式,因为没有跨域的问题。
使用header时,通常使用头:
Authorization: Bearer <token>
时人不识凌云木,直待凌云始道高。
谁能比别人领先一步掌握新技术,谁就在竞争中赢得了先机。