Skip to content

Implementar inicio de sesión con Google (OAuth2) #32

@jgm847

Description

@jgm847

📄 Descripción

Se debe implementar la funcionalidad de inicio de sesión con Google en MagicVS, permitiendo a los usuarios autenticarse utilizando su cuenta de Google mediante OAuth2.

El objetivo es ofrecer una alternativa de login más rápida y segura, evitando la necesidad de registro manual y mejorando la experiencia de usuario.

Esta funcionalidad incluirá tanto la integración en backend (Spring Boot) como en frontend (Angular).


🎯 Objetivos

  • Permitir autenticación mediante cuenta de Google
  • Integrar OAuth2 en el backend
  • Obtener información básica del usuario desde Google
  • Crear o vincular automáticamente el usuario en la base de datos
  • Generar token de autenticación (JWT) tras login exitoso
  • Integrar botón de login con Google en frontend

🛠️ Alcance

Incluye:

  • Integración con Google OAuth2
  • Backend (Spring Security OAuth2)
  • Frontend (botón e integración con flujo de login)
  • Creación automática de usuario si no existe

No incluye:

  • Login con otros proveedores (Facebook, GitHub, etc.)
  • Gestión avanzada de cuentas vinculadas
  • Desvinculación de cuentas
  • Roles avanzados

🛠️ Tareas

Backend

  • Configurar OAuth2 con Google en Spring Security
  • Añadir dependencias necesarias (spring-boot-starter-oauth2-client)
  • Configurar application.yml o application.properties con credenciales de Google
  • Implementar OAuth2UserService personalizado
  • Obtener datos del usuario desde Google (email, nombre, imagen)
  • Comprobar si el usuario existe en la base de datos
  • Crear usuario automáticamente si no existe
  • Generar JWT tras autenticación
  • Redirigir correctamente al frontend con token

Frontend (Angular)

  • Añadir botón de "Iniciar sesión con Google"
  • Redirigir al endpoint de login OAuth2 del backend
  • Manejar redirección tras login
  • Capturar token JWT
  • Guardar token en almacenamiento (localStorage o similar)
  • Gestionar estado de usuario autenticado

📂 Datos obtenidos de Google

  • email
  • nombre
  • imagen de perfil (opcional)
  • id de Google (para vinculación)

📡 Flujo esperado

  1. Usuario hace clic en "Iniciar sesión con Google"
  2. Se redirige a Google OAuth2
  3. Usuario acepta permisos
  4. Google redirige al backend
  5. Backend:
    • obtiene datos del usuario
    • crea o busca usuario en BD
    • genera JWT
  6. Backend redirige al frontend con token
  7. Frontend guarda token y autentica al usuario

📡 Endpoint esperado

Spring maneja automáticamente el endpoint:

GET /oauth2/authorization/google

🧩 Estructura esperada

Backend

  • config/SecurityConfig
  • auth/CustomOAuth2UserService
  • auth/OAuth2SuccessHandler
  • user/User

Frontend

  • auth/
  • auth.service.ts
  • login.component
  • Botón de Google login

🔐 Consideraciones de seguridad

  • No almacenar datos sensibles innecesarios
  • Validar correctamente el token recibido
  • Usar HTTPS en producción
  • No exponer credenciales de Google en el repositorio

✅ Criterios de aceptación

  • El usuario puede iniciar sesión con Google
  • Si el usuario no existe, se crea automáticamente
  • Si existe, se autentica correctamente
  • Se genera y devuelve un JWT válido
  • El frontend recibe y almacena el token
  • El usuario queda autenticado en la aplicación

📌 Notas

  • Crear credenciales en Google Cloud Console:
    • Client ID
    • Client Secret
  • Configurar correctamente los redirect URIs
  • Usar scopes básicos (email, profile)
  • Preparar la arquitectura para añadir más proveedores en el futuro
  • Este issue mejora significativamente la experiencia de usuario y seguridad del sistema

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions