在CentOS7环境中,实现使用openresty配置文件,达到jwt指定用户userid不能访问的效果

这篇具有很好参考价值的文章主要介绍了在CentOS7环境中,实现使用openresty配置文件,达到jwt指定用户userid不能访问的效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

#在CentOS7环境中,实现使用openresty配置文件,达到jwt指定用户userid不能访问的效果。

首先,你需要安装 OpenResty 和 JWT 组件:

  1. 安装 OpenResty

参考 OpenResty 的官方安装文档,在终端执行如下命令:

$ sudo yum install yum-utils
$ sudo yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
$ sudo yum install openresty
  1. 安装 LuaRocks 和 JWT
$ sudo yum install epel-release -y
$ sudo yum install lua-nginx* -y
$ sudo yum install curl -y
$ sudo yum install wget -y
$ sudo yum localinstall https://luarocks.org/releases/luarocks-3.5.0.tar.gz
$ sudo luarocks install lua-resty-jwt

接下来,你可以在 OpenResty 配置文件中实现需求:

  1. 在 nginx.conf 文件中,添加 http 块:
http {
...
}
  1. http 块中添加以下内容:
# 在 server 块中定义变量
lua_shared_dict jwt_dict 10m;
init_by_lua_block {
  local jwt = require "resty.jwt"
  local jwt_secret = "your-jwt-secret"

  -- 将 jwt 验证结果保存到共享内存中
  function save_jwt_result(jwt_result)
    local dict = ngx.shared.jwt_dict
    local key = ngx.var.http_authorization
    local expires = 60 * 60 -- 设置过期时间为一小时
    if jwt_result.valid then
      dict:set(key, jwt_result.payload, expires)
    else
      dict:set(key, 0, expires)
    end
  end

  -- 验证 jwt
  function validate_jwt()
    local auth_header = ngx.var.http_authorization
    if not auth_header then
      ngx.exit(401)
    end
    local jwt_token = string.match(auth_header, "^Bearer%s+(.+)$")
    if not jwt_token then
      ngx.exit(401)
    end
    local jwt_obj = jwt:verify(jwt_secret, jwt_token)
    save_jwt_result(jwt_obj)
    if not jwt_obj.valid then
      ngx.exit(401)
    end
  end
}

# 定义 server 块
server {
  listen 7000;
  server_name localhost;

  # 声明 location 块,匹配 /api/ 开头的请求
  location ^~ /api/ {
    # 验证 jwt
    access_by_lua_block {
      validate_jwt()
      -- 查询 PostgreSQL 数据库,获取 accountblack 表
      -- 如果用户 userid 被加入了黑名单,返回 403 状态码,否则继续执行
      local pgsql = require("resty.postgres")
      local pg = pgsql:new()
      pg:set_timeout(1000)

      -- 连接 PostgreSQL 数据库
      local ok, err = pg:connect{
          host = "your-postgres-db-host",
          port = 5432,
          database = "your-postgres-db-name",
          user = "your-postgres-db-username",
          password = "your-postgres-db-password"
      }

      if not ok then
          ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR)
      end

      -- 查询用户是否在黑名单中
      local account_black_sql = string.format("SELECT accountid FROM accountblack WHERE userid = %s", ngx.var.jwt_payload.sub)
      local account_black_result, err = pg:query(account_black_sql)
      if not account_black_result then
          ngx.log(ngx.ERR, "Failed to query accountblack: ", err)
          ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR)
      end

      if account_black_result[1] ~= nil then
          ngx_exit(ngx.HTTP_FORBIDDEN)
      end
    }

    # 转发请求
    proxy_pass http://172.16.01.6:8029/;
  }
}
  1. 其中,save_jwt_result(jwt_result) 函数用于将 jwt 验证结果存储到共享内存中,validate_jwt() 函数用于验证 jwt,access_by_lua_block 即 access 阶段执行的 Lua 代码块。在 access_by_lua_block 中,我们查询 PostgreSQL 数据库,获取 accountblack 表,如果用户 userid 在黑名单中,返回 403 状态码,否则继续执行,并将请求转发到 http://172.16.01.6:8029/

当用户请求 /api/ 接口时,将会首先执行 validate_jwt() 函数,验证 jwt 是否有效。如果 jwt 有效,我们将会查询 PostgreSQL 数据库,检查用户 userid 是否在黑名单表中。如果用户在黑名单中,请求将会被拒绝并返回 403 状态码;否则请求将会被转发到指定地址,并且在转发过程中会自动添加上验证后的 jwt 信息。文章来源地址https://www.toymoban.com/news/detail-486439.html

到了这里,关于在CentOS7环境中,实现使用openresty配置文件,达到jwt指定用户userid不能访问的效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • centos7手动配置jdk1.8环境与maven环境

    链接:https://pan.baidu.com/s/1_P7jHzH4Lk2jcPWWD7pi4w 提取码:6kkm winscp软件上传压缩包到Linux中 解压 配置环境变量 vi /etc/profile Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7arch=x86_64repo=osinfra=stock error was 14: curl#6 - “Could not resolve host: mirrorlist.centos.org; 未知的错误” cd /etc/syscon

    2024年02月09日
    浏览(38)
  • CentOS7.9-虚拟机yum源环境配置(本地/网络)

    一、配置本地yum源 1.把系统镜像连接到cdrom,并把镜像文件挂载到/mnt/cdrom下 #挂载镜像文件 mkdir -p /mnt/cdrom mount /dev/cdrom /mnt/cdrom 2.配置yum源文件 #本地yum源配置 cd /etc/yum.repos.d/ touch centos79.repo vi centos79.repo         [centos79]         name=centos79         baseurl=file:///mnt/cdrom      

    2024年02月08日
    浏览(54)
  • centos7安装zookeeper的环境变量配置导致用户登录不了系统

    废话不多说,我修改的/etc/profile,如果这个文件改错会造成所有用户都登录不了系统。 第一步:解决进不了系统 1.在登陆界面按:alt +ctrl+f2进入命令模式,输入密码登录后再输入: /usr/bin/sudo /usr/bin/vi /etc/profile 注意空格; 2.修改或者删掉被你改动的部分,保存,退出,重启就

    2024年02月12日
    浏览(52)
  • Centos7原生hadoop环境,搭建Impala集群和负载均衡配置

    Impala集群包含一个Catalog Server (Catalogd)、一个Statestore Server (Statestored) 和若干个Impala Daemon (Impalad)。Catalogd主要负责元数据的获取和DDL的执行,Statestored主要负责消息/元数据的广播,Impalad主要负责查询的接收和执行。 Impalad又可配置为coordinator only、 executor only 或coordinator and exe

    2024年02月04日
    浏览(56)
  • Ladp数据库安装和配置自定义schema ,Centos7环境

    最近安装ldap看了不少教程,整理下用到的有用的资料,并把自己的搭建过程分享。 ldap介绍:openLDAP入门与安装 官方文档:https://www.openldap.org/doc/admin22/schema.html 安装配置:Centos7 搭建openldap完整详细教程(真实可用) bug解决:ldap运维中遇到的问题 schema自定义:导入schema到openL

    2024年02月12日
    浏览(53)
  • 【Linux】Linux上的一些软件安装与环境配置(Centos7配置JDK、Hadoop)

    查询已安装的 jdk 列表 删除已经安装的 jdk 如果终端出现以下错误: /var/run/yum.pid 已被锁定,PID 为 1610 的另一个程序正在运行 。则输入以下命令:之后再执行以上删除 jdk 的命令 将 jdk-8u151-linux-x64.tar.gz 安装包通过 xftp 传到 CentOS 7 上 下载地址:链接:https://pan.baidu.com/s/1c-pl

    2024年04月10日
    浏览(60)
  • 删除linux(centos7)系统自带的open jdk,安装配置jdk环境

    安装的linux自带jdk8版本,我们不用自带的。 1、下载 下载地址:https://www.oracle.com/java/technologies/downloads 2、创建目录 创建文件夹,用来部署JDK,将JDK安装部署到:/export/server 内 3、解压缩JDK安装文件 将下载的文件上传到linux中,并解压到server目录下 4、配置JDK的软链接 5、配置

    2024年02月09日
    浏览(61)
  • Centos7安装、各种环境配置和常见bug解决方案,保姆级教程(更新中)

    因为网上关于Centos7安装教程实在是太多了,我这里就不重复造轮子了,直接上传送门 点击这里安装Centos7 安装好后就是各种要配置的东西了,我这里将各种有用的配置都记录了下来,方便以后重新安装的时候再查看 centos7默认没有 netstat 命令,需要安装 net-tools 工具, 1、进入

    2024年02月03日
    浏览(46)
  • CentOS7配置FRPS实现内网穿透

    FRP(Fast Reverse Proxy)是一个用于进行内网穿透的工具,可以方便地将本地网络服务映射到公网上。本文将指导您在CentOS 7上安装和配置FRPS,以便您能够实现内网穿透。 首先,我们需要下载FRPS程序包并上传到您的CentOS 7服务器。请按照以下步骤操作: 访问FRP的GitHub页面:http

    2024年02月06日
    浏览(34)
  • (Linux)Centos7.*版本安装配置Java环境、Tomcat、Nginx并打包部署SSM框架web系统

    目录 一、准备软件与安装包 (一)、必须的软件 1、点击下载Xshell 2、点击下载FileZilla (二)、准备安装包 1、点击下载JDK1.8Linux版本 2、点击下载Nginx 3、点击下载Tomcat   二、关于FileZilla软件的使用说明 (一)、FileZilla软件的打开和说明 (二)、配置服务器地址去连接服务器  三、X

    2023年04月25日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包