Ошибка Слишком много перенаправлений, когда реплики контейнера, защищенного keycloak, превышают 1 - PullRequest
0 голосов
/ 02 июля 2019

Я устанавливаю роя Docker со следующими сервисами: * nginx (действует как обратный прокси) [версия докера alpine-14] * wildfly (обслуживает мое защищенное приложение) * keycloak (защита моего приложения) [версия док-станции Keycloak4.0.0.Final]

Все идет хорошо, и я могу аутентифицироваться и получать доступ к своему приложению, когда у меня есть только одна копия моего приложения. НО когда я пытаюсь масштабировать свой сервис wildfly до более чем одной реплики, я могу получить доступ к странице входа в систему и после ввода учетных данных выдает ошибку ERR_TOO_MANY_REDIRECTS.

Я попытался изменить конфигурацию прокси-сервера nginx для пересылки запросов на порты https и http для keycloak, а на стороне keycloak я попытался добавить

  environment:
   PROXY_ADDRESS_FORWARDING: "true"

Почти все работает, когда у меня есть только одна реплика моего сервиса wildfly ... но та же самая ошибка продолжает появляться, если у меня> 1 его копия.

Это мой конфигурационный файл nginx:

server {
    listen 443 ssl;
    ssl on;
    ssl_certificate /etc/ssl/fullchain.pem;        # path to your cacert.pem
    ssl_certificate_key /etc/ssl/privkey.pem;    # path to your privkey.pem
    server_name testsite.com;

    rewrite     ^/$ /web/ permanent;

   location / {
        proxy_pass         http://wildfly.service.com:8080/;
        proxy_redirect     off;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
        proxy_set_header   X-Forwarded-Proto https;

        # to avoid upstream sent too big header while reading response header from upstream ERROR
        # thanks to https://ma.ttias.be/nginx-proxy-upstream-sent-big-header-reading-response-header-upstream/
        proxy_buffer_size          128k;
        proxy_buffers              4 256k;
        proxy_busy_buffers_size    256k;

        proxy_pass_header  Set-Cookie;
    }

    location /auth {
        # proxy_pass         http://keycloak.service.com:8080/auth;
        proxy_pass         https://keycloak.service.com:8443/auth;
        proxy_redirect     off;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
        proxy_set_header   X-Forwarded-Proto https;

        # to avoid upstream sent too big header while reading response header from upstream ERROR
        # thanks to https://ma.ttias.be/nginx-proxy-upstream-sent-big-header-reading-response-header-upstream/
        proxy_buffer_size          128k;
        proxy_buffers              4 256k;
        proxy_busy_buffers_size    256k;

        proxy_pass_header  Set-Cookie;
    }
}

Мой конфиг keycloak:

Enabled                 ON
Consent Required            OFF
Login Theme                 --
Client Protocol             openid-connect
Access Type                 Public
Standard Flow Enabled           ON
Implicit Flow Enabled           OFF
Direct Access Grants Enabled        OFF
Authorization Enabled           OFF
Root URL                https://testsite.com/
* Valid Redirect URIs           https://testsite.com/* http://testsite.com/*
 Base URL               https://testsite.com/
Admin URL               --
Web Origins                 +

Мой конфиг keycloak на стороне приложения wildfly:

{
  "realm": "realm_name",
  "auth-server-url": "https://testsite.com/auth",
  "ssl-required": "external",
  "resource": "client-web",
  "public-client": true,
  "use-resource-role-mappings": true,
  "confidential-port": 0
}

Ожидаемый результат: аутентификация без ошибок при масштабировании службы более чем на 1 контейнер.

...