es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Varnish: cómo verificar la firma de JWT utilizando el módulo incrementable de digestión.

Tengo un DockerFile basado en Varnish 7.0 alpine, tengo un archivo vcl personalizado para manejar la autenticación de JWT. Pasamos el JWT como un Bearer en el encabezado.

Estoy basado en este ejemplo: https://feryn.eu/blog/validating-json-web-tokens-in-varnish/

    set req.http.tmpPayload = regsub(req.http.x-token,"[^\.]+\.(.+)\.[^\.]+$","\1");
    set req.http.tmpHeader = regsub(req.http.x-token,"(.+)\.[^\.]+\.[^\.]+","\1");
    set req.http.tmpRequestSig = regsub(req.http.x-token,"^[^\.]+\.[^\.]+\.([^\.\n\r]+)$","\1");

    set req.http.tmpCorrectSig = digest.base64url_nopad_hex(digest.hmac_sha256(std.fileread("/jwt/privateKey.pem"), req.http.tmpHeader + "." + req.http.tmpPayload));

    std.log("req sign " + req.http.tmpRequestSig);
    std.log("calc sign " + req.http.tmpCorrectSig);

    if(req.http.tmpRequestSig != req.http.tmpCorrectSig) {
        std.log("invalid signature match");
        return(synth(403, "Invalid JWT signature"));
    }

Mi problema es que tmpCorrectSig está vacío, no sé si puedo cargarlo desde un archivo, ya que mi archivo contiene saltos de línea y otros caracteres.

Para información, este Vmod está haciendo lo que quiero: https://code.uplex.de/uplex-varnish/libvmod-crypto, pero no puedo instalarlo en mi arquitectura Arm M1 pro, he pasado mucho tiempo intentándolo…

¿Puedo lograr lo que quiero?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que puede haber un problema con la variable tmpCorrectSig que no se está poblado correctamente en tu archivo VCL personalizado para la autenticación JWT en Varnish 7.0 alpine. Una posible solución podría ser verificar si la función std.fileread es capaz de leer correctamente el contenido de tu archivo de clave privada o si hay algún problema con el formato del archivo.

    Si no puedes utilizar la Vmod libvmod-crypto debido a limitaciones de hardware, podrías considerar el uso de una biblioteca criptográfica alternativa que sea compatible con tu arquitectura Arm M1 pro. Otra posible solución podría ser intentar utilizar un método diferente para generar la firma JWT dentro de tu archivo VCL, como utilizando la función digest.base64url_nopad_hex con un algoritmo hash diferente.

    En general, es posible lograr la funcionalidad de autenticación JWT deseada en Varnish 7.0 alpine con un archivo VCL personalizado, pero puede requerir solucionar problemas y experimentación para identificar la fuente del problema con la variable tmpCorrectSig y encontrar una biblioteca criptográfica o método adecuado para utilizar.

Comments are closed.