keycloak Неверный параметр: redirect_uri за обратным прокси - PullRequest
0 голосов
/ 30 ноября 2018

Как правильно настроить NGINX в качестве прокси-сервера перед Keycloak?

Задать вопрос и ответить на него как на документ, потому что мне пришлось делать это многократно сейчас и через некоторое время забыть детали.

Это особенно относится к случаю, когда Keycloak находится за обратным прокси-сервером, например, nginx, а NGINX завершает SSL и отправляет в Keycloak.Это не та же проблема, что и keycloak Недопустимый параметр: redirect_uri , хотя он выдает то же сообщение об ошибке.

1 Ответ

0 голосов
/ 30 ноября 2018

Ключ к этому находится в документах на https://www.keycloak.org/docs/latest/server_installation/index.html#identifying-client-ip-addresses

Необходимо установить proxy-address-forwarding, а также различные заголовки X-....

Если вы используетеИзображение Docker от https://hub.docker.com/r/jboss/keycloak/, затем установите env.arg -e PROXY_ADDRESS_FORWARDING=true.

server {
  server_name api.domain.com;

  location /auth {
    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-Proto $scheme;

    proxy_pass          http://localhost:8080;
    proxy_read_timeout  90;

 }

  location / {
    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-Proto $scheme;

    proxy_pass          http://localhost:8081;
    proxy_read_timeout  90;
  }



    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/api.domain.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/api.domain.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
    if ($host = api.domain.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


  server_name api.domain.com;
    listen 80;
    return 404; # managed by Certbot
}

Если вы используете другой прокси, важными частями этого являются устанавливаемые заголовки:

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-Proto $scheme;

Apache, ISTIO и другие имеют своисобственные средства их настройки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...