es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

OAuth2 ¿qué flujo utilizar para la comunicación / autenticación entre el frontend y la API a través de OAuth?

Estoy leyendo una y otra vez, no estoy seguro de por qué es tan difícil comprender correctamente los flujos de OAuth2, que pensé que entendía, hasta que quise tener mi propio servidor.

Entonces tengo el frontend (aplicación web + móvil, también conocido como propietario de recursos), mi propio servidor de API (servidor de recursos) y quiero crear mi propio servidor OAuth2.

  1. Entonces, suponiendo que al registrarse el usuario, los registro en mi servidor OAuth2, guardando el nombre de usuario y la contraseña cifrada (también quiero guardar el nombre de la organización/proyecto, para poder utilizar el servidor OAuth2 para varios proyectos sin preocuparme por duplicados de nombres de usuario).
  2. Luego, el frontend obtiene tokens de acceso y actualización directamente del servidor OAuth2 con la concesión de contraseña. ¿O debería hacerlo a través de mi API y usar CLIENTE_ID/CLIENTE_SECRETO (¿es esa siquiera una opción)?
  3. Con el token de acceso, el frontend puede comunicarse ahora con mi API (servidor de recursos).
  4. La API (servidor de recursos) luego se comunica con OAuth2 para validar el token de acceso. Aquí no estoy seguro de cuál es el nombre común de esa acción, ¿autorizar o autenticar?
  5. Una vez que el token de acceso haya expirado, el frontend (propietario de recursos) puede comunicarse directamente con OAuth2 para obtener un nuevo token de acceso y actualización. ¿Otra vez, debería pasar por la API y hacerlo con CLIENTE_ID/SECRETO?

Actualmente he implementado lo anterior, pero dentro de mi API, pero la idea de OAuth2 es que sea un servidor separado. No estoy seguro de cómo me beneficiará, aparte de poder usarlo para otros proyectos, pero supongo que con OAuth2 puedo exponer la API al público.

La pregunta es, ¿es lo anterior correcto? ¿Alguien puede ayudarme a encajarlo con la terminología correcta de OAuth2?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en OAuth-2.0 y OAuth, puedo proporcionar orientación sobre las preguntas que has planteado sobre cómo crear tu propio servidor OAuth2.

    En primer lugar, es común encontrar confusión en los flujos de OAuth2, especialmente al configurar tu propio servidor. Sin embargo, al desglosar el proceso paso a paso y comprender el papel de cada componente en el flujo, se vuelve más fácil de implementar.

    En tu escenario, parece que tienes una idea clara de los componentes involucrados:

    • La interfaz de usuario (aplicación web + móvil) actúa como el propietario de recursos.
    • Tu propio servidor de API actúa como el servidor de recursos.
    • Quieres crear tu propio servidor OAuth2.

    Para crear un sistema funcional, debes seguir el proceso de flujo de OAuth2, que consta de varios pasos:

    1. El usuario se registra en tu servidor OAuth2 y sus credenciales se almacenan de forma segura (utilizando hashing) junto con información necesaria como el nombre de la organización/proyecto para evitar duplicados.
    2. La aplicación de interfaz de usuario obtiene tokens de acceso y de actualización del servidor OAuth2. Puedes utilizar “password_grant” para obtener directamente los tokens de acceso y de actualización. Alternativamente, puedes utilizar el tipo de concesión “client_credentials”, donde la interfaz de usuario envía su “client_id” y su secreto para obtener los tokens.

    3. Con el token de acceso, la interfaz de usuario puede comunicarse con tu API (servidor de recursos).

    4. Luego, tu API se comunica con el servidor OAuth2 para validar el token de acceso. Este paso se llama autenticación, ya que verifica que el token sea válido, no haya expirado o sido revocado, y que el token y el usuario correspondiente tengan permiso para acceder a los recursos solicitados.

    5. Una vez que el token de acceso expire, la interfaz de usuario (propietario de recursos) puede obtener un nuevo token de acceso y de actualización directamente del servidor OAuth2. Alternativamente, tu API puede manejar la actualización utilizando el “client_id” y el secreto.

    En cuanto a tu preocupación sobre tener el servidor OAuth dentro de la API, es mejor práctica mantenerlos como servidores separados. Esto no solo te permite utilizar el servidor OAuth2 para múltiples proyectos, sino que también proporciona más seguridad y flexibilidad al sistema.

    En resumen, tu implementación parece correcta. La terminología que debes conocer es que OAuth2 proporciona autorización, no autenticación. El proceso de validación del token de acceso es la autenticación. Espero que esto te ayude en tu implementación.

Comments are closed.