nginx: сеанс аутентификации не уничтожается с помощью SSL - PullRequest
0 голосов
/ 17 марта 2020

У меня есть этот env:

  • nginx в качестве балансировщика нагрузки серверов cas *
  • сервер cas (только один для упрощения тестов)
  • keycloak

Я обнаружил странную проблему с обратным каналом выхода из Keycloak. Эта функция должна работать следующим образом:

  1. Пользователь пытается войти в keycloak через cas
  2. cas показывает форму имени пользователя / пароля
  3. cas перенаправляет пользователя на страницу учетной записи keycloak
  4. пользователь нажимает кнопку выхода в keycloak
  5. keycloak отправляет запрос POST к cas (сервер на сервер)
  6. keycloak выходит из системы и cas делает выход
  7. пользователь пытается войдите в keycloak через cas снова
  8. cas показывает форму имени пользователя / пароля

Работает, если nginx не использует SSL.

CAS не спрашивает имя пользователя / пароль снова, если nginx использует SSL, т.е. пользователь не может войти в систему с другими учетными данными через CAS. Он должен подождать 3 минуты или закрыть браузер для входа в систему с другими учетными данными.

Это как-то связано с nginx кешем? Можно ли изменить это поведение?

Это конфиг моего nginx.

events { }
http {
    proxy_redirect              off;
    proxy_set_header            Host            $http_host;
    proxy_set_header            X-Real-IP       $remote_addr;
    proxy_set_header            X-Forwared-For  $proxy_add_x_forwarded_for;
    proxy_no_cache 1;
    proxy_cache_bypass 1;
    add_header Last-Modified $date_gmt;
    add_header Cache-Control 'no-cache, must-revalidate, proxy-revalidate, max-age=0';
    if_modified_since off;
    expires -1;
    etag off;

    upstream backend {
        server 192.168.1.108:8443;
    }

    ssl_certificate     C:/nginx-1.17.8/conf/server2.crt;
    ssl_certificate_key C:/nginx-1.17.8/conf/server2.key;

    server {
        listen 80; 
        location / {
            proxy_pass http://backend;
            proxy_buffer_size          128k;
            proxy_buffers              4 256k;
            proxy_busy_buffers_size    256k;
        }
    }

    server {
        listen 443 ssl;
        location / {
            proxy_pass http://backend;
            proxy_buffer_size          128k;
            proxy_buffers              4 256k;
            proxy_busy_buffers_size    256k;
        }      
    }
}
...