`

lua 实现请求签名验证

    博客分类:
  • lua
阅读更多
签名类
--第三方类库
dofile("/usr/local/nginx/lua/resty/sha1.lua");
--调试日志
local function log(msg)
        local file = io.open('/tmp/test', 'a+')
        io.output(file)
        io.write('==========='..msg.."\n")
        io.close(file)
end

local Auth = {}
Auth.__index = Auth

function Auth:new()
        local self = {}
        setmetatable(self, Auth)
        return self
end

function Auth:check(sign)
        if sign ~= nil and sign:find("|") ~= nil then
                local pos = sign:find("|")
                hmac = sign:sub(pos+1)
                expire = sign:sub(0, pos-1)

                --log(expire)    
--sha1 加密key,可以自行约定
                if hmac_sha1("sha1", expire) == hmac and tonumber(expire) >= os.time() then
                        return true;
                end
        end

        return false
end

return Auth



在nginx中调用
access_by_lua_file '/usr/local/nginx/lua/access.lua';

local sign = ngx.var.arg_sign --这个签名可以根据需要传递
local Auth = require "resty.auth"
local auth = Auth:new();
if auth:check(sign) then
        ngx.exec("/inline") --目前接口
else
        ngx.status = 403
        ngx.say("forbidden")
        ngx.exit(ngx.HTTP_OK)
end



参考:
http://www.stavros.io/posts/writing-an-nginx-authentication-module-in-lua/
分享到:
评论

相关推荐

    基于Lua开发用在nginx服务器端作签名验证处理程序代码包.zip

    基于Lua开发用在nginx服务器端作签名验证处理程序代码包.zip 一般我们在请求服务器端的接口时都需要进行签名认识,很多时候都是在PHP程序里将参数按照字母排序,然后连接成一个字符串,再加上一串独立密钥最后md5...

    使用Lua开发的服务器端RSA签名服务程序lua-api-trunk.zip

    基于Lua开发用在nginx服务器端作签名验证处理程序代码包.zip 一般我们在请求服务器端的接口时都需要进行签名认识,很多时候都是在PHP程序里将参数按照字母排序,然后连接成一个字符串,再加上一串独立密钥最后md5...

    hmacsha256.zip

    例如,当用户发送请求时,服务器可以使用HMAC-SHA256对请求数据进行签名,然后将签名和原始数据一起发送给机器人。机器人接收到数据后,使用相同的密钥重新计算HMAC并进行比对,确认数据的完整性和来源。 由于提供...

    lua-resty-jwt:JWT为伟大的Openresty

    这个库允许你在Nginx Lua模块中处理JWT,这样就可以在HTTP请求处理阶段进行身份验证,从而提高了性能和效率。 **主要功能** - **生成JWT**:lua-resty-jwt库提供了生成JWT的方法,你可以设置过期时间、添加自定义...

    微服务Api网关框架46-50.7z

    在这个压缩包中,包含了一系列关于如何使用OpenResty实现微服务API网关功能的视频教程,主要涉及接口签名验证、OpenResty执行流程解析以及访问频率和黑名单控制。 首先,"46.openresty执行详解之内容阶段.mp4"和"47...

    使用Lua编写Nginx服务器的认证模块的方法

    在本文中,我们将探讨如何使用Lua语言编写Nginx服务器的认证模块,以实现类似社交应用接入的功能。Nginx是一个高性能的HTTP和反向代理服务器,而Lua是一种轻量级的脚本语言,它的集成使得Nginx能进行更复杂的逻辑...

    微服务Api网关框架51-58.7z

    通过在网关层添加签名验证插件,可以对传入的API请求进行校验,确保请求来源的合法性,增强系统的安全性。 “56.openresy实现网关之黑名单插件.mp4”可能讲述了如何实施访问控制策略,如IP黑名单。当特定的客户端...

    lua-twitter:与OpenResty或LuaSocket一起使用的Lua Twitter库

    1. **OAuth 认证**:Twitter API 需要 OAuth 身份验证,`lua-twitter` 提供了完整的 OAuth 支持,包括签名生成、授权URL生成以及访问令牌的管理,确保安全地访问用户数据。 2. **API 接口封装**:`lua-twitter` ...

    Unity3d 基于xlua热更新实现系列四(终章):构建资源服务器实现真正热更新的压缩包下载、解压和更新功能源码

    可以使用数字签名或哈希校验来验证下载的文件完整性。同时,为了提高用户体验,可以采用多线程下载、分块下载等策略,以减少用户等待时间。 七、实战源码 在提供的压缩包文件中,"Assets"目录包含了游戏的资源和...

    WSE3.0学习资料

    WS-SecureConversation**: 这个规范建立了一种机制,允许在多个请求之间保持一个安全会话,减少了每次请求都需要重新协商安全凭据的开销。WSE3.0通过实现WS-SecureConversation,提供了高效的会话安全。 **4. WS-...

    matlab开发-Laravel开发-laravel-kong-jwt .zip.zip

    JWT允许用户在不直接与服务器交互的情况下在不同的服务之间安全地传输信息,因为它们包含了用户认证所需的所有信息,并且可以通过签名验证其完整性。 在Laravel中集成Kong和JWT,开发者可以创建一个安全的API接口,...

    农行商e付java版已调通

    1. **支付网关集成**:农行商e付是一个支付网关,负责处理交易请求、验证支付信息、处理退款等操作。开发过程中,需要与银行提供的API进行交互,通过HTTP请求或WebSocket等通信协议完成数据交换。 2. **安全机制**...

    liveupdatetest

    为了保证安全,可能还需要实现一套权限控制和签名验证机制。 不过,由于没有实际的代码内容,以上都是基于通用实践的推测。要获取更具体的信息,需要查看"liveupdatetest-main"中的源码。如果你能提供这部分内容,...

    ESP8266Project.rar

    5. **安全考虑**:确保OTA过程的安全性,包括固件签名验证,防止未授权的固件更新,以及防止中间人攻击。 6. **错误处理与恢复机制**:在升级过程中可能会遇到各种问题,如网络中断、电源故障等,因此良好的错误...

    Redis分布式锁解决接口幂等的两种方案

    - 由于`SETNX`与`PEXPIRE`不是原子操作,可以通过Redis的Lua脚本实现原子性。 2. **Redisson框架**: Redisson是基于Redis的Java客户端,它提供了完善的分布式锁实现。除了基本的加锁、解锁功能,还支持锁监控...

    小米2019秋招安全开发笔试题.docx

    - 代码段中的 `lua` 代码存在命令注入漏洞,因为 `url:gsub()` 后的 `wget` 命令直接使用了未验证的用户输入。 18. **CORS**: - CORS 允许 a. 客户端跨域获取服务器返回数据。 19. **设备升级安全**: - 使用 ...

    ESP8266学习

    物联网设备的安全性至关重要,学习如何保护ESP8266免受攻击,如使用WPA2加密、固件签名验证、防止DoS攻击等。 以上知识是学习ESP8266的基础,结合`ESP8266Learn-main`这个压缩包中的示例代码和教程,你可以逐步...

    网狐荣耀版开发使用常见问题解答

    但是,短信验证怎么实现呢?很多开发者有时会出现暂时的迷茫。下面我就把大概的思路告诉大家。一、申请短信通道,国内的短信通道很多,不同的通道速度不一样,我们在申请时要一个基本原则就是速度要快,基本上要发送...

Global site tag (gtag.js) - Google Analytics