首页 > 其他分享 >OpenResty 入门实战(2)--简单使用

OpenResty 入门实战(2)--简单使用

时间:2023-07-30 21:34:39浏览次数:38  
标签:resty 入门 -- jwt lua token OpenResty ngx

本文主要介绍 OpenResty 结合 lua 的使用,Nginx 功能的一般使用可参考:Nginx 入门实战(2)--简单使用;文中所使用到的软件版本:Centos 7.9.2009、OpenResty 1.21.4.2。

1、hello world

server {
  listen 9096;
  server_name  localhost-9096;
  access_log  logs/access-9096.log;

  location /hello {
    default_type text/html;
    content_by_lua_block {
      ngx.say("<p>hello, world</p>")
    }
  }
}

访问相应的地址:

2、jwt token 验证

可以使用 OpenResty 来验证带有 jwt token 的请求,如果验证不通过返回 401 状态码。

2.1、安装 jwt 的 lua 插件

2.1.1、下载插件

下载 lua-resty-jwt 和 lua-resty-hmac 插件:
lua-resty-jwt: https://github.com/SkyLothar/lua-resty-jwt
lua-resty-hmac: https://github.com/jkeys089/lua-resty-hmac

下载后解压:

tar zxvf lua-resty-jwt-0.1.11.tar.gz
unzip lua-resty-hmac-0.06-1.zip

2.1.2、拷贝插件

在 OpenResty 安装目录下新建 lualib-extend 目录,并拷贝两个插件的 lib/resty 目录到该目录下:

/home/mongo/soft/openresty-1.21.4.2 为  OpenResty 的安装目录。

2.1.3、配置 lua 目录

在 nginx/conf/nginx.conf 配置文件中 http 元素下配置 lua 目录:

http {
    ...
    
    lua_package_path '/home/mongo/soft/openresty-1.21.4.2/lualib-extend/?.lua;;';
    
    ...

2.2、编写验证 token 的 lua 程序

新建 nginx/conf/token.lua 文件:

local cjson = require "cjson"
local jwt = require "resty.jwt"

local redirect = "false";
local status = "";

local token = ngx.req.get_headers()["X-AUTH-TOKEN"];

if token == nil then
    redirect = "true";
    status = "NO_TOKEN";
else
    local jwt_obj = jwt:verify("12345678123456781234567812345678",token);
    if not jwt_obj["verified"] then
        redirect = "true";
        status = "INVALID_TOKEN";
    end
end

if redirect == "true" then
    ngx.status = ngx.HTTP_UNAUTHORIZED;
    ngx.header.content_type = "application/json; charset=utf-8";
    ngx.say(status);
    return ngx.exit(ngx.HTTP_UNAUTHORIZED);
end

2.3、通过 token.lua 验证请求

server {
  listen 9096;
  server_name  localhost-9096;
  access_log  logs/access-9096.log;

  location /hello {
    default_type text/html;
    content_by_lua_block {
      ngx.say("<p>hello, world</p>")
    }
  }

  location /token {
    access_by_lua_file conf/token.lua;
    proxy_pass http://10.49.196.33:9096/hello;
  }
}

A、不带 token 访问时

B、使用错误 token 访问时

C、使用正确 token 访问时

 

标签:resty,入门,--,jwt,lua,token,OpenResty,ngx
From: https://www.cnblogs.com/wuyongyin/p/17482903.html

相关文章

  • mermaid学习笔记
    mermaid功能(基础)关于设计各种图来梳理工程接口流程图定义graph[TB|BT|LR|RL]说明是流程图(参数代表从上往下还是从左往右)其他概念---:实线|-->:带箭头实线|==>:带箭头粗实线并且在也可以(==|--)text(--|==)(-|>)来实现线上有文本的格式定义对象:对象[xxx]代表......
  • 7.30
    快开学了,今天开始按照老师的要求整理pta上的编程题,可多了。#include<iostream>usingnamespacestd;intmain(){cout<<"Talkischeap.Showmethecode."<<endl;return0;}#include<iostream>usingnamespacestd;intmain(){inta;......
  • 假期第六周总结
       本周,主要干的事就是去给初二初三的补课,从三点补到八点,每天上课时间五个小时,再加上两个多小时的备课时间,讲的主要是初二的物理数学,初三的数学物理化学,很认真的讲课和准备,用一周基本把每一科的一章讲完了,有点累,不过还行,主要每一科上50分钟,小孩也还蛮有意思,然后我也有准备课......
  • 读《大道至简 ——软件工程实践者的思想》有感
        自学习软件工程以来,我在编程中一直有着不小的困惑。我时常感觉编程时没有逻辑感,时常找不到编程的思路。但在阅读了由王建民老师推荐的《大道至简——软件工程实践者的思想》后,我才真正明白到原来我正是缺少了“大道至简”。   《大道至简——软件工程实践者的......
  • games101 HomeWork6
    Games101HomeWork6导航导航作业要求IntersectP(constRay&ray,constVector3f&invDir,conststd::array<int,3>&dirIsNeg)intheBounds3.hpp:这个函数的作用是判断包围盒BoundingBox与光线是否相交,你需要按照课程介绍的算法实现求交过程。getIntersection(BVHBuil......
  • 2023.7.30值得推荐的一款服务器空间
    ,已经体验一个月咯,非常不错的免费资源,适合大家去了解了解~!他们家的免费空间,免费服务器,非常稳定,非常靠谱,值得拥有,价格厚道~!免备案服务,域名管理等等服务,应有尽有,2023年你值得了解,他们家的免费云服务器还是独立IP的哦,非常非常好,非常NICE~!官网地址:https://www.sanfengyun.com......
  • 硬件管理平台 - 公共项目搭建(Nancy部分)
    项目变更之前使用的是Nancy库进行项目搭建的,使用的Nuget版本及其他引用如下<?xmlversion="1.0"encoding="utf-8"?><packages> <packageid="Microsoft.AspNet.WebApi.Client"version="5.1.1"targetFramework="net451"/> <......
  • 系统安全及应用
    一.账号安全的基本措施1.将用户设置为无法登入 2.锁定用户useradd[用户名]创建用户passwd[用户名]设置密码/etc/passwd中可以修改账户的权限 3.删除用户4.锁定配置文件chattr选项文件名-a让文件或目录仅供附加用途。只能追加-i不得任意更动文件或目......
  • 【个人模板封装】树套树、高维数据结构
    前言这是我个人使用的一些模板封装,限于个人能力,可能存在诸多不足与漏洞,在未加测试直接使用前请务必小心谨慎。更新可能会滞后于我本地的文档,如有疑问或者催更之类的可以在评论区留言。全文模板测试均基于以下版本信息,请留意版本兼容问题。Windows,64bitG++(ISOC++20)stack......
  • 通过组件调用模型实现功能的恶意代码
    一.待解决问题这个恶意代码执行了什么功能?通过什么方式实现其功能?如何实现长久驻留?有什么关键特征,或者说这一类恶意代码有什么关键特征?如何清除该恶意代码造成的影响?二.分析流程这个恶意代码是通过调用组件模型实现其功能,但是在开始的时候走错了方向,花了一个下午的时间......