3.9.5 JAASログインモジュールの実装時の注意
ここでは,JAASログインモジュールを実装する際の注意事項について説明します。なお,JAASログインモジュールはユーザー側で開発します。一般的なJAASログインモジュールの開発方法については,Sun Microsystems,Inc. が公開しているJAAS認証に関するリファレンスガイドを参照してください。
(1) Callbackオブジェクトの生成について
JAASログインモジュールで認証情報を取得するためには,Webサービスセキュリティ機能が提供するコールバックハンドラを使用します。次に,JAASログインモジュール内で必要な処理を示します。
- LoginModule.initialize
-
コールバックハンドラ(javax.security.auth.callback.CallbackHandlerの実装クラス)をクラスメンバ変数に保持します。
- LoginModule.login
-
コールバックハンドラ内で使用するCallbackオブジェクト(javax.security.auth.callback.Callback)の配列を生成して,コールバックハンドラのhandleメソッドを呼び出します。handleメソッドを呼び出したあと,Callbackオブジェクトから認証情報を取り出して認証処理を行います。Callbackオブジェクトの配列は,次の表に示す構成で生成してください。
表3‒4 生成するCallbackオブジェクトの配列 配列番号
Callbackオブジェクト
用途
0
javax.security.auth.callback.NameCallback
ユーザー名の取得
1
javax.security.auth.callback.PasswordCallback
パスワードの取得
2
javax.security.auth.callback.TextInputCallback
パスワード形式の取得
3
javax.security.auth.callback.TextInputCallback
Nonce値の取得
4
javax.security.auth.callback.TextInputCallback
Created値の取得
配列要素の取得方法を次に示します。
- 0:ユーザー名の取得
-
ユーザー名はjavax.security.auth.callback.NameCallback.getName()メソッドで取得します。
- 1:パスワードの取得
-
パスワードはjavax.security.auth.callback.PasswordCallback.getPassword()メソッドで取得します。パスワード形式がテキスト形式の場合,パスワードテキスト文字配列を返します。パスワード形式がダイジェスト形式の場合,ダイジェスト形式の文字配列を返します。パスワード省略時はnullを返します。
- 2:パスワード形式の取得
-
パスワード形式はjavax.security.auth.callback.TextInputCallback.getText()メソッドで取得します。パスワードの形式は次の文字列で返します。
"PasswordText":テキスト形式
"PasswordDigest":ダイジェスト形式
- 3:Nonce値の取得
-
Nonce値はjavax.security.auth.callback.TextInputCallback.getText()メソッドで取得します。
- 4:Created値の取得
-
Created値はjavax.security.auth.callback.TextInputCallback.getText()メソッドで取得します。
Windowsの場合,JAASログインモジュールのコーディング例については,次のディレクトリに格納されているサンプルを参照してください。
<Application Serverのインストールディレクトリ>/wss/samples/c4web/ の下
usernameToken/rpc/Auth usernameToken/rpc/client/WEB-INF/classes/localhost usernameToken/rpc/service/WEB-INF/classes/localhost
(2) ログイン構成ファイルの配置について
Component Container のユーザー定義ファイル(usrconf.properties)に,次のエントリーを追加してください。
java.security.auth.login.config==<ログイン構成ファイルのフルパス名>
ユーザー定義ファイルについては,マニュアル「アプリケーションサーバ リファレンス 定義編(サーバ定義)」を参照してください。