У меня есть веб-приложение, которое я перевожу на Grails 3.3.9 (из Grails 2.3.11). Текущая версия приложения использует Spring Security LDAP для аутентификации (пользователь видит форму входа в систему, когда пытается получить доступ к сайту, и вводит имя пользователя и пароль). Более новая версия приложения будет использовать плагин Spring Security SAML для аутентификации (обычно называемый Single Sign On).
У меня работает система единого входа (SSO), однако страница входа в систему единого входа доступна только тогда, когда пользователь находится в нашем офисе (имеет определенный IP-адрес). В тех случаях, когда пользователь не в нашем офисе (имеет IP-адрес не в нашей сети). Я хотел бы, чтобы у пользователя была возможность войти с помощью формы входа Spring Security LDAP.
Я вроде как потерял, как это сделать. Из информации, которую я собрал, мне нужно определить своего провайдера безопасности в application.groovy
(я использовал провайдеров Spring Security по умолчанию, так как они, похоже, выполняют свою работу индивидуально). Однако я не понимаю, как мне сказать Grails, какой из двух методов входа использовать для каждого пользователя. В моем случае это будет проверка IP-адреса пользователя (для которого у меня уже есть код), но как мне тогда сказать, например:
if(ipAddress matches internalIPRange) use samlAuthenticationProvider
else{use ldapAuthProvider}
Вот провайдер, настроенный в application.groovy
grails.plugin.springsecurity.providerNames = ['samlAuthenticationProvider', 'ldapAuthProvider', 'daoAuthenticationProvider', 'anonymousAuthenticationProvider']
Также я не знаю, как на самом деле вызвать провайдера вручную (что-то вроде provider.invoke()
, если бы мне пришлось угадывать).