проверка токена jwt с помощью lua / openresty

#lua #jwt #openresty

#lua #jwt #openresty

Вопрос:

у меня есть токен jwt из процесса входа в систему aws cognito. этот токен должен быть отправлен из приложения в некоторые другие 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. преобразуйте jwks в pem с помощью jwks2pem

    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}
  

где я ошибаюсь?

Комментарии:

1. This library requires an nginx build with OpenSSL, the ngx_lua module, the LuaJIT 2.0, the lua-resty-hmac, and the lua-resty-string — вы уверены, что эти условия соблюдены?

Ответ №1:

хорошо, проблема в ключе. я успешно получил ключ pem от jwks с помощью этого другого инструментаhttps://www.npmjs.com/package/jwk-to-pem

проверка теперь работает