zoukankan      html  css  js  c++  java
  • 基于nginx的token认证

    Nginx 的 token 认证是基于集成了 nginx+lua 的 openresty 来实现的.

    • 环境: centos 7
    • 部署方式: 增量部署(不影响原 nginx 版本)
    • 版本: openresty/1.13.6.2
    • 启动命令:1.原版本通过nginx命令启动.
      2.新版本通过openresty命令启动.

    需求:

    对指定域名增加 http 请求头(header)验证,

    请求头为 xxxx=xxxxx 形式.

    如果验证不通过,返回 403 ‘请求头验证失败 或 Error request forbidden ’

    实际代码示列:

      server {
            listen       80;
            server_name  www.aaa.com;
            access_log  logs/host.access.log  main;
            location /a/b/c {
                    access_by_lua '
                    local args = ngx.req.get_headers(); --获取请求中 header 头的列表.
                    local token1 = args["appid"];   --取出 header 头中key为 appid 的值.
                    local token2 = "123456";  --定义一个局部变量.
                    local errs = "oh,Only Authorized Request will be Processe"  --定义错误提示消息
                    if not token1 then
                            ngx.status = ngx.HTTP_FORBIDDEN --返回错误码
                            ngx.say(errs)  --返回错误消息
                            ngx.exit(200) -- 跟以上两个连用,固定写法
                    end
     
                    if token1 ~= token2 then
                            ngx.status = ngx.HTTP_FORBIDDEN
                            ngx.say(errs)
                            ngx.exit(200)
                    else
                            return
                    end
                    ';
                    proxy_pass http://www.google.com;
            }
    }
    

    实施过程中的坑:

    背景介绍:
    1.我是拷贝的原 nginx 下的配置文件,原 nginx 版本为 1.12.2.
    2.测试环境为 openresty 中的nginx,版本为 1.13.6.2
    我以为配置文件是通用的,虽然原版本 nginx 的配置文件在新版本中不兼容的部分,我都替换了,但还是产生了奇怪的问题...

    • 测试环境通过,生产环境无论怎么修改配置都无法通过,中间浪费了很多时间,最后基于新 nginx 配置文件重写了整个配置,解决了问题.

    致谢:

    openresty 最佳实践

    Nginx 使用 Lua 模块校验 Token

    用lua扩展你的Nginx(写的非常好)

    nginx 状态码

  • 相关阅读:
    java 放射机制简介
    java 放射机制简介
    后海日记(1)
    后海日记(1)
    java 发邮件 代码
    java 发邮件 代码
    hadoop学习笔记411
    hadoop学习笔记411
    swoole_table
    用swoole简单实现MySQL连接池
  • 原文地址:https://www.cnblogs.com/jonnyan/p/9824264.html
Copyright © 2011-2022 走看看