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».