Аутентифицировать пользователя, используя внешний веб-сервис в Grails
В своем приложении Grails я использую плагин безопасности Spring для обработки аутентификации с использованием электронной почты и пароля пользователя.
Теперь мне нужно интегрировать свое приложение с внешней системой, которая работает с номером участника и паролем.
Во втором сценарии я хочу аутентифицировать пользователя, попросив его номер участника и пароль, вызвать внешний веб-сервис, получить их информацию, например, электронную почту, и аутентифицировать их в моем текущем приложении.
Таким образом, пользователь может либо напрямую использовать свою комбинацию адреса электронной почты и пароля, либо комбинацию номера участника и пароля для аутентификации.
Любое предложение, как я могу добиться этого... заранее спасибо:-)
2 ответа
Ознакомьтесь с моими ответами на Spring Security и Внешнее приложение для аутентификации (единый вход) и Настройка Spring Security 3.x для нескольких точек входа. Вам нужно создать два токена (один может быть по умолчанию UsernamePasswordAuthenticationToken
и второе может быть вашим обычаем MembershipPasswordAuthenticationToken
(в основном дубликат UsernamePasswordAuthenticationToken
простирающийся AbstractAuthenticationToken
). Поскольку один провайдер аутентификации может поддерживать более одного токена, вы можете написать логику в вашем провайдере, чтобы проверить класс токена и выполнить соответствующую аутентификацию. Например, если входящий токен относится к классу MembershipPasswordAuthenticationToken
затем позвоните в веб-службу, чтобы получить электронную почту.
Никогда не делал этого, но я думаю, что вы должны изучить AuthenticationProvider
интерфейс ( ссылка) и создать свою собственную реализацию, которая может аутентифицировать пользователя стандартным способом или с некоторой информацией обратного вызова, которая возвращается из внешнего приложения. Вот некоторая информация о том, как интегрировать пользовательский поставщик в приложение.