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.0,lua-resty-hmac 和 lua-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)
';
}
}
方法
要加载此库,
您需要在 ngx_lua 的 lua_package_path 指令中指定此库的路径。例如,
lua_package_path "/path/to/lua-resty-jwt/lib/?.lua;;";
。您可以使用
require
将库加载到本地 Lua 变量中。
local jwt = require "resty.jwt"
签名
语法:
local jwt_token = jwt:sign(key, table_of_jwt)
将 table_of_jwt 签名为 jwt_token。
alg
参数指定要使用的哈希算法(HS256
、HS512
、RS256
)。
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_HS256
、A256CBC_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
版本
-
taylorking/lua-resty-jwt 0.1.2用于 Taylor 的 JWT 验证。 2017-06-21 21:03:02
-
taylorking/lua-resty-jwt 0.1.1用于 Taylor 的 JWT 验证。 2017-06-21 20:21:52