我从aws cognito登录过程中获得了一个jwt令牌。这个令牌需要从应用程序发送到其他一些api(通过cookie或bearer标头,我还没有决定)。
接收apis已被代理在nginx / openresty后面,所以我想在上游之前验证jwt令牌
我正在使用这个库(似乎是最新的)https://github.com/cdbattags/lua-resty-jwt
然后我按照这些步骤:
wget https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_5zCVSiMVH/.well-known/jwks.json
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}
哪里我错了?
好的,问题是关键。我用其他工具https://www.npmjs.com/package/jwk-to-pem成功地从jwks获得了pem键
验证现在有效