使用lua/openresty验证jwt令牌

我有一个来自AWS Cognito登录过程的JWT令牌。需要将此令牌从应用程序发送到其他api(通过cookie或bearer header,我还没有决定)。

接收API已经在nginx/openresty之后代理,所以我想在上游验证jwt令牌

我正在使用这个库(似乎是最新的) https://github.com/cdbattags/lua-resty-jwt

然后我按照以下步骤操作:

  1. 从我的账户下载jwks文件

    wget https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_5zCVSiMVH/.well-known/jwks.json

  2. 使用jwks2pem将jwks转换为pem

    cat jwks.json | jwks2pem > key.pem

  3. 然后这段代码

    local jwt = require "resty.jwt"
    
    local key = [[ -----BEGIN PUBLIC KEY-----
    (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}

我做错了什么?

点赞
用户10337607
用户10337607

好的,问题就在于密钥。 我已经使用这个工具https://www.npmjs.com/package/jwk-to-pem,成功从jwks中获取了pem密钥。 现在验证工作正常进行。

2019-04-03 14:45:05