Новичок в аутентификации JAAS; Войдите, используя токен в строке URL. - PullRequest
3 голосов
/ 10 марта 2011

У меня есть интересное требование проекта, где мы должны принять токен в качестве GET-параметра, который будет аутентифицировать пользователя, входящего в приложение. Это позволяет доверенным третьим сторонам беспрепятственно отправлять пользователей на наш сайт без необходимости повторного входа в систему.

Примером может быть: http://www.myproj.com/appName/index.jsf?user_token=asdf123randomstuffaf12fsaasdf

appName будет корневым контекстом, а user_token будет токеном, который можно проверить. Токен будет использован один раз, затем выброшен, и срок его действия истекает через несколько секунд после генерации. Часть токена - это не то, чем я увлечен, это интеграция с JAAS.

В Spring Security я могу настроить фильтр, который будет перехватывать запрос, извлекать токен из URL-адреса и аутентифицировать пользователя на основе UserDetailsService. К сожалению, Spring Security не доступен в этом проекте из-за множества проблем, поэтому нам нужно использовать аутентификацию JAAS.

Я не прошу код, но я мог бы использовать небольшое базовое руководство о том, какие модули нужно написать, чтобы я мог продолжить свои исследования. Спасибо всем,

1 Ответ

1 голос
/ 13 мая 2011

JAAS не очень подходит для веб-приложений.Это больше для настольных приложений, которые поддерживают интерактивные входы и доступ к локальным ресурсам, управляемым JVM, таким как файлы, сетевые сокеты.

Но если вы действительно хотите пойти по пути JAAS, подготовьтесь написать свой собственный LoginModule ивероятно CallbackHandler и Принципал.Наиболее важным классом является LoginModule.Возможно, вы сможете повторно использовать какой-то существующий класс Principal.

CallbackHandler будет извлекать маркер из URL.LoginModule будет искать этот токен в некоторой базе данных и заполнять переданный субъект некоторым принципалом.

Это может показаться странным, потому что термины довольно близки (субъект против принципала, LoginModule против CallbackHandler), поэтому документыдолжно быть на близком расстоянии.

После того, как вы все это сделали, вам также нужно будет настроить политику веб-контейнера для загрузки нового контекста входа (еще один очень связанный термин).Это похоже на настройку PAM в Linux.Попросите своего администратора сделать это за вас.

Но вы еще не закончили.Последняя задача - написать фильтр (я полагаю, вы разрабатываете что-то на основе сервлета Java).Этот фильтр должен быть подключен на самом первом уровне.Если он видит значение специального параметра (например, user_token), он получает настроенный объект LoginContext и вызывает его метод входа в систему.

Теперь, если вы полностью удалите JAAS, вы можете обойтись только с помощью фильтра сервлетов.В этом фильтре, если аутентификация прошла успешно, вы можете заполнить объект сеанса собственными объектами (такими как объект пользователя), чтобы обозначить успех.Гораздо проще.

...