spring-security oauth spring-boot jwt netflix-zuul

spring security - Spring Cloud+Zuul+JWT para Tokens de valor/referencia



spring-security oauth (1)

Después de leer el artículo Cómo controlar la identidad del usuario dentro de los microservicios , he estado tratando de implementar dicho esquema de control de acceso (Tokens de referencia y valor), pero después de analizar otros muchos temas y ejemplos relacionados con Spring Security + OAuth + Zuul en GitHub, No se pudieron encontrar ejemplos concretos sobre cómo se puede lograr esto. Todos los ejemplos que involucran a JWT devuelven los Detalles del usuario cuando se devuelve el token, y eso es lo que me gustaría evitar. Los detalles del usuario nunca deben llegar directamente al cliente, sino que deben ser pasados ​​a los servicios de back-end. El tutorial Spring Security + AngularJs tiene mucha información sobre cómo evolucionar una aplicación hacia una aplicación segura, pero usa un token de acceso o menciona la posibilidad de obtener los detalles del usuario directamente a través de JWT .

Esta pregunta de SO, Usar Zuul como una puerta de enlace de autenticación por @ phoenix7360 , es exactamente el enfoque que he estado intentando implementar, pero solo brinda una breve descripción de la configuración requerida para llevar a cabo este tipo de enfoque de seguridad para microservicios. Consulte la imagen de esta pregunta para obtener una imagen clara de cómo iría.

No puedo entender completamente cómo debe configurarse el prefiltro Zuul y cómo debe ser la configuración del servidor de autorización. Como se indica tanto en el artículo como en la pregunta de SO, el flujo sería algo como esto:

Externo (HTTPS)

  1. El cliente se autentica contra el servidor OAuth2
  2. OAuth Server devuelve un token de acceso opaco (un UUID sin otra información)
  3. El cliente envía la solicitud a la puerta de enlace de la API con el token de acceso en el encabezado de autorización
  4. La puerta de enlace API solicita los detalles del usuario al servidor OAuth con el token de acceso en el encabezado de autorización
  5. OAuth Server comprueba que el token de acceso es válido y devuelve la información del usuario en formato JSON

Interno (HTTP / S)

  1. La puerta de enlace API crea un JWT con detalles de usuario y lo firma con una clave privada
  2. La puerta de enlace API agrega el JWT para solicitarlo y lo dirige al servidor de recursos
  3. El servidor de recursos verifica el JWT utilizando la clave pública de la puerta de enlace API

Nota: API Gateway debe devolver un error si OAuth Server indica que el token de acceso ya no es válido.

¿Cómo funcionaría el ZuulFilter? ¿Se debe emitir una nueva solicitud contra el Servidor OAuth (por ejemplo, a través de RestTemplate), o estos esquemas son compatibles con la implementación actual? ¿Se requiere alguna configuración particular para las clases JavaConfig para OAuth y Zuul? Si alguien sabe de un ejemplo de trabajo que sería realmente útil y sería genial para futuras referencias con respecto a este tema.

Estoy usando Spring Boot (1.4.0-M3) + Spring OAuth + Spring Cloud (Eureka, Ribbon, Zuul)

Sé que esta pregunta es muy similar a la que estaba vinculada anteriormente, y si esta no es la forma correcta de hacerlo, me disculpo, pero pensé que un nuevo hilo sería mejor que pedir ayuda en un hilo SO que tenía como objetivo resolver otro problema.

¡Gracias por adelantado!


JHipster hace un buen trabajo en el manejo de este problema. Si quiero informar brevemente sobre el proceso de inicio de sesión, primero debe iniciar sesión, en el momento en que obtenga toda la información que necesita pasar a los servicios que se detallan a continuación (como nombre de usuario, correo electrónico, etc.) y luego los pasa a sus microservicios. Puede ver el siguiente enlace de okta para obtener más información https://developer.okta.com/blog/2018/03/01/develop-microservices-jhipster-oauth