使用 lua/openresty 验证 jwt 令牌
verify a jwt token with lua/openresty
我有一个来自 aws cognito 登录过程的 jwt 令牌。这个令牌需要从应用程序发送到其他一些 api(通过 cookie 或 bearer header,我还没有决定)。
接收 api 已在 nginx/openresty 后面代理,所以我想在上游之前验证 jwt 令牌
我正在使用这个库(似乎是最新的)
https://github.com/cdbattags/lua-resty-jwt
然后我按照以下步骤操作:
从我的帐户下载 jwks 文件
wget https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_5zCVSiMVH/.well-known/jwks.json
使用 jwks2pem
将 jwks 转换为 pem
cat jwks.json| jwks2pem > key.pem
然后这个代码
local jwt = require "resty.jwt"
local key = [[ -----BEGIN PUBLIC KEY-----
(content of key.pem)
-----END PUBLIC KEY-----
]]
local jwt_token = ""
local jwt_obj = jwt:load_jwt(jwt_token)
local verified = jwt:verify_jwt_obj(key, jwt_obj)
ngx.say(cjson.encode(jwt_obj))```
代码失败:
$ resty jwt.lua
{"valid":false,"reason":"invalid algorithm: RS256","verified":false}
我哪里错了?
ok,问题是关键。
我已经使用其他工具 https://www.npmjs.com/package/jwk-to-pem
成功地从 jwks 获得了 pem 密钥
验证现在有效
我有一个来自 aws cognito 登录过程的 jwt 令牌。这个令牌需要从应用程序发送到其他一些 api(通过 cookie 或 bearer header,我还没有决定)。
接收 api 已在 nginx/openresty 后面代理,所以我想在上游之前验证 jwt 令牌
我正在使用这个库(似乎是最新的) https://github.com/cdbattags/lua-resty-jwt
然后我按照以下步骤操作:
从我的帐户下载 jwks 文件
wget https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_5zCVSiMVH/.well-known/jwks.json
使用 jwks2pem
将 jwks 转换为 pemcat jwks.json| jwks2pem > key.pem
然后这个代码
local jwt = require "resty.jwt" local key = [[ -----BEGIN PUBLIC KEY----- (content of key.pem) -----END PUBLIC KEY----- ]] local jwt_token = "" local jwt_obj = jwt:load_jwt(jwt_token) local verified = jwt:verify_jwt_obj(key, jwt_obj) ngx.say(cjson.encode(jwt_obj))```
代码失败:
$ resty jwt.lua
{"valid":false,"reason":"invalid algorithm: RS256","verified":false}
我哪里错了?
ok,问题是关键。 我已经使用其他工具 https://www.npmjs.com/package/jwk-to-pem
成功地从 jwks 获得了 pem 密钥验证现在有效