四、JWT在Koa框架中实现用户的认证与授权
JWT是什么
- JSON Web Token是一个开放标准(RFC7519)
- 定义了一种紧凑且独立的方式,可以将各方之间的信息作为json对象进行安全传输
- 该信息可以验证和信任,因为是经过数字签名的。
JWT的构成
Header
typ
TOKEN的类型,固定为JWT
alg
使用hash算法
Payload
存储需要传递的信息,如用户ID、用户名等
还包含元数据,如过期时间、发布人等
与 Header不同, Payload可以加密
Signature
对 Header和 Payload部分进行签名
保证 Token在传输的过程中没有被篡改或者损坏
NodeJs中使用JWT
安装
jsonwebtokenyarn add jsonwebtoken使用
const jsonwebtoken = require('jsonwebtoken') const token = jsonwebtoken.sign({ _id, name }, secret, { expiresIn: "1d" })第一个参数
需要存放的信息
第二个参数
加密的密钥
第三个参数
过期时间
用户认证与授权
用户认证
const jsonwebtoken = require('jsonwebtoken')
const auth = async (ctx, next) => {
const { authorization = '' } = ctx.request.header
const token = authorization.replace("Bearer ", '')
try {
const user = jsonwebtoken.verify(token, secret)
ctx.state.user = user
} catch (err) {
ctx.throw(401, err.message)
}
await next()
}
// 在需要认证的路由中使用中间件
router.patch('/:id', auth, update)
router.delete('/:id', auth, del)授权
授权建立在认证的基础上。因此授权我们再写一个中间件。
async checkOwner (ctx, next) {
if (ctx.params.id !== ctx.state.user._id) {
ctx.throw(403, '你没有权限')
}
await next()
}在认证中间件后继续引用。
router.patch('/:id', auth, checkOwner, update)
router.delete('/:id', auth, checkOwner, del)使用koa-jwt中间件实现用户认证与授权
安装koa-jwt
yarn add koa-jwt使用
const jwt = require('koa-jwt') // 加密密钥 const auth = jwt({ secret })
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小康博客!
评论
TwikooDisqusjs









