首页 > 解决方案 > 使用 lua/openresty 验证 jwt 令牌

问题描述

我有一个来自 aws cognito 登录过程的 jwt 令牌。这个令牌需要从应用程序发送到其他一些 api(通过 cookie 或承载头,我还没有决定)。

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

我哪里错了?

标签: luajwtopenresty

解决方案


好的,问题是关键。我已经使用其他工具https://www.npmjs.com/package/jwk-to-pem从 jwks 成功获得了 pem 密钥

验证现在有效


推荐阅读