1. 概要

セキュリティは、Javaアプリケーションの基本的な部分です。 また、セキュリティの懸念に対処できる多くのセキュリティフレームワークを見つけることができます。 さらに、これらのフレームワークでは、サブジェクト、プリンシパル、ユーザーなどの一般的な用語をいくつか使用します。

このチュートリアルでは、 セキュリティフレームワークのこれらの基本的な概念について説明します。 また、それらの関係と違いを示します。

2. 主題

セキュリティのコンテキストでは、サブジェクトはリクエストのソースを表します。 s ubject は、リソースに関する情報を取得したり、リソースを変更したりするエンティティです。 さらに、サブジェクトは、ユーザー、プログラム、プロセス、ファイル、コンピューター、データベースなどでもあります。

たとえば、リクエストソースを認証するには、リソースとアプリケーションへのアクセスを承認する必要があります。 この場合、この人が対象です。

JAASフレームワークに基づいて実装された例を見てみましょう。

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

3. 主要

認証が成功すると、役割、社会保障番号(SSN)などの多くの関連IDがサブジェクトに入力されます。 つまり、これらの識別子はプリンシパルであり、サブジェクトはそれらを表します。

たとえば、個人は、アカウント番号プリンシパル(「87654-3210」)および他のサブジェクトと区別するための他の一意の識別子を持っている場合があります。

を作成する方法を見てみましょう UserPrincipal ログインに成功したら、 Subject:に追加します

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

4. ユーザー

通常、ユーザーは、リソースにアクセスして何らかのアクションを実行したり、作業タスクを実行したりする人を表します。

また、ユーザーをプリンシパルとして使用することもできますが、プリンシパルはユーザーに割り当てられたIDです。 UserPrincipal は、前のセクションで説明した JAASフレームワークのユーザーの優れた例です。

5. サブジェクト、プリンシパル、およびユーザーの違い

上記のセクションで見たように、プリンシパルを使用して、同じユーザーのIDのさまざまな側面を表すことができます。 それらはサブジェクトのサブセットであり、ユーザーはエンドユーザーまたは対話型オペレーターを参照しているプリンシパルのサブセットです。

6. 結論

このチュートリアルでは、ほとんどのセキュリティフレームワークで一般的なサブジェクト、プリンシパル、およびユーザーの定義について説明しました。 また、それらの違いを示しました。

これらすべての例とコードスニペットの実装は、GitHubプロジェクトにあります。