«1. Обзор

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

В этом руководстве мы собираемся объяснить эти основные концепции фреймворков безопасности. Также мы покажем их взаимосвязь и различия.

2. Тема

В контексте безопасности тема представляет собой источник запроса. Субъект — это объект, который получает информацию о ресурсах или изменяет ресурсы. Кроме того, субъект также может быть пользователем, программой, процессом, файлом, компьютером, базой данных и т. д.

Например, человеку необходимо авторизовать доступ к ресурсам и приложениям для аутентификации источника запроса. В данном случае это лицо является субъектом.

Давайте посмотрим на наш пример, реализованный на базе JAAS:

Subject subject = loginContext.getSubject();
PrivilegedAction privilegedAction = new ResourceAction();
Subject.doAsPrivileged(subject, privilegedAction, null);

3. Принципал

После успешной аутентификации у нас есть заполненный субъект со многими связанными идентификаторами, такими как роли, социальная безопасность номер (SSN) и т. д. Другими словами, эти идентификаторы являются принципалами, а субъект представляет их.

Например, человек может иметь основной номер счета («87654-3210») и другие уникальные идентификаторы, отличающие его от других субъектов.

Давайте посмотрим, как создать UserPrincipal после успешного входа в систему и добавить его к теме:

@Override
public boolean commit() throws LoginException {
    if (!loginSucceeded) {
        return false;
    }
    userPrincipal = new UserPrincipal(username);
    subject.getPrincipals().add(userPrincipal);
    return true;
}

4. Пользователь

Как правило, пользователь представляет человека, который обращается к ресурсам для выполнения какого-либо действия или выполнения рабочее задание.

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

5. Разница между субъектом, принципалом и пользователем

Как мы видели в предыдущих разделах, мы можем представлять различные аспекты идентичности одного и того же пользователя с помощью принципалов. Они являются подмножествами субъектов, а пользователи являются подмножествами принципалов, которые относятся к конечным пользователям или интерактивным операторам.

6. Заключение

В этом руководстве мы обсудили определение субъекта, принципала и пользователя, которые являются общими для большинства систем безопасности. Также мы показали разницу между ними.

Реализацию всех этих примеров и фрагментов кода можно найти в проекте GitHub.