Jwt
GitbookKb2020-12-29
后端
📑 1. 依赖模块
- jsonwebtoken
📑 2. 代码
const jwt = require("jsonwebtoken");
// 签名loginInfo包括所有需要信息。
const token = jwt.sign(loginInfo, SECRET, {
expiresIn: 86400,
});
// 或者只是签名id:
const token = jwt.sign({ id: user.id }, SECRET, {
expiresIn: 86400,
});🪕 前端
📑 1. 依赖模块
- jwt_decode
- jsonwebtoken
两者相同,选用前者因为它更轻量级。 jwt_decode(token) == jwt.decode(token);
📑 2. 代码
import jwt_decode from "jwt-decode";
const token = sessionStorage.getItem("authToken");
let decoded = jwt_decode(token);decoded 输出:
{
id: 2
account: "mxyw1"
name: "项目经理"
phone: null
department: {id: 1, name: "业务发展部"}
roles: [{id: 1, name: "项目经理"}]
organization: {id: 1, name: "融单平台", credit_no: "credit_no"}
user: {account: "mxyw1", id: 2, isAdmin: false, phone: null}
iat: 1580439953
exp: 1580526353
}🪕 说明
📑 1. 认证
常应用于服务端认证接口的 无 session 方案 ,这是 Jwt 最常用的场景,一旦用户登录成功,就会得到 Jwt ,然后请求中就可以带上这个 Jwt 。服务器中 Jwt 验证通过,就可以被允许访问资源。甚至可以在不同域名中传递,在单点登录(Single Sign On)中应用广泛。
📑 2. 使用方式
- 把 JWT 放在 HTTP 请求的头信息 Authorization 字段里面。
Authorization: Bearer <token>- 另一种做法是,跨域的时候,JWT 就放在 POST 请求的数据体里面。
- 为了减少盗用,
JWT不应该使用HTTP协议明码传输,要使用HTTPS协议传输。
