当前位置: 首页 > news >正文

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

需求: 一个应用暴露在外网,对登录用户做鉴权,相当于白名单用户.
原理: 用户在应用首页登录的时候会有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.jsqmd.com/news/27736/

相关文章:

  • 2025 年算法备案咨询服务公司最新推荐榜,技术实力与合规能力双维度权威测评解析
  • windows系统生成当日的时间戳文件脚本
  • docker中 Created和Exited状态容器导致磁盘空间爆满的处理的方式
  • 智能感应倒液器微波雷达方案和红外方案的优势和劣势
  • 读完《代码大全2》
  • 2025 年闭式冷却塔,玻璃钢冷却塔,方形冷却塔,圆形冷却塔厂家最新推荐,实力品牌深度解析采购无忧之选!
  • 2025 年湖南冷却塔,长沙冷却塔,封闭式冷却塔,测试设备配套冷却塔厂家最新推荐,聚焦资质、案例、售后的五家机构深度解读
  • 2025年口碑好的积分球公司排名前十推荐:合肥金水木光电科技
  • 积分球公司的信赖之选:十大好评如潮的靠谱厂家排行榜
  • 在linux上使用perf火焰图
  • Windows的hyper-v虚拟机设置静态IP,使用一段时间或者宽带网络变化后,出现宝塔面板页面时好时坏,有时正常,有时无法打开问题,bt status查看宝塔状态又是正常的
  • HT-LFCG-3800+
  • 基础排序算法(六)希尔排序
  • 2025 年集装袋厂家最新推荐榜:从技术创新到品质管控,深度解析行业优质企业的综合实力与市场竞争力内拉筋 / D 型导电 / C 型导电 / D 型防静电集装袋公司推荐
  • 英语词性
  • 组织研磨仪厂家哪家好?2025年知名品牌推荐
  • openresty中使用ngx.sleep(0)防止worker进程阻塞
  • Playwright定位元素与操作
  • 2025 年最新推荐!国内 AI 教育培训机构榜单出炉,涵盖企业 AI 培训 / AI 能力提升 / AI 应用落地等多领域专业机构
  • 信息论之联合熵、边缘熵、条件熵
  • P9755 [CSP-S 2023] 种树
  • 登录后编码错误提示处理
  • 2025 升降机厂家最新推荐权威榜单!附协会测评数据与核心优势深度解析
  • 【ArcMap】修改选中路线的属性表的列名
  • 审计组件
  • vscode launch.json debug 带caffe库的工程代码
  • PADS丨出 gerber 通用教程
  • jmeter阶梯试压测
  • 实用指南:UNIX下C语言编程与实践20-UNIX 文件类型判断:stat 结构 st_mode 与文件类型宏的使用实战
  • uni-app x开发商城系统,社区图片,左侧结构样式,数据渲染,点击高亮