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 协议传输。