Autenticacion con Google OAuth 2.0
CAMBIOS REALIZADOS:
RestAutenticacionController -solicitarLoginGoogle(@Valid @RequestBody GoogleLoginRequestDTO dto) : Punto de entrada para la generación del enlace de autenticación externa. Delega la validación de existencia del usuario y la construcción del URI al servicio.
-callbackGoogle(@RequestParam("code") String code): Intercepta la redirección de Google con el authorization_code. Invoca la lógica de intercambio de tokens y devuelve la DTO con el JWT de SIENEP.
AutenticacionService -generarLinkLoginGoogle(String email): Comprueba que el usuario exista en usuarioRepository y que su estado sea activo. Ensambla la URL del endpoint de autorización de Google (https://accounts.google.com/o/oauth2/v2/auth) configurando el parámetro response_type=code, los scopes requeridos (openid, email, profile) y el login_hint.
-loginConCodigoGoogle(String code): Encargado del canal Server-to-Server. Ejecuta una petición GoogleAuthorizationCodeTokenRequest hacia Google enviando el client_id, client_secret y el code capturado. Extrae el id_token (JWT emitido por Google) contenido en la respuesta HTTP para su posterior validación.
-loginConGoogle(String googleToken): Instancia el componente GoogleIdTokenVerifier para validar la firma digital de Google y asegurar que la audiencia coincida con nuestro client_id. Obtiene las credenciales del payload (email), recupera las autoridades/permisos del UserDetails del sistema local mediante UserDetailsService y emite el JWT propio con JwtUtil.generateToken().