lua+nginx用户鉴权脚本--get方法

news/2025/10/31 17:26:33/文章来源:https://www.cnblogs.com/chengshaoting/p/19180693

需求: 一个应用暴露在外网,对登录用户做鉴权,相当于白名单用户.
原理: 用户在应用首页登录的时候会有get请求,在请求头中会有一串加密的base64字符串,经过jwt在线解码之后可以看到令牌过期时间,用户名以及其他信息,通过linux自带的base64命令依然可以解码出来

脚本

token.lua

-- 获取用户请求头中含有Authorization认证的token信息
local token = ngx.req.get_headers()["Authorization"]
-- 将token转化为字符串 否则传递参数会有问题
local change = tostring(token)
-- 本地组装cmd执行shell脚本 同时将转化好的token传递给shell
local cmd = ("sh base1.sh " .. change)
-- 使用io.popen的方式执行命令是可以获取到脚本返回值的 os.execute的方式只能获取到系统返回值
local t = io.popen(cmd)
local result = t:read("*all")
-- 读取返回值将返回值转换成为num格式 否则无法判断
local num = tonumber(result)
-- 将返回值进行判断 是否等与两百(返回值自己定义 对应http状态码)不等则返回403 
if num ~= 200 then-- 将403状态返回给ng代理页面    ngx.exit(ngx.HTTP_FORBIDDEN)-- if...end的结束格式    
end
-- 关闭io.popen的方式
t:close()

base1.sh

#!/bin/bash
# 将获取到的token追加到log.txt里 方便自己调试 可注释
echo -e $(date "+%Y-%m-%d %H:%M:%S") "\033[32m ==========> \033[0m" "获取到的加密token有效字段为:" $2 >>name.log
# 将token进行base64解码获取到json格式 从json中过滤preferred_username 并且返回 他的值
name=$(echo -n $2 | awk -F "." '{print $2}' | base64 -d 2>/dev/null | sed 's/,/\n/g' | grep "preferred_username" | sed 's/:/\n/g' | sed '1d' | sed 's/}//g' | sed 's/\"//g')
# 将解析到的名字追加到 name.log中也是为了方便调试
echo -e $(date "+%Y-%m-%d %H:%M:%S") "\033[32m ==========> \033[0m" "base64解码之后的用户名为:" $name >>name.log
# 进行嵌套判断 在首次登陆时token是空的 解析到的名字也是空 这时允许登录 并返回200
if [ -z "$2" ]; thenecho 200# 当有token时 去精准匹配一个叫做name.txt用户库中的名字 有则返回200 没有就返回403
elseif [[ $(grep -w "$name" name.txt | wc -l) == 1 ]]; thenecho 200elseecho 403fi
fi

白名单文件自己去配置吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/952030.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 年算法备案咨询服务公司最新推荐榜,技术实力与合规能力双维度权威测评解析

引言 2025 年算法备案进入 “双轨监管深化期”,《生成式人工智能服务管理暂行办法》等新规实施后,企业备案材料增至 8 项核心模块,双级审核流程使平均备案周期延长 40% 以上,合规难度显著提升。为精准筛选优质服务…

windows系统生成当日的时间戳文件脚本

@ECHO OFF echo.>"%date:~0,4%-%date:~5,2%-%date:~8,2% %time:~0,2%-%time:~3,2%-%time:~6,2%.txt"生成的格式 2022-11-13 15:11:23.txt 用法 新建一个bat文件 把内容拷贝进去即可 用途:我的日报一般在电…

docker中 Created和Exited状态容器导致磁盘空间爆满的处理的方式

完整的停止docker 容器服务docker stop 镜像运行id docker rm 镜像运行id当未对停止运行之后的容器进行rm之后 会占用大量磁盘空间 通过命令找到Created 和Exited状态的容器 并删除他们. for i in `docker ps -a |egre…

智能感应倒液器微波雷达方案和红外方案的优势和劣势

智能感应倒液器其实市面上一直都有,直到近些年才开始慢慢的进行规模性的普及。主要原因是一些公共场所的倒液器通过红外或者微波雷达做成智能无接触的会比较干净卫生。 以公共厕所为例无接触和有接触对比 手动公厕:你…

读完《代码大全2》

《代码大全2》快读完了,最后的部分在讲代码调整、系统和集成。读到这里,我对这本书的理解更深了一层。它教会我的不只是一些知识点,而是一种观念的转变:从“写代码”到“构建软件”。 “写代码”可能只关心一个函数…

2025 年闭式冷却塔,玻璃钢冷却塔,方形冷却塔,圆形冷却塔厂家最新推荐,实力品牌深度解析采购无忧之选!

引言 随着工业领域对冷却设备专业化、高效化需求的不断提升,闭式、玻璃钢、方形、圆形等不同类型冷却塔的市场关注度持续走高。为帮助企业精准筛选优质厂家,本次推荐榜单由制冷空调工业协会联合行业权威检测机构共同…

2025 年湖南冷却塔,长沙冷却塔,封闭式冷却塔,测试设备配套冷却塔厂家最新推荐,聚焦资质、案例、售后的五家机构深度解读

引言 随着湖南地区工业生产、中央空调及测试设备领域的快速发展,对冷却塔尤其是封闭式冷却塔、测试设备配套冷却塔的需求日益增长。为帮助企业精准筛选优质厂家,本次推荐榜单由制冷空调工业协会联合湖南省节能环保产…

2025年口碑好的积分球公司排名前十推荐:合肥金水木光电科技

文章摘要 随着光电检测技术的快速发展,积分球作为光学均匀化与光辐射测量的核心设备,在LED测试、光谱分析等领域需求持续增长。本文基于技术参数、市场口碑、服务能力等维度,对2025年国内积分球厂商进行综合排名,为…

积分球公司的信赖之选:十大好评如潮的靠谱厂家排行榜

文章摘要 随着光电检测技术的快速发展,积分球作为光学测量领域的核心设备,其市场需求持续增长。本文基于技术参数、市场口碑、服务能力等维度,对2025年国内积分球供应商进行综合评估,为行业用户提供选购参考。合肥…

在linux上使用perf火焰图

下载与解压 wget https://github.com/brendangregg/FlameGraph/archive/master.zip && unzip master.zip 或者 yum list perf yum -y install perf.x86_64出图perf record -F 99 -p 14623 -a -g -- sleep 60 …

Windows的hyper-v虚拟机设置静态IP,使用一段时间或者宽带网络变化后,出现宝塔面板页面时好时坏,有时正常,有时无法打开问题,bt status查看宝塔状态又是正常的

这个问题有两个原因,一是: 原来的"新建虚拟交换机"配置文件损坏,导致:ARP 表异常 宿主机与虚拟机之间二层通信中断 网络时好时坏解决方案:重建虚拟交换机 ✅ 1.新建一个虚拟交换机 +2.将虚拟机的网络适…

HT-LFCG-3800+

HT-LFCG-3800+HT-LFCG-3800+ 就是 Mini-Circuits 那颗 LFCG-3800+ 的国产肉身,LTCC 工艺把 DC 到 3.9 GHz 的通带做得像镜面一样平,4.5 GHz 处突然竖起 30 dB 的墙,2.4 GHz 插损低到 0.5 dB 出头,回波在通带里全程…

基础排序算法(六)希尔排序

基础排序算法(六)希尔排序一 希尔排序 希尔排序是一种非常独特且高效的排序算法,它通过一种“先宏观,后微观”的策略来提升效率 1.1 算法特性 1.2 算法原理 1.3 复杂度分析 1.4 使用场景 1.5 代码实现 1.6 常用算法…

2025 年集装袋厂家最新推荐榜:从技术创新到品质管控,深度解析行业优质企业的综合实力与市场竞争力内拉筋 / D 型导电 / C 型导电 / D 型防静电集装袋公司推荐

引言 2025 年工业包装行业发展报告显示,集装袋市场规模同比增长 12.3%,但产品质量差异导致的运输事故率仍占行业安全问题的 31%。为筛选出兼具性能与可靠性的优质品牌,包装联合会联合工业包装技术研究院开展专项测评…

英语词性

英语一共 8大词性(Parts of Speech),每个词在句子中扮演不同的语法角色👇 🧩 1️⃣ 名词 Noun 表示:人、事物、地点、抽象概念 例: people(人) city(城市) happiness(幸福) water(水) 🔹功能: 作主…

组织研磨仪厂家哪家好?2025年知名品牌推荐

在科学研究与工业应用中,组织研磨仪作为样品前处理的关键设备,其性能优劣直接影响到后续实验结果的准确性与可靠性。面对市场上琳琅满目的品牌与型号,如何挑选出最适合自身需求的组织研磨仪厂家,成为了众多科研工作…

openresty中使用ngx.sleep(0)防止worker进程阻塞

本文分享自天翼云开发者社区《openresty中使用ngx.sleep(0)防止worker进程阻塞》.作者:小谢不用谢 1. ngx.sleep(0)的工作原理 在OpenResty中,ngx.sleep(0)函数的作用是让当前的Lua协程主动放弃CPU执行权,以便Nginx…

Playwright定位元素与操作

Playwright 提供了多种灵活的元素定位和交互方式。下面这个表格汇总了其主要的元素定位方法、常见操作函数和一些进阶技巧:类别 方法/函数 说明元素定位方法 page.get_by_role() 通过角色(如button、link)定位page.…

2025 年最新推荐!国内 AI 教育培训机构榜单出炉,涵盖企业 AI 培训 / AI 能力提升 / AI 应用落地等多领域专业机构

引言 随着 AI 教育行业的蓬勃发展,选择靠谱的机构成为企业和个人的关键需求。本次榜单由人工智能教育协会联合行业专家团队测评得出,测评覆盖国内 120 余家 AI 教育机构,采用 “技术实力(30%)、课程质量(25%)、…

信息论之联合熵、边缘熵、条件熵

联合熵(Joint Entropy)是信息论中的一个重要概念,它衡量的是两个或多个随机变量作为一个整体的平均不确定性。 边缘熵(Marginal Entropy)是信息论中的一个概念,它指的是在多变量概率分布中,仅考虑单个随机变量时…