Capa clave detrás del proxy inverso de apache
He navegado por Google sin encontrar ningunohormigón respuestas oejemplos, así que nuevamente probando suerte aquí (a menudo tengo suerte).
El problema
Tengo un único servicio RESTful de arranque de resorte que se ejecuta detrás de un proxy inverso apache. Este servicio RESTful solo ejecuta HTTP. Digamos que se está ejecutando en el puerto local ip 172.s 8080.
También he configurado un proxy inverso apache. Digamos que se está ejecutando en ip local 172.ay pública ip 55.a. Este proxy responde a ambos puertos 80, pero todo el tráfico HTTP se redirige automáticamente a 443.
Tengo otro servidor que ejecuta un servidor Keycloak independiente. Además, este servidor está configurado para ser accesible al público a través del proxy inverso. Digamos que se está ejecutando en ip local 172.k. Este servidor Keycloak se ejecuta solo en HTTP. Las solicitudes HTTP se manejan utilizando SSL a través del proxy inverso.
Por último, tengo otra frontend-webapp ejecutándose en la ip local 172.f. Esta aplicación web frontend se ejecuta en Nodejs y también se configura a través del proxy inverso. También está ejecutando solo HTTP, pero el cliente (navegador) está utilizando SSL a través del proxy inverso, al igual que para el servicio Keycloak y RESTful. Esta interfaz está consumiendo el servicio RESTful y también está configurada para autenticarse utilizando el adaptador de JavaScript keycloak.
El servicio RESTful se configura como solo portador utilizando el adaptador Spring Boot Keycloak, mientras que la aplicación frontend se configura con el tipo de acceso público.
El servidor de servicio RESTful, el servidor Keycloak y el servidor frontend no son accesibles al público; solo son accesibles a través del proxy inverso. Pero pueden comunicarse entre sí (ya que están en la misma red privada).
En el archivo frontend keycloak.json, elauth-server-url
se establece en la URL del proxyhttps://example.com/auth
, y el frontend puede obtener con éxito un token válido. Ahora, cuando intento consumir el servicio RESTful, aparece un error en el adaptador RESTful que indica que el emisor del token no es válido. En el encabezado http, por supuesto, estoy enviando elAuthorization: Bearer <token>
. La razón por la que recibo este error es que en la configuración RESTful keycloak, he configurado elauth-server-url
usar la url localhttp://172.k:9080/auth
, por lo que esta URL es diferente de la del token (que eshttps://example.com/auth
)
Pregunta
No puedo incluir lo mismoauth-server-url
en el servicio RESTful en cuanto a la interfaz, porque eso requerirá que yo también configure HTTPs en el servicio RESTful (porque esa url es https), y eso complicará mucho las cosas, incluida la necesidad de configurar certificados y cosas así. También creo que es ineficiente y no es práctico configurar SSL en servidores locales solamente.
Entonces mi pregunta es cómo puedo hacer que el adaptador hable con Keycloak sin pasar por el proxy inverso. Quiero que el adaptador RESTful se comunique con el servidor Keyclok para la verificación de tokens a través deauth-server-url: http://172.k:9080/auth
.
Anteriormente había una url diferente para el backend, que se eliminó:https://issues.jboss.org/browse/KEYCLOAK-2623