Как заставить NGINX/Django определять, когда CAC/смарткарта удалена?

У меня есть приложение Django, которое стоит за Nginx и требует от пользователя аутентификации через правительственный CAC (смарт-карту). Идентификатор CAC считывается Nginx и передается Django, который сопоставляет этот идентификатор с пользователем Django и регистрирует этого пользователя. Эта часть работает нормально.

Однако, если пользователь удаляет свой CAC из кард-ридера, приложение продолжает работать, позволяя пользователю продолжать загружать страницы из этого домена.

Как я могу заставить Nginx проверять сертификат CAC при каждой загрузке страницы, чтобы после удаления CAC Django мог выйти из системы пользователя и заставить его повторно пройти аутентификацию?

Конфиг нгинкс:

server {
  listen 443 ssl;

  server_name my-server;
  ssl_certificate ssl/server.crt;
  ssl_certificate_key ssl/server.key;
  ssl_verify_client on;
  ssl_verify_depth 2;
  ssl_client_certificate /etc/ssl/certs/dod-root-certs.pem;

  location /static/ {
    alias /etc/nginx/static/;
    expires 30d;
  }

  location / {
    proxy_pass         http://localhost:8000/;
    proxy_redirect     off;
    proxy_set_header   Host       $host;
    proxy_set_header   X-Real-IP  $remote_addr;
    proxy_set_header   X-Scheme   $scheme;

    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Protocol  ssl;

    proxy_set_header   X-SSL-User-DN   $ssl_client_s_dn;
    proxy_set_header   X-SSL-Authenticated $ssl_client_verify;

    proxy_connect_timeout 60;
    proxy_read_timeout 60;
  }
}

person PaulP    schedule 17.02.2014    source источник


Ответы (1)


Это невозможно на стороне сервера и вне контроля nginx. Природа SSL заключается в том, что он может аутентифицировать и авторизовать, но он будет использовать сеанс для запоминания своих решений.

Думайте о сайте как о здании. Как только вы пройдете аутентификацию с помощью какой-либо ключ-карты, вас впустят, и вы сможете свободно ходить. Могут быть области, для которых вам потребуется дополнительная авторизация, и для этого будут использоваться ваши учетные данные, предоставленные при входе.

То, о чем вы просите, это то, что, когда вы уроните свою ключ-карту, вас немедленно поднимут и уберут из здания. Вы видите проблемы с этим, и обычная процедура — выйти из здания, что означает действие на стороне клиента. Таким образом, лучше всего отправить запрос на выход со стороны клиента после удаления ключ-карты. Это отдельная тема, на которую отвечено здесь.

person Melvyn    schedule 18.02.2014