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.

Spring Boot, Servidor de Autenticación Personalizado OAuth2

Estoy intentando adentrarme en el mundo del desarrollo full-stack durante mi tiempo libre y tengo algunas preguntas generales sobre mi comprensión actual de OAuth2. Soy bastante novato en esto, pero he visto algunos videos de Udemy para tener una comprensión básica.

De todos modos, en este proyecto en el que estoy trabajando, planeo tener un servidor de autorización personalizado, un servidor de recursos y un solo cliente (que probablemente será una SPA). Este servidor de autorización solo permitirá el tipo de concesión de código de autorización (probablemente con la extensión PKCE). Lo que me lleva a mi primera pregunta general…

Intuitivamente, asumí que el tipo de concesión de contraseña sería suficiente. A medida que he leído más y más, parece que este flujo de concesión no es la mejor opción. Según mi comprensión, el uso de este flujo requeriría que el cliente proporcione algún formulario para que el usuario pueda iniciar sesión. Al hacerlo, el cliente obtiene acceso a las credenciales del usuario, lo cual va en contra de uno de los propósitos de OAuth2. Sin embargo, no estoy seguro de que este sea un problema con lo que estoy desarrollando, ya que estoy creando el servidor de autorización. Sé que al usar este flujo de concesión, no estoy validando al cliente. ¿Puede alguien explicar cómo esto podría ser un problema? ¿Hay algo más que me falte aquí? Todo lo que he leído me ha disuadido de utilizar este flujo de concesión, lo que es principalmente por lo que terminé decidiéndome por el flujo de código de autorización (w/ PKCE).

Entonces, suponiendo que elija este flujo, mi cliente debería proporcionar un botón de inicio de sesión. Al presionar este botón, el cliente será redirigido a una página web donde el propietario del recurso puede autorizar al cliente y proporcionar las credenciales del usuario. Mi servidor de autorización entonces validará estas credenciales del usuario. Planeo almacenar las credenciales de los usuarios en una base de datos en la VM que ejecuta el servidor de autorización. No planeo permitir que los usuarios registren una cuenta. En su lugar, solo voy a tener una lista estática de credenciales de cuenta en esta base de datos para las personas en mi equipo. Entonces, supongo que simplemente voy a insertar estas cuentas cuando se cree la base de datos. Si es así, ¿cómo permito que estos usuarios cambien sus contraseñas? Supongo que inicialmente, estas cuentas serán asignadas un correo electrónico, un nombre de usuario y una contraseña aleatoria con la que puedo comunicarme con ellos. Sin embargo, me gustaría que el usuario tuviera la opción de cambiar esta contraseña aleatoria por algo más familiar. Actualmente no sé cómo hacer algo así con la implementación de OAuth2. ¿Simplemente proporciono una forma en el cliente para cambiar la contraseña cuando el usuario haya iniciado sesión? Si es así, ¿no esto va en contra del propósito de usar OAuth2, ya que ahora mi cliente tendría conocimiento de las credenciales del usuario? Si decidiera hacer esto, ¿se implementaría como una solicitud POST a una API REST en el servidor de autorización para actualizar la contraseña?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Gracias por cualquier ayuda!

    De forma intuitiva, asumí que el tipo de concesión de contraseña sería suficiente. A medida que he leído más y más, parece que este flujo de concesión no es el adecuado. Según entiendo, usar este flujo requeriría que el cliente proporcione alguna forma para que el usuario pueda iniciar sesión. Hacer esto otorga al cliente acceso a las credenciales del usuario, lo que desvirtúa uno de los propósitos de OAuth2.

    No se recomienda usar el tipo de concesión de contraseña, ya que requiere que el cliente proporcione un formulario para que el usuario pueda iniciar sesión, lo que otorga al cliente acceso a las credenciales del usuario. Esto desvirtúa el propósito de OAuth2, que es proporcionar una forma segura para que el usuario autorice al cliente sin otorgar al cliente acceso a las credenciales del usuario.

    Si opta por el tipo de concesión de código de autorización (con la extensión PKCE), su cliente debería proporcionar un botón de inicio de sesión. Al presionar este botón de inicio de sesión, el cliente se redirigirá a una página web donde el propietario de los recursos puede autorizar al cliente y proporcionar las credenciales del usuario. Su servidor de autorización validará estas credenciales del usuario.

    Si está almacenando las credenciales del usuario en una base de datos en la VM que ejecuta el servidor de autenticación, puede insertar estas cuentas cuando se crea la base de datos. Para permitir que los usuarios cambien sus contraseñas, puede proporcionar una forma en el cliente para cambiar la contraseña cuando el usuario ha iniciado sesión. Esto se puede implementar como una solicitud POST a una API REST en el servidor de autenticación para actualizar la contraseña.

Comments are closed.