用lua / openresty验证一个jwt令牌

verify a jwt token with lua/openresty

我有一个来自aws cognito登录过程的jwt令牌。此令牌需要从应用程序发送到其他一些api(通过cookie或bearer标头,但我尚未决定)。

接收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

  • 然后输入此代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    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))```

  • 代码失败:

    1
    2
    $ resty jwt.lua
    {"valid":false,"reason":"invalid algorithm: RS256","verified":false}

    我错了吗?


    好的,问题是关键。
    我已经使用其他工具https://www.npmjs.com/package/jwk-to-pem

    从jwks成功获得了pem密钥

    现在可以进行验证了