如何实现nodejs鉴权机制,说一下思路
# 是什么
nodejs中鉴权主要是JWT (JSON Web Token)
- 流程 服务器验证用户的账号密码正确的时候,生成一个token,这个token作为后续访问的有效凭证
- 组成
- header
- payload
- sign
# 怎么用
- 生成token
// 第三方库
const jwt = require("jsonwebtoken");
const token = jwt.sign(
{
name: result.name
},
"test_token", // secret
{ expiresIn: 60 * 60 } // 过期时间:60 * 60 s
);
//...
// 返回token
ctx.body = {
code: "0",
message: "登录成功",
data: {
token
}
}
- 请求中添加token
axios.interceptors.request.use(config => {
const token = localStorage.getItem('token');
config.headers.common['Authorization'] = 'Bearer ' + token; // 留意这里的 Authorization
return config;
})
- 解密token
// 注意:放在路由前面
app.use(koajwt({
secret: 'test_token'
}).unless({ // 配置白名单
path: [/\/api\/register/, /\/api\/login/]
}))
# 优缺点
- 优点
- 通用,跨语言
- 字节小,便于传输
- 服务端无需保存会话信息
- 可防护csrf
- 解决单点登录
- 缺点
- 简单编码
- 防止秘钥泄漏
- 避免token被劫持,使用http是协议
# FAQ
上次更新: 2021/12/19, 18:05:42