Proteger una API Rest en Flask

Proteger una API Rest en Flask y Python

Hace unos d铆as publiqu茅 el paso a paso para desarrollar una API Rest con Flask y Python. Ahora veamos c贸mo proteger una API Rest con JWT.El m贸dulo JWT (JSON Web Tokens) lo usamos para la creaci贸n de un token que asegurar谩 el consumo confiable de nuestra API. Es decir, con el token garantizaremos que nuestra API sea consumida por usuario debidamente autorizados.

Instalamos el m贸dulo JWT en Python:

pip install flask_jwt_extended

Bien, vamos a usar la misma API que montamos en el art铆culo anterior acerca de la creaci贸n de API con Flask, y lo que le vamos a adicionar es muy poco, o sea, vamos a adicionar el m贸dulo JWT y creamos un endpoint para la autenticaci贸n y creaci贸n del token.

from flask import Flask, jsonify, request
from flask_jwt_extended import JWTManager, jwt_required, create_access_token
import modelo

app = Flask(__name__)
jwt = JWTManager(app)

app.config["JWT_SECRET_KEY"] = "contrase帽a-forti-forti-fortisima-contrase帽a"

#CREDENCIALES IMPROVISADAS A MODO PEDAG脫GICO
correo = "erwin@gmail.com"
contra = "LaCasit@"

#ENPOINT PARA AUTENTICARSE EN LA API REST
@app.route("/login", methods=["POST"])
def login():
    if request.json:
        email = request.json["email"]
        password = request.json["password"]
    else:
        print("NO HAY NADA")

    if email == correo and password == contra:
        el_token = create_access_token(identity=email)
        returnjsonify(message="Logueado correctamente", token_de_acceso=el_token), 201
    else:
        returnjsonify(message="Credenciales incorrectas"), 401

 

De todas formas comparto el main.py con la mejora que estamos viendo.

Los dem谩s endpoints siguen siendo los mismos, excepto el endpoint /user, al que le colocamos el decorador @jwt_required() para protegerlo con el token. El funcionamiento de eso es el siguiente y podemos hacer las pruebas con curl:

  1. Nos logueamos como cliente en el endpoint /login con el usuario y contrase帽a
  2. Si el usuario y la contrase帽a coinciden, JWT genera el token y se env铆a como respuesta al cliente
  3. El cliente debe usar el token recibido para hacer uso del enpoint /user

Miremoslo con curl:

  • Nos logueamos: curl -H "Content-Type: application/json" -X POST -d '{"email":"erwin@gmail.com","password":"LaCasit@"}' http://localhost:5000/login
  • La API Rest responde con el token. Ejemplo del token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmcmVzaCI6ZmFsc2UsImlhdCI6MTY3MzY2MDc2NywianRpIjoiMmZhMzI2NzctNDcyNS00ODc5LWE4ZDktZmE1OGVjMzkyNjRjIiwidHlwZSI6ImFjY2VzcyIsInN1YiI6ImVyd2luQGdtYWlsLmNvbSIsIm5iZiI6MTY3MzY2MDc2NywiZXhwIjoxNjczNjYxNjY3fQ.vcZbrMOVs-tb9kILMJI4t04h6haZaQmlMID17lNCghM
  • Nos conectamos al endpoint /user, protegido con el decorador @jwt_required() usando el token recibido:
    curl -X GET http://localhost:5000/user -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmcmVzaCI6ZmFsc2UsImlhdCI6MTY3MzY2MDc2NywianRpIjoiMmZhMzI2NzctNDcyNS00ODc5LWE4ZDktZmE1OGVjMzkyNjRjIiwidHlwZSI6ImFjY2VzcyIsInN1YiI6ImVyd2luQGdtYWlsLmNvbSIsIm5iZiI6MTY3MzY2MDc2NywiZXhwIjoxNjczNjYxNjY3fQ.vcZbrMOVs-tb9kILMJI4t04h6haZaQmlMID17lNCghM"

Muestra real del ejemplo:

Nota: Recuerde que este es un ejercicio pedag贸gico. El usuario y la contrase帽a en un ambiente real se consultan desde una Base de Datos, y se encriptan con el m贸dulo bcrypt.


Valora este art铆culo

Proteger una API Rest en Flask y Python
5,0 rating based on 12.345 ratings
Overall rating: 5 out of 5 based on 1 reviews.
Name
Email
Review Title
Rating
Review Content

Excelente gracias

★★★★★
Interesante, muchas gracias
- Joaqu铆n Prieto
Comparte esto en
Publicado en Desarrollo Web.

Deja una respuesta

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