怎么使用Nginx和Lua进行JWT校验
发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,这篇文章将为大家详细讲解有关怎么使用Nginx和Lua进行JWT校验,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Lua脚本这里的secret我遇到了很大的坑。一开
千家信息网最后更新 2025年11月13日怎么使用Nginx和Lua进行JWT校验
这篇文章将为大家详细讲解有关怎么使用Nginx和Lua进行JWT校验,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
Lua脚本
这里的secret我遇到了很大的坑。一开始直接从Java后端项目中复制了密钥出来,但是一直提示signature mismatch:,后来发现后端应用中使用base64decode相关方法,在Lua脚本中增加了ngx.decode_base64(secret)处理secret后解决问题。其实到这里还没有解决问题,在后端debug代码的时候,发现后端密钥被decode的结果是一串乱码,为了避免乱码的问题,通过https://www.base64encode.org/重新生成secret才最终解决了问题。
如果你的项目中也遇到了这个signature mismatch:错误,需要排查一下后端在生成token的时候,是否有对secret进行decode或者其它处理,在lua脚本中也要进行相应的处理。

nignx.conf配置
-- nginx-jwt.lualocal cjson = require "cjson"local jwt = require "resty.jwt"--your secretlocal secret = "yoursecrethere"--无需鉴权api清单local no_need_token_api_list = {'/api/register', '/api/login'}local function ignore_url (val) for index, value in ipairs(no_need_token_api_list) do if (value == val) then return true end end return falseendlocal M = {}function M.auth() if ignore_url(ngx.var.request_uri) then return else end -- require Authorization request header local auth_header = ngx.var.http_Authorization if auth_header == nil then ngx.log(ngx.WARN, "No Authorization header") ngx.exit(ngx.HTTP_UNAUTHORIZED) end -- require Bearer token local _, _, token = string.find(auth_header, "Bearer%s+(.+)") if token == nil then ngx.log(ngx.ERR, "Missing token") ngx.exit(ngx.HTTP_UNAUTHORIZED) end --decode_base64和后端保持一致 local jwt_obj = jwt:verify(ngx.decode_base64(secret), token) if jwt_obj.verified == false then ngx.log(ngx.ERR, "Invalid token: ".. jwt_obj.reason) ngx.status = ngx.HTTP_UNAUTHORIZED ngx.say(cjson.encode(jwt_obj)) ngx.header.content_type = "application/json; charset=utf-8" ngx.exit(ngx.HTTP_UNAUTHORIZED) endendreturn MDockerfile配置
worker_processes 1;events{ worker_connections 1024;}http{ lua_package_path "/opt/lua-resty-jwt/lib/?.lua;;"; upstream backend { server 192.168.1.1:8080; } access_log /logs/nginx_access.log; error_log /logs/nginx_error.log; server { listen 80; #后端api接口代理 location /api/ { access_by_lua_block { local obj = require('nginx-jwt') obj.auth() } proxy_pass http://backend; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }}关于"怎么使用Nginx和Lua进行JWT校验"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
问题
篇文章
脚本
处理
乱码
密钥
时候
更多
项目
生成
配置
不错
实用
很大
一致
代码
内容
接口
文章
方法
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
db数据库增加字段
加强全民网络安全什么意思
军营网络安全教育展板
国庆元旦假期网络安全
服务器账户
db2数据库事务超时间
移动软件开发价格
java连接小程序云数据库
怎么建立模板数据库
明日之后莹草小镇服务器
cisco常用日志服务器
软件登录时数据库连接错误
如何将材质包加入我的世界服务器
软件开发证
软件开发企业注册前置件
西安互联网金融科技
计算机三级网络技术刷题能过吗
上海企晟互联网科技有限公司
网络安全工程师认证6
星空壁纸引擎服务器是国内吗
服务器 主机 区别
襄阳水利和湖泊局网络安全建设
通过搭建虚拟网络安全实验环境
长沙软件开发定制费用
网络安全知识宣传教育目的
软件开发流程制度管理
移动网络技术岗面试自我介绍
上海高科技网络技术维修价格
软件开发包硕士论文
陕西秦安网络安全宣传