Cómo generar tokens JWT usando FastAPI en Python

En este artículo, veremos cómo crear y validar un JWT en el marco FastAPI. Este es un ejemplo muy básico de cómo crear y validar los tokens, esto es solo para referencia, y con este enfoque, uno puede crear fácilmente JWT según la necesidad y usarlo en consecuencia durante la validación. Un ejemplo simple de esto puede ser la implementación de la función SSO en aplicaciones web. crearemos tokens web JSON firmados en FastAPI. Este artículo se tratará en los siguientes subtemas:

  • ¿Qué son los JWT y cuándo usarlos? 
  • Instalaciones necesarias.
  • Creación y uso de JWT en fastapi.

¿Qué son los JWT y cuándo usarlos?

JSON Web Token (JWT) es un estándar abierto ( RFC7519 ) que se utiliza para definir una forma segura de transformar información entre dos partes. La información/mensaje/datos se firma digitalmente mediante claves privadas o públicas cuando se comparte mediante JWT.

El escenario más común para usar JWT es la autorización. Supongamos que queremos implementar una función de inicio de sesión único (SSO) en nuestro sitio web que permite al usuario acceder a diferentes dominios sin pedirle que inicie sesión cada vez. Una vez que el usuario haya iniciado sesión, cada solicitud posterior incluirá el JWT, lo que permitirá al usuario acceder a rutas, servicios y recursos permitidos con ese token.

Paquetes Requeridos

En primer lugar, cree una carpeta en su sistema para este proyecto y luego instale FastAPI, uvicorn y python-jose para generar y verificar los tokens JWT en Python. Utilice estos comandos para instalar estos paquetes.

pip install fastapi
pip install uvicorn
pip install python-jose

Después de la instalación exitosa de estas bibliotecas, podemos crear fácilmente JWT y probarlo con FastAPI.

Creación y uso de JWT en FastAPI

Paso 1: en el directorio de su proyecto ,  cree un archivo llamado main.py.

Paso 2: Abra su terminal y escriba el comando que se indica a continuación, esto le dará una clave secreta que usaremos en nuestro código main.py.

openssl rand -hex 32

Nota: si no tiene instalado OpenSSL, puede instalarlo desde https://wiki.openssl.org/index.php/Binaries.

Paso 4: una vez que tenga su clave secreta, cópiela y péguela en la sección SECRET_KEY en el siguiente código del archivo main.py.

Python3

# import libraries
from fastapi import FastAPI, status, HTTPException
from jose import JWTError, jwt
from pydantic import BaseModel
from datetime import datetime, timedelta
 
# replace it with your 32 bit secret key
SECRET_KEY = "09d25e094faa****************f7099f6f0f4caa6cf63b88e8d3e7"
 
# encryption algorithm
ALGORITHM = "HS256"
 
# Pydantic Model that will be used in the
# token endpoint for the response
class Token(BaseModel):
    access_token: str
    token_type: str
 
 
# Initialise the app
app = FastAPI()
 
# this funciton will create the token
# for particular data
def create_access_token(data: dict):
    to_encode = data.copy()
     
    # expire time of the token
    expire = datetime.utcnow() + timedelta(minutes=15)
    to_encode.update({"exp": expire})
    encoded_jwt = jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)
     
    # return the generated token
    return encoded_jwt
 
# the endpoint to get the token
@app.get("/get_token")
async def get_token():
   
    # data to be signed using token
    data = {
        'info': 'secret information',
        'from': 'GFG'
    }
    token = create_access_token(data=data)
    return {'token': token}
 
# the endpoint to verify the token
@app.post("/verify_token")
async def verify_token(token: str):
    try:
        # try to decode the token, it will
        # raise error if the token is not correct
        payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
        return payload
    except JWTError:
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="Could not validate credentials",
        )

Paso 5: Una vez que haya guardado el archivo, vaya a la terminal y ejecute la aplicación usando este comando: 

uvicorn main:app --reload

Producción:

Debería obtener la respuesta «Inicio de la aplicación completo» en el terminal de esta manera:

 

Ahora, en su navegador, vaya a http://localhost:8000/docs . Debería ver la interfaz de usuario de FastAPI swagger: 

 

Haga clic en «/get_token» y luego haga clic en » Pruébelo» y luego en «Ejecutar». Verá la respuesta del servidor debajo de esa pestaña. Si todo funciona bien, puede generar el token de esta manera:

 

Ahora puede copiar este token e ir al segundo punto final “/verify_token” , haga clic en “Pruébelo” , pegue el token y ejecútelo de la misma manera que ejecutó el punto final anterior. Verá la siguiente pantalla : 

 

Esta respuesta es para un token válido, ahora intente cambiar el token y ejecútelo nuevamente. Ahora verá la excepción que dice que «no se pudieron validar las credenciales».

 

Publicación traducida automáticamente

Artículo escrito por hvt_16 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *