Spring Security: X509 (предварительная) аутентификация через обратный прокси - PullRequest
0 голосов
/ 28 мая 2020

Сценарий : приложение находится за NGINX, которое завершает соединение TLS и выполняет взаимную аутентификацию с клиентом. Затем NGINX пересылает сертификат клиента в заголовке X-SSL-CERT приложению на основе Spring. В приложении я хочу получить доступ к информации, содержащейся в сертификате, а также на основе этого создать Authentication.

Текущий подход : Чтобы запустить его, я реализовал собственный Filter, который извлекает заголовок, анализирует строку в сертификат X509, извлекает необходимую информацию в настраиваемый Authentication, а затем использует SecurityContextHolder для добавления Authentication в SecurityContext. Это работает, и я могу получить доступ к Authentication внутри моих методов контроллера с помощью аннотации @AuthenticationPrinciple.

Однако, читая документацию, я почувствовал, что этот подход может быть небезопасным, а также не таким, как он предназначен для весны поскольку уже существует X509AuthenticationFilter для использования в сценарии предварительной аутентификации ios.

Затем мне пришла в голову идея просто поместить проанализированный X509Certificate внутри атрибута ServletRequest и использовать предоставленный X509AuthenticationFilter. Я быстро столкнулся с проблемами, так как я не предоставляю UserDetailsService.

Вопросы :

  • Первый подход, который я описал, считается допустимым / secure?
  • Как я могу использовать X509AuthenticationFilter для случаев использования предварительной аутентификации
    • и без указания UserDetailsService, поскольку мне ничего не требуется для получения этой информации
  • Безопасно ли напрямую использовать SecurityContextHolder для добавления моего пользовательского Authentication изнутри фильтра
...