В настоящее время у меня есть приложение, которое использует 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, которая может сделать эту работу