lua-resty-jwt

用于 Taylor 的 JWT 验证。

$ opm get taylorking/lua-resty-jwt

名称

lua-resty-jwt - 用于 ngx_lua 和 LuaJIT 的 JWT

版本

0.1.2

状态

该库仍在积极开发中,并被认为已准备好投入生产。

描述

此库需要一个带有 OpenSSL 的 nginx 构建,ngx_lua 模块LuaJIT 2.0lua-resty-hmaclua-resty-string

概要

        # nginx.conf:
    
        lua_package_path "/path/to/lua-resty-jwt/lib/?.lua;;";
    
        server {
            default_type text/plain;
            location = /verify {
                content_by_lua '
                    local cjson = require "cjson"
                    local jwt = require "resty.jwt"
    
                    local jwt_token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9" ..
                        ".eyJmb28iOiJiYXIifQ" ..
                        ".VAoRL1IU0nOguxURF2ZcKR0SGKE1gCbqwyh8u2MLAyY"
                    local jwt_obj = jwt:verify("lua-resty-jwt", jwt_token)
                    ngx.say(cjson.encode(jwt_obj))
                ';
            }
            location = /sign {
                content_by_lua '
                    local cjson = require "cjson"
                    local jwt = require "resty.jwt"
    
                    local jwt_token = jwt:sign(
                        "lua-resty-jwt",
                        {
                            header={typ="JWT", alg="HS256"},
                            payload={foo="bar"}
                        }
                    )
                    ngx.say(jwt_token)
                ';
            }
        }

方法

要加载此库,

  1. 您需要在 ngx_lua 的 lua_package_path 指令中指定此库的路径。例如,lua_package_path "/path/to/lua-resty-jwt/lib/?.lua;;";

  2. 您可以使用 require 将库加载到本地 Lua 变量中。

        local jwt = require "resty.jwt"

签名

语法:local jwt_token = jwt:sign(key, table_of_jwt)

将 table_of_jwt 签名为 jwt_token。

alg 参数指定要使用的哈希算法(HS256HS512RS256)。

table_of_jwt 示例

    {
        "header": {"typ": "JWT", "alg": "HS512"},
        "payload": {"foo": "bar"}
    }

验证

语法:local jwt_obj = jwt:verify(key, jwt_token, [, leeway])

验证 jwt_token 并返回一个 jwt_obj 表。

加载和验证

    syntax: local jwt_obj = jwt:load_jwt(jwt_token)
    syntax: local verified = jwt:verify_jwt_obj(key, jwt_obj, [, leeway])

验证 = 加载_jwt + 验证_jwt_obj

加载 jwt,检查 kid,然后使用正确的密钥进行验证。

jwt_obj 示例

    {
        "raw_header": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9",
        "raw_payload: "eyJmb28iOiJiYXIifQ",
        "signature": "wrong-signature",
        "header": {"typ": "JWT", "alg": "HS256"},
        "payload": {"foo": "bar"},
        "verified": false,
        "valid": true,
        "reason": "signature mismatche: wrong-signature"
    }

签名-jwe

语法:local jwt_token = jwt:sign(key, table_of_jwt)

将 table_of_jwt 签名为 jwt_token。

alg 参数指定要用于加密密钥的哈希算法 (DIR)。enc 参数指定要用于加密有效载荷的哈希算法 (A128CBC_HS256A256CBC_HS512)

table_of_jwt 示例

    {
        "header": {"typ": "JWE", "alg": "DIR", "enc":"A128CBC_HS256"},
        "payload": {"foo": "bar"}
    }

验证

语法:local jwt_obj = jwt:verify(key, jwt_token, [, leeway])

验证 jwt_token 并返回一个 jwt_obj 表。

示例

安装

建议直接使用最新的 ngx_openresty bundle

此外,您需要配置 lua_package_path 指令以将 lua-resty-jwt 源代码树的路径添加到 ngx_lua 的 Lua 模块搜索路径中,如

        # nginx.conf
        http {
            lua_package_path "/path/to/lua-resty-jwt/lib/?.lua;;";
            ...
        }

然后在 Lua 中加载库

        local jwt = require "resty.jwt"

使用 Docker 进行测试

    docker build -t lua-resty-jwt .
    docker run --rm -it -v `pwd`:/lua-resty-jwt lua-resty-jwt make test

另请参阅

  • ngx_lua 模块:http://wiki.nginx.org/HttpLuaModule

作者

taylorking

许可证

mit

依赖项

jkeys089/lua-resty-hmac >= 0.01, luajit

版本