Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

356
Vistas
matraz: ¿cómo unir el front-end con el servicio de back-end para generar la autenticación api?

En matraz-restplus , quiero mostrar la vista de autenticación de API para mi API de matraz mínimo, donde cada vez que hago una solicitud al servidor, la primera API debería mostrar una vista protectora para pedirle al usuario que proporcione un valor de token personalizado antes de usar la API llamada. Se me ocurrió mi solución para hacer una vista emergente de autenticación API antes de usar la función api, pero no pude obtener eso correctamente. ¿Alguien puede ayudarme a hacer que mi código funcione sin problemas? ¿Alguna idea?

Mi intento actual con implementación completa :

Aquí está el código parcial de mi implementación para hacer esta tarea.

 from functools import wraps import requests, json, psycopg2, datetime from time import time from flask import Flask, request from flask_sqlalchemy import SQLAlchemy from flask_restplus import Resource, Api, abort, fields, inputs, reqparse from itsdangerous import SignatureExpired, JSONWebSignatureSerializer, BadSignature class AuthenticationToken: def __init__(self, secret_key, expires_in): self.secret_key = secret_key self.expires_in = expires_in self.serializer = JSONWebSignatureSerializer(secret_key) def generate_token(self, username): info = { 'username': username, 'creation_time': time() } token = self.serializer.dumps(info) return token.decode() def validate_token(self, token): info = self.serializer.loads(token.encode()) if time() - info['creation_time'] > self.expires_in: raise SignatureExpired("The Token has been expired; get a new token") return info['username'] SECRET_KEY = "f4b58245-6fd4-4bce-a8a4-27ca37370a3c" expires_in = 600 auth = AuthenticationToken(SECRET_KEY, expires_in) db = SQLAlchemy(app)

Prácticamente codifiqué todo para la autenticación API, pero no pude obtener la vista emergente de autenticación que esperaba en mi resultado deseado.

Actualización: salida en el punto final del servidor :

Cuando probé http://127.0.0.1:5000/token en el extremo del servidor, recibí el error Not Found . ¿Cómo puedo obtener mi resultado deseado? ¿alguna idea?

Me pregunto cómo puedo obtener una vista de protección de API que requiera un token para acceder a la API. actualmente, tengo un error, no pude obtener el resultado deseado, así que espero que la comunidad SO me ayude con esto.

salida deseada :

Quiero generar una vista protectora para la API de prueba antes de usar la llamada API en el punto final del servidor. Aquí hay una vista de autorización de API de maqueta que quiero obtener:

ingrese la descripción de la imagen aquí

¿Cómo puedo hacer que esto suceda usando el matraz de Python, el matraz descansado? ¿cualquier pensamiento? Gracias

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Si lo entiendo correctamente, desea implementar una implementación basada en token similar a la autorización JWT .

JWT en general

De lo que se trata JWT se resume muy bien en docs.nginx.com > Autorización de JWT que dice

JWT es un formato de datos para la información del usuario en el estándar OpenID Connect, que es la capa de identidad estándar sobre el protocolo OAuth 2.0. Los implementadores de API y microservicios también están recurriendo al estándar JWT por su simplicidad y flexibilidad. Con la autenticación JWT, un cliente proporciona un token web JSON y el token se validará con un archivo de clave local o un servicio remoto.

No necesariamente tiene que hacer el JWT en el nivel del servidor web, pero generalmente prefiero hacer la autenticación en el nivel del servidor web para dividir bien los datos (también conocidos como puntos finales) y la seguridad.

Centrémonos ahora en JWT con matraz. El blog.teclacode.com resume muy bien el flujo de trabajo [comentarios míos]:

  1. El usuario proporciona su nombre de usuario y contraseña [a un extremo extraordinario]

[Los próximos 3 pasos suceden dentro de ese punto final extraordinario].

  1. Verificamos que sean correctos dentro de nuestra aplicación Flask
  2. Generamos un JWT que contiene el ID del usuario.
  3. Se lo enviamos al usuario.
  4. Cada vez que el usuario realiza una solicitud a nuestra aplicación, debe enviarnos el JWT que generamos anteriormente.

Supongo que su desafío abarca los pasos 1 a 4. El paso 5 que parece haber implementado ya: son los puntos finales no seguros más un token de parámetro POST obligatorio adicional. Esos puntos finales devolverán datos al cliente una vez que se proporcione un token válido. En otras palabras: cada punto final ordinario llama a una función que valida un token determinado. ¿Es correcto este entendimiento? ¿El paso 5 ya te funciona?

Nunca implementé JWT con python, pero una búsqueda rápida de paquetes con JWT en sus nombres me da la impresión de que hay muchos generadores de tokens listos para usar que "solo" tiene que configurar.

Sumérgete en tu código

Un par de preguntas sobre tu código:

  1. ¿Realmente desea codificar su clave secreta dentro de su código? Esa es una falla de seguridad importante, ya que tendrá la clave revelada en todas sus confirmaciones de GIT, etc.
  2. No es fácil acceder a su código completo en GIT ya que hay algunos errores de sintaxis en algunos archivos que impiden una búsqueda de texto completo, el mensaje de error dice:

    Podemos hacer que ese archivo sea hermoso y buscable si se corrigen algunos errores.

  3. ¿Dónde y cómo se define user_db ? Mencionaste eso en un comentario, pero no puedo encontrar eso en ningún otro lado. Sería útil tener un párrafo sobre esto en su pregunta.
  4. Supongo que http://127.0.0.1:5000/token es un punto final que proporciona el token, pero no entiendo completamente la pregunta en su forma actual donde se implementa el punto final /token .
over 4 years ago · Santiago Trujillo Denunciar

0

Como sugieren los comentarios, no hay un simple fragmento de código que cualquiera pueda compartir para responder a esta pregunta. Básicamente, está solicitando un blog de cinco partes sobre cómo adjuntar una base de datos a una aplicación Flask para autenticar las credenciales de la API. Sé que no parece así, pero sus preguntas realmente van en cascada de un tema al siguiente. Creo que lo mejor que puede hacer es consultar las bases de datos de la Parte IV del megatutorial de Flask y los inicios de sesión de los usuarios de la Parte V. Estos tutoriales cubren los conceptos fundamentales que parecen faltar en su código, de la siguiente manera:

  1. Usando SQLalchemy para definir sus modelos de base de datos
  2. Definición de una tabla de autorización básica en su base de datos
  3. Usar el cifrado para que sus tokens de autorización no puedan extraerse de la base de datos
  4. Eliminación de tokens caducados de la tabla de autenticación
  5. Uso de métodos prediseñados para validar la autorización, como el ejemplo de devolución de llamada de github de Flask-Github o el decorador login_required de Flask-Login
  6. Usando el create_db de Flasl-SQLalchemy, construya la base de datos a partir de su modelo
  7. Uso de db.session de matraz-SQLalchemy para configurar/obtener datos de la base de datos

Por lo que vale, realmente creo que The Flask Mega-Tutorial sería útil.

ACTUALIZACIÓN: aquí hay un ejemplo mínimo que usa un diccionario como base de datos de juguetes. Algunas cosas sobre este ejemplo...

  1. Si ejecuta main.py y va a http://127.0.0.1:5000/token?username=admin&password=somepassword , verá el ejemplo de obtención de trabajo

  2. Si va a http://127.0.0.1:5000 , hace clic en "hello_world", hace clic en "publicar" y luego hace clic en "probarlo", puede ingresar un nombre de usuario y una contraseña, y se agregarán al base de datos simulada.

  3. Después de agregar un nombre de usuario y contraseña, puede ir a http://127.0.0.1:5000/token?username=[]&password=[] excepto reemplazar los corchetes con ese nuevo nombre de usuario y contraseña. Si apaga el servidor, los nombres de usuario y las contraseñas no se guardarán, ya que solo se está actualizando un diccionario.

Con suerte, todo esto ayuda... una vez que haya editado la aplicación de esta manera, debería ser más fácil depurar problemas que no están relacionados con la autenticación de nombre de usuario y contraseña.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda