Skip to content

espanol

Diego Martínez Sánchez edited this page Dec 19, 2023 · 1 revision

Biblioteca Flask JWT

Documentación_v2.0.0

Aquí puedes encontrar documentación en inglés y alguna descripción del proyecto.

Esta es una biblioteca para generar mediante API un JWT utilizando primero la autenticación básica para luego generar el JWT, y también puedes usar esta biblioteca para validar el mismo JWT recibido. Básicamente, esto resume la forma en que generas el token JWT y cómo procesas el mismo.

Clases

Aquí tienes los atributos que se pueden configurar como parte de la biblioteca para dar más libertad o no sobre cómo implementar la funcionalidad de cada clase. También debo ser claro en que no es necesario implementar ambas clases en tu API, puedes usar solo una.

  • DecJwt: Clase para procesar el JWT. Los atributos a continuación se pueden usar en el momento de la declaración del objeto:

    • token_as_attr: Con este atributo puedes establecer el token decodificado como un atributo, de modo que tendrás un diccionario con todas las reclamaciones dentro del token accesible si necesitas algunas de las reclamaciones dentro de la lógica de tu API, el valor predeterminado es False, así que debes establecerlo en True si deseas hacer disponibles las reclamaciones decodificadas del token.
  • GenJwt: Clase para generar JWTs. Usa esta clase si necesitas generar tus propios JWT primero usando autenticación básica.

    • rsa_encrypt: Con este atributo, el valor predeterminado es False, pero debes establecerlo en True solo si estás utilizando la funcionalidad para generar tokens con una clave privada con una frase de paso para acceder a la misma clave privada; de lo contrario, no es necesario establecer esta bandera, como dije, el valor predeterminado es False.
    • json_body_token: Esta bandera, por defecto, está en False, si la estableces en True, significa que en el momento de poner el nombre de usuario y la contraseña como parte de la creación del token, no provendrán de las credenciales de autenticación básica, en cambio, debes enviar al endpoint encargado de generar el token un cuerpo json con las claves username y password de manera obligatoria; si por alguna razón quieres cambiar los nombres de esos campos, debes usar el decorador respectivo que cambia eso, como se describe a continuación.

Decoradores

Aquí se describirán los decoradores que puedes usar y configurar en el proyecto. Algunos de ellos son obligatorios de implementar para que se pueda utilizar la funcionalidad mínima y otros no son necesarios en absoluto.

Vamos a dividir por clase los decoradores para que sepas a qué clase pertenece cada decorador.

  • DecJwt: Clase para procesar el JWT

    1. enc_dec_jwt_config
      • Obligatorio
      • Descripción: Este decorador debe implementarse con una función en la que debes devolver un diccionario con las claves key y algorithm. En la clave "key" debes especificar una frase secreta para decodificar el JWT. En la clave "algorithm" debes escribir el algoritmo a utilizar para decodificar el JWT, estos algoritmos deben ser compatibles con la biblioteca pyjwt.
    2. personal_credentials_field:
      • No obligatorio
      • Descripción: Este decorador es solo para cambiar los nombres de las claves predeterminadas que se incluyen en la generación del token.
    3. get_user_roles:
      • No obligatorio
      • Descripción: Este decorador debe implementarse con una función en la que debes devolver una lista/array de contenido de cadena en la que estarán los roles del usuario para que podamos verificar si el usuario tiene el rol correcto para acceder al endpoint que está intentando solicitar. Si se implementa esta función, debe agregarse a los endpoints, por ejemplo.
        • Si implementas la clase para generar el token dentro del decorador para validar la autenticación, debes agregar roles=["rol1", "rol2"..."rolX"]
        • Si implementas la clase para solo validar el acceso con JWT dentro del decorador para validar la autenticación, debes agregar roles=["rol1", "rol2"..."rolX"]
    4. get_jwt_claims_to_verify:
      • No obligatorio
      • Descripción: Este decorador debe implementarse solo si deseas validar algunas reclamaciones específicas dentro del JWT, asegúrate de que haya al menos una reclamación dentro del JWT, de lo contrario se generará un error.
    5. verify_jwt_credentials
      • Obligatorio
      • Descripción: Decorador que debe envolver un método en el que validas las credenciales recibidas del token y devuelves un valor bool. True si las credenciales son correctas y deben pasar, y False si las credenciales no son correctas y no deben pasar.
    6. login_required:
      • Obligatorio
      • Descripción: Este decorador debe implementarse en todos los puntos finales que necesitan el JWT para autenticarse en los respectivos puntos finales. Este decorador realizará la autenticación utilizando todos los decoradores descritos anteriormente para finalmente pasar y permitir que los puntos finales definidos realicen la funcionalidad que se supone que deben hacer.
  • GenJwt: Clase para generar JWTs

    1. enc_dec_jwt_config:
      • Obligatorio
      • Descripción: Este decorador debe implementarse con una función en la que debes devolver un diccionario con las claves key y algorithm. En la clave "key" debes especificar una frase secreta para codificar el JWT. En la clave "algorithm" debes escribir el algoritmo a utilizar para codificar el JWT, estos algoritmos deben ser compatibles con la biblioteca pyjwt.
    2. personal_credentials_field:
      • No obligatorio
      • Descripción: Este decorador es solo para cambiar los nombres de las claves predeterminadas que se incluyen en la generación del token.
    3. get_user_roles:
      • No obligatorio
      • Descripción: Este decorador debe implementarse con una función en la que debes devolver una lista/array de contenido de cadena en la que estarán los roles del usuario para que podamos verificar si el usuario tiene el rol correcto para acceder al endpoint que está intentando solicitar. Si se implementa esta función, debe agregarse a los endpoints, por ejemplo. * Si implementas la clase para generar el token dentro del decorador para validar la autenticación, debes agregar roles=["rol1", "rol2"..."rolX"]
        • Si implementas la clase para solo validar el acceso con JWT dentro del decorador para validar la autenticación, debes agregar roles=["rol1", "rol2"..."rolX"]
    4. verify_bauth_credentials:
      • Obligatorio
      • Descripción: Decorador que debe envolver un método en el que validas las credenciales recibidas de la autenticación básica y devuelves un valor bool. True si las credenciales son correctas y deben pasar, y False si las credenciales no son correctas y no deben pasar.
    5. jwt_claims: Aquí puedes implementar lo que desees para incluir todas las reclamaciones que deben estar dentro del JWT para ser generado, solo necesitas tener en cuenta la instancia de la clase que genera el token.
    6. additional_jwt_claims:
      • No obligatorio
      • Descripción: En este decorador puedes agregar más campos al token que se va a generar, los campos predeterminados son nombre de usuario y contraseña, pero en este decorador puedes definir y agregar más campos que los predeterminados.
    7. generate_jwt:
      • Obligatorio
      • Descripción: Este es el decorador principal, debe colocarse sobre la función en la que se encuentra toda la lógica del punto final para generar el token. Este decorador valida todo utilizando todos los decoradores explicados anteriormente para finalmente enviar el nuevo token generado.

Esta es toda la descripción de los decoradores de todas las funcionalidades que puedes usar como programador. Para ejemplos, por favor, ve a la barra de navegación de esta wiki y dirígete a la sección Examples o Ejemplos.

Wiki

The project

Clone this wiki locally