Redirect_uri вырезан посередине, Пружинная загрузка, Nginx, Кодовый замок

#spring-boot #docker #nginx #keycloak

Вопрос:

Я развернул keycloak в docker, приложении для загрузки spring, все за обратным прокси-сервером nginx за пределами docker. Это путь к защите: www.example.com/oauth/test-idp. Запускается контейнер docker PROXY_ADDRESS_FORWARDING=true . Когда я захожу на ресурс, отображается страница входа для доступа к /idp, но вместо redirect_usi: https:/%пример.com*uth/test-idp (example.com/oauth/test-idp) является https://example.com2Ftest-idp (example.com/test-idp). Есть какое-нибудь решение? это моя конфигурация nginx:

 location ~ ^/oauth(.*)$ {
    proxy_pass http://11.11.11.11$1?$query_string;
    proxy_buffering off;
    proxy_redirect off;
    proxy_set_header X-Forwarded-For $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
}
 

В моем приложении для весенней загрузки у меня есть эти настройки:

 keycloak.auth-server-url=https://example.com/auth/
keycloak.realm =realm
keycloak.ssl-required =external
keycloak.resource =resource
keycloak.credentials.secret =111111-111111-111111-1111
keycloak.securityConstraints[0].authRoles[0] =role
keycloak.securityConstraints[0].securityCollections[0].name=test
keycloak.securityConstraints[0].securityCollections[0].patterns[0] =/idp

server.use-forward-headers=true
server.tomcat.remote_ip_header=X-FORWARDED-FOR
server.tomcat.protocol_header=X-FORWARDED-PROTO
 

Ответ №1:

Вы удаляете /oauth часть из uri запроса, это может вызвать некоторые проблемы с перенаправлениями, как вы наблюдаете с помощью ключа.

Лучший способ исправить это-использовать один и тот же путь между вашим приложением spring boot и запросом, отправленным через nginx.

Если вы действительно не можете этого сделать, вы можете попробовать настроить nginx для отправки пути в X-Forwarded-Prefix , spring должен иметь возможность использовать его для создания правильного redirect_uri со свойством server.forward-headers-strategy=FRAMEWORK .

Этот nginx conf может работать (не тестировался) :

 location ~ ^/oauth(.*)$ {
        proxy_pass http://11.11.11.11$1?$query_string;
        proxy_buffering off;
        proxy_redirect off;
        proxy_set_header X-Forwarded-For $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Prefix /oauth;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;

    }