Аутентификация Nginx с использованием Spring-Security и модуля auth_request - PullRequest
0 голосов
/ 11 июля 2019

В настоящее время у меня есть приложение, которое использует Spring-Security, используя oauth2 и okta в качестве поставщика. Это прекрасно работает для аутентификации в этом приложении. Сейчас я пытаюсь настроить nginx для обслуживания контента, но только если вы прошли аутентификацию в приложении java.

Я по сути следую этому руководству

https://redbyte.eu/en/blog/using-the-nginx-auth-request-module/

    location = /auth {
      internal;
      proxy_set_header Host $host;
      proxy_pass_request_body off;
      proxy_set_header Content-Length "";

      proxy_pass https://host.com/app/auth_check;
    }

    location @noauth {
      return 302 https://corp.okta.com/oauth2/default/v1/authorize?response_type=code&client_id=XXX&scope=openid%20profile%20email&state=XXX%3D&redirect_uri=https://host.com/app/login/oauth2/code/OKTA;
    }

    location / {
            auth_request /auth;
            error_page 401 = @noauth;
            auth_request_set $user $upstream_http_x_forwarded_user;
            proxy_set_header X-Forwarded-User $user;
            proxy_pass https://some-resource.com:8080;
    }

Это поток кода:

  • хит nginx
  • auth_check - 401 для запуска потока аутентификации
  • получить код от okta
  • проверка приложения Java с кодом
  • ошибка authorization_request_not_found

Из того, что я прочитал, это потому, что nginx не имеет действительного JSESSIONID с приложением, поэтому, несмотря на то, что у меня есть действительный код из okta, я не могу аутентифицироваться.

Есть ли лучшая архитектура для этой проблемы? Или конфигурация nginx, которая может сделать эту работу

...