千家信息网

怎么使用Nginx和Lua进行JWT校验

发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,这篇文章将为大家详细讲解有关怎么使用Nginx和Lua进行JWT校验,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Lua脚本这里的secret我遇到了很大的坑。一开
千家信息网最后更新 2025年01月22日怎么使用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 M

Dockerfile配置

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安全错误 数据库的锁怎样保障安全 南昌理工学院计算机网络技术 高可用扩展网络技术实施方案 网络安全对国防建设的影响 数据库join有几种常见用法 县委对网络安全 公司服务器怎么上云安全 天津网络技术转让市场价格 广州科峰网络技术有限公司 创造空数据库的步骤 梦幻手游2021服务器火区排行 数据库中创建表修改存储引擎 苹果邮箱为何无法登陆服务器 平度ios软件开发外包公司 定时任务同步数据库 电脑数据库坏了重新做系统怎么做 php数据库选择错误 学生不良行为数据库 网络安全伴我行手抄报最美丽 世界上网络技术最发达的国家 电大计算机网络技术课程 上海股票软件开发定制 点击取消已关闭服务器管理器 bvd数据库是哪个公司的 软件开发过程中的沟通问题 闵行区项目数据库服务清单 网约车软件开发资质 好易买互联网科技有限公司 数据库查询结果导出 最小的两级的数据库 提取数据库数组php
0