11.3.4. 発行先認証


サブジェクト認証には JAAS ログインが必要です。JAAS ログイン設定ファイルの説明は、Java ドキュメントの JAAS Login Configuration File を参照してください。
ログインプロセスは、以下のポイントで構成されます。
  1. アプリケーションは LoginContext をインスタンス化し、ログイン設定の名前および CallbackHandler を渡して、設定 LoginModules の要件に応じて Callback オブジェクトを設定します。
  2. LoginContext は、名前付きログイン 設定 に含まれるすべて の LoginModule をロードするよう設定を参照します。このような名前付き設定が存在しない場合は、 の設定がデフォルトとして使用されます。
  3. アプリケーションは LoginContext.login メソッドを呼び出します。
  4. ログインメソッドは、ロードされた各 LoginModule を呼び出します。各 LoginModule がサブジェクトの認証を試みると、関連付けられた CallbackHandler で handle メソッドを呼び出し、認証プロセスに必要な情報を取得します。必要な情報は、callback オブジェクトの配列で handle メソッドに渡されます。成功すると、LoginModuleは関連するプリンシパルとクレデンシャルをサブジェクトに関連付けます。
  5. LoginContext は認証ステータスをアプリケーションに返します。成功はログインメソッドからの戻り値によって表されます。失敗は、ログインメソッドによってスローされる LoginException によって表されます。
  6. 認証に成功すると、アプリケーションは LoginContext.getSubject メソッドを使用して認証されたサブジェクトを取得します。
  7. サブジェクト認証のスコープが完了したら、LoginContext.logout メソッドを呼び出して、ログイン メソッドによってサブジェクトに関連付けられたすべてのプリンシパルおよび関連情報を削除できます。
LoginContext クラスは、サブジェクトを認証する基本的なメソッドを提供し、基礎となる認証技術に依存しないアプリケーションを開発する方法を提供します。LoginContextConfiguration を確認し、特定のアプリケーションに設定された認証サービスを判別します。LoginModule クラスは認証サービスを表します。そのため、アプリケーション自体を変更せずに、異なるログインモジュールをアプリケーションにプラグインできます。以下のコードは、アプリケーションがサブジェクトを認証するために必要な手順を示しています。
CallbackHandler handler = new MyHandler();
LoginContext lc = new LoginContext("some-config", handler);

try {
    lc.login();
    Subject subject = lc.getSubject();
} catch(LoginException e) {
    System.out.println("authentication failed");
    e.printStackTrace();
}
                        
// Perform work as authenticated Subject
// ...

// Scope of work complete, logout to remove authentication info
try {
    lc.logout();
} catch(LoginException e) {
    System.out.println("logout failed");
    e.printStackTrace();
}
                        
// A sample MyHandler class
class MyHandler 
    implements CallbackHandler
{
    public void handle(Callback[] callbacks) throws
        IOException, UnsupportedCallbackException
    {
        for (int i = 0; i < callbacks.length; i++) {
            if (callbacks[i] instanceof NameCallback) {
                NameCallback nc = (NameCallback)callbacks[i];
                nc.setName(username);
            } else if (callbacks[i] instanceof PasswordCallback) {
                PasswordCallback pc = (PasswordCallback)callbacks[i];
                pc.setPassword(password);
            } else {
                throw new UnsupportedCallbackException(callbacks[i],
                                                       "Unrecognized Callback");
            }
        }
    }
}
Copy to Clipboard Toggle word wrap
開発者は LoginModule インターフェースの実装を作成して、認証テクノロジーと統合します。これにより、管理者は異なる認証技術をアプリケーションにプラグインできます。複数の LoginModuleをチェーンして、複数の認証テクノロジーが認証プロセスに参加できるようにすることができます。たとえば、LoginModule はユーザー名/パスワードベースの認証を実行できますが、別の LoginModule はスマートカードリーダーや biometric オーセンティケーターなどのハードウェアデバイスと対話できます。
LoginModule のライフサイクルは、クライアントがログインメソッドを作成し、発行する LoginContext オブジェクトによって実行されます。このプロセスは 2 つのフェーズで構成されます。プロセスのステップは以下のとおりです。
  • LoginContext は、パブリック no-arg コンストラクターを使用して設定済みの LoginModule を作成します。
  • LoginModule は、初期化メソッドへの呼び出しで初期化されます。Subject 引数は、常に null 以外であることが保証されます。initialize メソッドの署名は次のとおりです。 public void initialize(Subject subject, CallbackHandler callbackHandler, Map sharedState, Map options)
  • login メソッドは、認証プロセスを開始するために呼び出されます。たとえば、メソッドの実装では、ユーザーにユーザー名とパスワードの入力を求めるプロンプトを出し、NIS や LDAP などの命名サービスに保存されているデータに対して情報を確認することができます。別の実装では、スマートカードとバiometric デバイスへのインターフェースを設定したり、基礎となるオペレーティングシステムからユーザー情報を抽出することもできます。各 LoginModule によるユーザーアイデンティティーの検証は JAAS 認証のフェーズ 1 とみなされます。login メソッドの署名は boolean login() throws LoginException です。LoginException は失敗を示します。戻り値 true はメソッドが成功したことを示しますが、戻り値が false の場合は、ログインモジュールが無視されることを示します。
  • LoginContext の 's overall authentication に成功すると、コミット は各 LoginModule で呼び出されます。LoginModule についてフェーズ 1 に成功すると、コミットメソッドはフェーズ 2 を続行し、関連するプリンシパル、パブリッククレデンシャル、またはプライベートクレデンシャルをサブジェクトに関連付けます。LoginModule でフェーズ 1 が失敗すると、コミット するとユーザー名やパスワードなどの以前に保存された認証状態が削除されます。commit メソッドの署名は boolean commit() throws LoginException です。コミットフェーズの完了に失敗した場合は、LoginException を発生させます。true を返すと、メソッドが成功したことを示しますが、false を返すと、ログインモジュールは無視されることを示します。
  • LoginContext 's overall authentication fails を選択すると、各 LoginModuleabort メソッドが呼び出されます。abort メソッドは、ログインまたは初期化メソッドによって作成された認証状態を削除または破棄します。アボート メソッドの署名は boolean abort() throws LoginException です。中止 フェーズの完了に失敗した場合は、LoginException を発生させます。true を返すと、メソッドが成功したことを示しますが、false を返すと、ログインモジュールは無視されることを示します。
  • ログインに成功した後に認証状態を削除するには、アプリケーションが LoginContextlogout を呼び出します。これにより、各 LoginModulelogout メソッドが呼び出されます。logout メソッドは、コミット 操作時に最初にサブジェクトに関連付けられたプリンシパルおよび認証情報を削除します。認証情報は削除時に破棄される必要があります。logout メソッドの署名は boolean logout() throws LoginException です。ログアウトプロセスの完了に失敗したため、LoginException が発生します。true を返すと、メソッドが成功したことを示しますが、false を返すと、ログインモジュールは無視されることを示します。
LoginModule がユーザーと通信して認証情報を取得する必要がある場合は、callbackHandler オブジェクトを 使用 します。アプリケーションが実装する CallbackHandler インターフェースを作成してそれを LoginContext に渡します。これにより、認証情報が基礎となるログインモジュールに直接送信されます。
ログインモジュールは CallbackHandler を使用して、パスワードやスマートカード PIN などのユーザーからの入力を収集し、ステータス情報などのユーザーに情報を提供します。アプリケーションが CallbackHandler を指定できるようにすることで、アプリケーションがユーザーと対話する方法から、基礎となる LoginModuleは独立しています。たとえば、CallbackHandler 's implementation for a GUI application の場合、ユーザー入力を要求するウィンドウが表示されることがあります。一方、アプリケーションサーバーなど、GUI 以外の環境の CallbackHandler 実装は、アプリケーションサーバー API を使用して認証情報情報を取得するだけです。その CallbackHandler インターフェースには、以下を実装する 1 つのメソッドがあります。
void handle(Callback[] callbacks)
    throws java.io.IOException, 
           UnsupportedCallbackException;
Copy to Clipboard Toggle word wrap
Callback インターフェースは、最後に確認される認証クラスです。これは、前述の例で使用した NameCallbackPasswordCallback を含む、複数のデフォルト実装を提供するタグ付けインターフェースです。LoginModuleCallback を使用して、認証メカニズムで必要な情報を要求します。LoginModuleは、認証のログインフェーズ中に コールバックの配列を CallbackHandler.handle メソッドに直接渡します。callbackhandler が handle メソッドに渡される Callback オブジェクトの使用方法を理解していない場合は、UnsupportedCallbackException をスローし、ログイン呼び出しを中止します。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat