Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

77
Vistas
Guarde los usuarios autenticados en la base de datos proveniente de Azure AD

Estoy trabajando en una aplicación web simple con fines de aprendizaje usando Angular para el frontend y Java Spring para el backend. No tengo un problema en particular con el que quiero que me ayuden, en cambio, tengo una pregunta sobre la autenticación OAuth2.

He registrado mi Angular SPA en Azure AD (Authorization Code Flow + PKCE), configuré roles y todo funciona bien. Mi pregunta es ¿qué hago cuando los usuarios autenticados hacen ping a mi backend? Mi backend no tiene información sobre los usuarios.

Pensé en una solución para hacer un filtro web, y cada vez que un usuario autenticado hace ping a cualquier punto final que requiera que el usuario esté autenticado, verifique la base de datos si el usuario existe (a través del nombre de usuario) y guárdelo si no existe. Estoy bastante seguro de que esto funcionará, pero no creo que esta sea la mejor solución, considerando que mi filtro web tendrá que leer de las bases de datos para cada solicitud HTTP que ingrese, y escribir en la base de datos ocasionalmente (si el usuario inicia sesión por primera vez).

No debería preocuparme por los problemas de rendimiento porque estoy construyendo esto estrictamente con fines de aprendizaje, pero, sin embargo, quiero hacerlo de la manera correcta. Intenté buscar esto en Google de varias maneras, pero supongo que no estoy usando las palabras clave correctas para encontrar lo que estoy buscando. ¡Cualquier opinión o consejo sería muy apreciado! ¡Gracias!

EDITAR: Seguí este artículo para lograr la autenticación y autorización OAuth2 + OIDC, mi configuración de seguridad en el backend es la misma: https://ordina-jworks.github.io/security/2020/08/18/Secure-Applications- Azure-AD.html

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Publique la discusión con claridad sobre los requisitos. Si quieres usar tienes lo siguiente:

  • Acepte un usuario conectado de Azure AD para consumir su servicio web
  • Le gustaría verificar si el usuario existe en la base de datos de su aplicación con una latencia de red mínima.

Con el requisito de no acceder siempre a su base de datos, una opción es utilizar un caché.

La solución ideal para que este caché funcione es:

  • Asegúrese de que el caché esté verificado para cada solicitud HTTP usando el filtro web
  • Asegúrese de que la memoria caché esté siempre actualizada con los últimos usuarios que iniciaron sesión a través de Azure AD

Ejemplo:

Implementar un CacheService.java

 package com.example.springboot; import java.util.Collections; import org.apache.catalina.User; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.concurrent.ConcurrentMapCache; import org.springframework.cache.support.SimpleCacheManager; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; @Component public class CacheService { @Bean public CacheManager cacheManager() { SimpleCacheManager cacheManager = new SimpleCacheManager(); cacheManager.setCaches(Collections.singletonList(new ConcurrentMapCache("users"))); return cacheManager; } @Cacheable(cacheNames = "users") public User getUser(String username) { // Code below will not execute after the first calling for the given username. // So if one username is already cached, it would not invoke for the same user again from the DB. // Get or Create a new user based on the Database call return null; } }

Luego implemente un filtro web como:

 package com.example.springboot; import java.io.IOException; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.filter.GenericFilterBean; @Component public class CredentialsInjectionFilter extends GenericFilterBean { @Autowired private CacheService cacheService; @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { cacheService.getUser("my_username"); filterChain.doFilter(servletRequest, servletResponse); } }

Más información sobre almacenamiento en caché con Springboot: https://www.javadevjournal.com/spring/spring-caching/

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda