Фреймворки аутентификации и авторизации для приложений с графическим интерфейсом Java - PullRequest
2 голосов
/ 12 апреля 2010

Мы программируем трехуровневое приложение с клиентом с богатым графическим интерфейсом, используя Swing, и нам нужно добавить немного контроля аутентификации и авторизации. Я совершенно новичок в этой теме, поэтому я провел небольшое исследование в Интернете. Мое первое намерение состояло в том, чтобы использовать JAAS для этой функции, но, насколько я могу видеть, JAAS содержит только функциональность для выполнения привилегированных методов / действий, но, похоже, нет никакой функциональности, чтобы определить, предоставляется ли доступ для некоторых «действий» контролировать графический интерфейс. например скрыть / отключить некоторые меню и т. д.

Я понимаю это неправильно или мой подход неверен? Есть ли альтернативы JAAS? Существуют ли "лучшие практики" для добавления аутентификации и авторизации в приложения с графическим интерфейсом?

Спасибо за помощь, Eny

Ответы [ 3 ]

3 голосов
/ 12 апреля 2010

Богатый GUI-клиент ничем не отличается от стандартного веб-сайта. Оба находятся на стороне клиента и контролируют потенциального злоумышленника. Поэтому независимо от того, о какой безопасности вы думаете, решительный человек может сломать ее. Помните, что идея скрытия / отключения кнопок в пользовательском интерфейсе заключается в удобстве использования, а не в безопасности.

Для начала покажите все кнопки всем пользователям, , но убедитесь, что , что, если обычные нажатия на кнопку администратора, сервер не разрешит. Как только вы получите правильную аутентификацию на стороне сервера, добавьте прокладки, чтобы скрыть / отключить кнопки в пользовательском интерфейсе. Для этого вы можете написать сервис, который возвращает роли / привилегии, которые есть у вошедшего в систему пользователя.

JAAS - это идеальная технология для аутентификации на стороне сервера. Вы должны быть в состоянии найти много документации для защиты ресурсов сервера.

Ваши пользователи должны будут войти в Swing GUI и должны быть аутентифицированы сервером. Это самый важный шаг . Если вы не аутентифицируете пользователя с помощью сервера, тогда его безопасность вообще отсутствует.

После этого каждое нажатие кнопки, любое действие пользователя направляется на сервер, который аутентифицируется, если у пользователя есть разрешение. Если он этого не сделает, верните клиенту исключение. Таким образом, если кто-то обманет ваши кнопки, сервер поймает их.

0 голосов
/ 13 апреля 2010

Используйте JAAS

JAAS - это общая структура, которая не предоставляет никаких специфических функций приложения, таких как кнопки включения / выключения и т. Д. вам придется встроить эту логику авторизации в ваше приложение, JAAS предоставляет вам дескриптор для аутентифицированного / авторизованного объекта Principal, который пригодится в таких сценариях.

0 голосов
/ 13 апреля 2010

Несмотря на то, что ответ @ sri дает хорошие замечания, совет «просто передать идентификатор / токен сеанса» опасен, поскольку его слишком легко подделать. Вам необходимо установить общий контекст, который проверен доверенным источником. Посмотрите на org.ietf.jgss.GSSContext для деталей об этом.

Чтобы заставить работать контекст GSS, вы познакомитесь с концепцией Центра распространения ключей (KDC) , которая обычно приводит к Kerberos и обычному серверу каталогов - извините, я Я немного расплывчат, но не зная, что у вас на месте, сложно быть конкретным, и даже тогда я делал это только с Active Directory.

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

Процесс аутентификации предоставит javax.security.auth.Subject, который будет содержать один или несколько java.security.Principal s. Эти принципалы можно использовать с JAAS для создания файла политики, в котором используются принципалы, как описано здесь . Обычно вы используете принципала для представления ролей пользователя, которые загружаются с сервера каталогов. В прошлом я специализировал модуль входа в систему, чтобы сделать это, хотя может быть лучший способ.

Здесь все заперто, поэтому последний шаг - сделать так, чтобы он выглядел симпатично для пользователя, и здесь, насколько мне известно, вы сами. Вы можете просто оставить все включенным и предупредить пользователя, если операция не может быть выполнена или, поскольку у вас есть предмет, сделать что-то более сложное, основанное на членстве в группе.

...