一 模块地址
(1)插件安装
+++++++++++++"安装方式"+++++++++++++
1.opm安装 -->'默认'安装的位置
opm get SkyLothar/lua-resty-jwt
2.源码安装,进行copy -->'不建议'
(2)常用方法介绍
① sign
功能: 生成'jwt token'
备注: 无法设置'token的有效期',仅仅'作为测试'
说明: 可以通过'高级语言'的代码在生成'token'设置'expire、issuers'
变相: openresty 的jwt插件并没有提供'时间过期'的校验,可以通过将'token'存到cookies中变相的增加'生命时间'
② verify
核心:关注'成功'和'失败'的jwt_obj
③ claim_spec常用选项
说明:该选项是一个'lua table'
④ sign-jwe
二 实现
需求: 验证通过,允许用户'查询数据',暂时不涉及'openresty的请求阶段的access'
(1) 安装jwt插件
(2)lua高效实现
① 生成token
备注:生产最好存储在'localStorage'本地存储中
② 进行token校验
1)成功
2)key密钥错误导致失败
说明:获取最好是payload字段
3)token过期导致失败
说明: '30s'有效期
注意: '时间'的问题 -->'差8h'
4)base编码问题
(3)生产场景使用
① check.lua 模块
② nginx.conf配置
# openresty作为各种service的api网关
location /service1 {
# 核心是-->access_by_lua
access_by_lua '
local jwt = require("lua.check")
jwt.auth()';
default_type application/json;
proxy_pass http://tomcat;
}
③ 关键字与状态码
ngx.OK, -->"200"
ngx.ERROR, -->"500"
ngx.HTTP_NOT_FOUND, -->"404"
ngx.HTTP_MOVED_TEMPORARILY -->"302"
ngx.HTTP_UNAUTHORIZED -->"401"
++++++++++++++++++"其它方式"++++++++++++++++++
return 401 "认证不通过"
ngx.status = 401
③④⑤⑥