Служба аутентификации и авторизации Java или JAAS, произносится как «Jazz», это Java реализация стандартной подключаемой аутентификации Модуль (PAM) структура информационной безопасности. JAAS был представлен как библиотека расширений для Java Platform, Standard Edition 1.3 и был интегрирован в версию 1.4.
JAAS имеет своей главной целью разделение проблем аутентификации пользователей, чтобы ими можно было управлять независимо. В то время как прежний механизм аутентификации содержал информацию о том, откуда произошел код и кто подписал этот код, JAAS добавляет маркер о том, кто запускает код. Расширяя векторы проверки, JAAS расширяет архитектуру безопасности для приложений Java, которым требуются модули аутентификации и авторизации.
Для системного администратора JAAS состоит из двух типов файла конфигурации :
*.login.conf
: указывает, как вставлять поставляемые поставщиком модули login в определенные приложения*.policy
: указывает, какие удостоверения (пользователям или программам) и какие разрешения предоставленыНапример, в приложении может быть файл login.conf, указывающий, как должны запускаться различные механизмы аутентификации для аутентификации пользователя:
PetShopApplication {com.sun.security.auth.module.LdapLoginModule достаточно; com.foo.SmartcardLoginModule Requisite; com.sun.security.auth.module.UnixLoginModule required debug = true; }
Для разработчика приложения JAAS - это стандартная библиотека, которая предоставляет:
Для интегратора системы безопасности JAAS предоставляет интерфейсы:
Модули входа в систему в первую очередь связаны с аутентификацией, а не авторизацией и образуют широко используемый компонент JAAS. Модуль входа требуется для реализации javax.security.auth.spi.LoginModule
интерфейс, который определяет следующие методы:
Примечание: Subject
- это пользователь, который пытается войти в систему.
Class
.Object
который реализует интерфейс javax.security.auth.Callback
(например, проверить по базе данных). Этот метод может запрашивать у пользователя логин и пароль или использовать ранее полученные данные. Здесь важно отметить, что если предоставлены недопустимые учетные данные, то должно быть сгенерировано исключение javax.security.auth.login.FailedLoginException
(вместо того, чтобы возвращать false, что указывает на то, что этот модуль входа в систему следует игнорировать, что потенциально позволяет пройти аутентификацию).Principal
и Groups
(роли) для успешно аутентифицированного субъекта. Этот метод должен быть тщательно написан в корпоративных приложениях, поскольку серверы приложений Java EE часто ожидают, что отношения между объектами Principal
и Group
будут установлены определенным образом. Этот метод должен генерировать javax.security.auth.login.FailedLoginException
, если аутентификация не удалась (например, пользователь указал неверный логин или пароль).принципала
из Subject
или может сделать веб-сеанс недействительным).Модули входа в систему могут обеспечивать единый вход (SSO) через определенный протокол / структуру SSO (например, SAML, OpenID и SPNEGO ), может проверять наличие аппаратных токенов безопасности (например, USB-токен) и т. Д. В многоуровневом приложении LoginModules
может присутствовать как на стороне клиента, так и на стороне сервера.
javax.security.auth.spi.LoginModule
)Модули входа в систему написаны путем реализации этого интерфейса; они содержат фактический код для аутентификации. Он может использовать различные механизмы для аутентификации учетных данных пользователя. Код может получить пароль из базы данных и сравнить его с паролем, предоставленным модулю.
javax.security.auth.login.LoginContext
)Контекст входа в систему является ядром структура JAAS, которая запускает процесс аутентификации с создания субъекта. По мере выполнения процесса аутентификации субъект заполняется различными участниками и учетными данными для дальнейшей обработки.
javax.security.auth. Субъект
)Субъект представляет отдельного пользователя, объект или систему, другими словами, клиент, запрашивающий аутентификацию.
java.security.Principal
)Принципал представляет лицо предмет. Он инкапсулирует особенности или свойства предмета. Тема может содержать несколько p rincipals.
Учетные данные - это не что иное, как фрагменты информации о рассматриваемом предмете. Это могут быть номера учетных записей, пароли, сертификаты и т. Д. Поскольку учетные данные представляют некоторую важную информацию, дополнительные интерфейсы могут быть полезны для создания правильных и безопасных учетных данных - javax.security.auth.Destroyable
и javax.security.auth.Refreshable
. Предположим, что после успешной аутентификации пользователя вы заполняете субъект секретным идентификатором (в форме учетных данных), с помощью которого субъект может выполнять некоторые важные службы, но учетные данные должны быть удалены через определенное время. В этом случае можно было бы реализовать интерфейс Destroyable
. Обновляемый
может быть полезен, если учетные данные имеют только ограниченный период времени, в течение которого они действительны.
Аутентификация с помощью формы - еще одна часто используемая часть JAAS. В этом процессе пользователю обычно предоставляется веб-страница, содержащая форму с запросом имени пользователя и пароля. Затем эти данные отправляются через POST на URL-адрес, содержащий текст j_security_check
, например. www.example.com/j_security_check
. Учетные данные проверяются на стороне сервера, и идентификатор сеанса возвращается клиенту через cookie. Этот метод аутентификации является гибким в том смысле, что HTTP-клиент Java, такой как HTTP-клиент Apache, может использоваться вместо веб-браузера, например. в настольном приложении, если выполняются следующие стандартные шаги:
web.xml
(где элемент login-config имеет указан метод аутентификации "FORM").JSESSIONID =...
).К описанному выше процессу можно добавить дополнительные утверждения.