Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

815
Views
¿Cómo implementar el inicio de sesión cruzado con código QR desde la aplicación móvil como método de autenticación para el sitio web o la aplicación web de forma independiente del proveedor?

Estoy usando Django 2.2 para mi aplicación web.

Y he estado buscando tutoriales que atiendan el inicio de sesión cruzado del código QR en la aplicación web usando la aplicación móvil.

Básicamente, el flujo de trabajo es así:

flujo de trabajo esperado

  1. El usuario llega al sitio web en el escritorio
  2. Dada la opción de nombre de usuario/contraseña o inicio de sesión con código QR (suponemos que el usuario está registrado)
  3. El usuario elige el código QR para iniciar sesión
  4. Se solicita al usuario que instale la aplicación móvil (puede ser Android o iOS)
  5. El usuario instala la aplicación móvil e inicia sesión con nombre de usuario/contraseña.
  6. En la aplicación móvil, el usuario acepta iniciar sesión en el futuro utilizando el código QR como alternativa (esto se hace una vez)
  7. Después de esto, en futuros inicios de sesión, cuando el Usuario elige el código QR para iniciar sesión según el paso 3. Usan la aplicación móvil para escanear el código QR generado en la página de inicio de sesión del sitio web.
  8. La aplicación móvil luego usa FaceID o FingerPrint ID (suponiendo que iOS) para luego permitir el inicio de sesión. El usuario presiona un botón Sí en la aplicación móvil para confirmar el inicio de sesión.
  9. De alguna manera, la aplicación web recibe una notificación dinámica y permite iniciar sesión en el navegador de escritorio.

No entiendo muy bien cómo el móvil y la aplicación web en el back-end funcionan entre sí para lograr esto sin problemas.

lo que encontré

Encontré esta biblioteca https://github.com/aruseni/django-qrauth que parece que ya no se mantiene. Pero todavía no puedo entender cómo funciona el flujo entre la aplicación móvil y el backend de la aplicación web.

También encontré este https://medium.com/@ksarthak4ever/django-two-factor-authentication-2ece42748610 que parece usar el teléfono móvil como un dispositivo 2FA. No es exactamente el caso de uso que estoy buscando a menos que lo haya entendido mal.

Encontré este artículo https://backendless.com/how-to-implement-mobile-to-web-cross-login-using-a-qr-code/ que es lo que me dio el término "inicio de sesión cruzado". Sin embargo, el artículo se inclina fuertemente hacia este proveedor en particular.

Estoy buscando una "comprensión" del concepto sin depender de los detalles de la implementación del proveedor.

lo que no busco

En caso de que mi pregunta esté mal formulada y se malinterprete, he incluido esta sección para aclarar lo que no estoy buscando.

No busco el caso de uso en el que el código QR sirve como confirmación 2FA para la aplicación de autenticación.

Tampoco estoy mirando ejemplos de código todavía. Solo quiero una comprensión clara primero de cómo funcionan las cosas entre la aplicación móvil y la web. Creo que se necesita JWT, aunque supongo.

Un flujo de trabajo es más apreciado que el código real porque primero quiero comprender cómo funciona.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Creo que quieres hacer algo como la web de WhatsApp donde los usuarios inician sesión en la aplicación web mediante un código QR, si estuviera haciendo esa implementación, lo haré de la siguiente manera.

  1. Cuando el usuario llega a la página de inicio de sesión, creamos una sesión de inicio de sesión con un token aleatorio y la guardamos en la base de datos.
  2. enviamos ese token aleatorio al navegador, que generará un código QR basado en el token aleatorio. Comenzamos una agrupación para la vista 'log_me_in' para verificar si el usuario escaneó el código de barras.
  3. El usuario va a la aplicación móvil y selecciona la actividad del navegador de inicio de sesión que iniciará la cámara.
  4. Una vez que se lea QR en el teléfono, realice una solicitud al backend con el token escaneado y actualice la sesión de inicio de sesión con el nombre de usuario.
  5. Con la próxima llamada a la vista 'log_me_in', inicie sesión en el usuario según el nombre de usuario y dígale a js que redirija a la página de inicio.

Espero que esté bastante claro.

over 4 years ago · Santiago Trujillo Report

0

El concepto clave es que el inicio de sesión se produce cuando un usuario y un navegador coinciden. Un usuario significa un usuario (o un dispositivo de usuario) ya reconocido (autenticado) por el servidor.

  1. el navegador de la PC del usuario solicita inicio de sesión QR en el servidor (sin ninguna información de cuenta)
  2. El servidor crea la clave de solicitud de inicio de sesión y envía la clave al navegador del usuario. la clave se muestra como código QR. (la función de esta clave es identificar el navegador )
  3. El dispositivo del usuario que ya inició sesión ( usuario ) lee la clave (QR) y envía una solicitud de aceptación de inicio de sesión al servidor con la clave.
  4. En este punto, el servidor sabe quiénes son tanto el usuario como el navegador .
  5. El servidor permite que el navegador inicie sesión como usuario .

  • La clave para identificar el navegador podría ser la sesión o el canal de conexión web o cualquier otra forma de información.
  • El servidor debe almacenar la clave hasta que se complete el proceso de inicio de sesión.
  • Si se recibe una solicitud de aceptación de inicio de sesión válida, el servidor debe solicitar al navegador que inicie sesión (servidor->cliente, empujar). existen varias técnicas para lograr esto (sondeo a través de AJAX, socket web, servicios de notificación automática, etc.)

Lo explicaré con Django-channels web socket framework. (En este caso, la clave de solicitud de inicio de sesión y el nombre del canal son los mismos, pero también está bien una clave y un nombre de canal diferentes).

  1. navegador : el usuario elige inicio de sesión QR. (sin ninguna información de cuenta)
  2. Backend: se realiza el canal web socket. el nombre del canal es una cadena generada aleatoriamente de forma segura (FOO). key(FOO) se almacena en redis como Django-channels[redis] hizo un canal llamado esa cadena(FOO). envíe la clave (FOO) al navegador del usuario.
  3. navegador : obtenga la clave (= nombre del canal = FOO) y abra el canal de conexión web (FOO). y también muestra el código QR (FOO).
  4. usuario (teléfono inteligente): el usuario inicia la aplicación de teléfono inteligente (ya ha iniciado sesión). y escanee el código QR (FOO). la aplicación de teléfono inteligente del usuario envía una solicitud de aceptación de inicio de sesión al servidor con la información del código QR (FOO)
  5. Backend: el servidor envía la clave de inicio de sesión generada de forma segura (BAR) a través del canal de conexión web (FOO).
  6. navegador : obtenga la clave de inicio de sesión (BAR) a través del canal de conexión web (el nombre es FOO) y redirija a la URL de inicio de sesión con la clave de inicio de sesión (BAR).
  7. servidor: obtenga la clave de inicio de sesión (BAR) y deje que el navegador inicie sesión como usuario

La clave de solicitud de inicio de sesión (FOO) podría ser un JWT (contiene clave, URL, expira, etc.) o simplemente una cadena segura (varía según el escenario). no contiene información de la cuenta y el servidor debe almacenarla.

La clave de inicio de sesión (BAR) suele ser un JWT. con JWT, contiene información de la cuenta y el servidor no tiene que almacenar la clave (sin estado)

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!