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

437
Views
Autenticación Google OAuth2 con Spring Boot y Angular 2 CLI

Necesito integrar el inicio de sesión social en mi aplicación web. Uso Spring Boot para mi backend y Angular 2 como tecnología frontend. Seguí este tutorial para configurar mi proyecto.

Esto funciona perfectamente y Spring Boot se ejecuta en http:/localhost:8080 y Angular 2 en http:/localhost:4200. La razón de esto es que uso Angular-cli para las funcionalidades del servidor de desarrollo de recarga en vivo.

Debido a las políticas de Cross Origin, el proyecto angular necesita usar un proxy. Como se mencionó en el tutorial anterior, debe configurar un archivo proxy.conf.json:

 { "/api": { "target": "http://localhost:8080", "secure": false } }

Si hace esto, puede acceder a Spring API de la siguiente manera: http:/localhost:4200/api/users, por ejemplo (cada solicitud '/api' se reenviará al servidor Spring).

Todas las cosas anteriores están funcionando perfectamente. Ahora necesito usar Oauth2 con el inicio de sesión de Google. Probé muchos tutoriales como este , pero parece que no puedo resolver esto.

Si trato de implementar esto y navego a http:/localhost:8080 (desde la dirección de Spring Boot), se me redirige a la página de inicio de sesión de Google; sin embargo, cuando intento lo mismo, por ejemplo, http:/localhost:4200/api/authenticate i solo redirija siempre a http:/localhost:4200/login inmediatamente sin redirigirme a la página de inicio de sesión.

Busqué en todas partes en línea, pero parece que no puedo encontrar este problema en particular. ¿Alguien puede ayudarme a entender lo que estoy haciendo mal? ¡Tal vez alguien tenga un código de ejemplo que sería genial!

about 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Encontré una solución a mi problema. Primero tenía un enlace de inicio de sesión con 'href=/api/authenticate' pero ¡esto NO funcionó!

NOTA: el estándar @EnableOAuth2Sso protege cada ruta en el servidor, por lo que solo necesita acceder a la API en una ruta que esté segura para ser redirigido a la página de inicio de sesión

Por alguna razón, http:/4200/api/authenticate no hizo nada más que redirigirme inmediatamente a http:/4200/login (supongo que este debe ser el comportamiento estándar de @EnableOAuth2Sso si la autenticación falló o si no estabas autenticado?)

Así que cambié mi href a 'href=http:/localhost:8080/api/authenticate'. Esto funciona perfectamente y me redirigió a la página de inicio de sesión de Google.

Otro problema que enfrenté fue la URL de redirección. Intenté configurar la URL de redireccionamiento directamente a 'http:/localhost:4200/profile, para navegar después de iniciar sesión en el perfil de los usuarios, pero por alguna extraña razón, esto no funcionó.

Después de algunas pruebas, descubrí que NECESITA redirigir primero a su dominio API (no tengo idea de por qué).

Así que configuré la URL de redirección en http:/localhost:8080/callback donde luego redirigí a la página de perfil en el puerto 4200.

 @GetMapping("/callback") void redirect(HttpServletResponse response) throws IOException { response.sendRedirect("http://localhost:4200/profile"); }

Después de buscar y probar durante mucho tiempo, siento que esto no estaba documentado en ninguna parte.

about 4 years ago · Santiago Trujillo Report

0

Lo siento si me equivoco en esta respuesta porque esto fue hace algún tiempo y no recuerdo exactamente. Pero tenía un botón de inicio de sesión como se muestra en el fragmento de código a continuación:

 <a href="http://localhost:8080/api/login" class="btn loginBtn loginBtn-google">Login with Google</a>

Como tiene @EnableOAuth2Sso en su lugar, cada ruta se protege automáticamente con la autenticación OAuth2. Entonces, cuando hace clic en el botón de inicio de sesión, accede automáticamente a la página de autenticación de Google.

Cuando se autentica con éxito, lo redirijo al siguiente código:

 @GetMapping("/api/login") public void login(HttpServletResponse response) throws IOException { response.sendRedirect("http://localhost:4200/profile"); }

Como expliqué en mi primera respuesta, es necesario, por alguna extraña razón, devolver la llamada a su dominio Spring y no a su dominio frontend. Como se muestra en el código anterior, redirijo la página correcta de forntend.

(A medida que pasaba el tiempo, cambié los nombres de mis caminos si te lo estabas preguntando, pero esto debería funcionar)

about 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!