この文書は2016年以降更新されていません
JAAS に関するチートシート
最終改訂日 (yy/mm/dd): 2015/07/18 はじめにJAAS 認証とはユーザーまたは別のシステムの ID を検証するプロセスが認証です。JAAS は、認証フレームワークとして、認証対象ユーザーの ID とクレデンシャル情報をログインからログアウトまで管理します。 JAAS 認証のライフサイクルは次のとおりです。
構成ファイルJAAS 構成ファイルには、アプリケーションへのログオンに使用できる LoginModule ごとに LoginModule スタンザが 1 つずつ含まれています。 JAAS 構成ファイルのスタンザの例を次に示します。 Branches { USNavy.AppLoginModule required debug=true succeeded=true; } LoginModule のエントリーとスタンザの両方を終了するセミコロンの位置に注意してください。required という語は、ユーザーがログインするには LoginContext の login () メソッドが成功裏に完了しなければならないことを意味します。debug="true"、succeeded="true" などのように、LoginModule 固有のキーと値が LoginModule に渡されます。これらの値は LoginModule によって定義され、その使用方法は LoginModule 内で管理されます。オプションを構成するには、debug="true" のようなキーと値のペアを使用します。キーと値は等号で区切ります。 Main.java (クライアント)
Java –Djava.security.auth.login.config==packageName/packageName.config packageName.Main Stanza1 説明: packageName は、構成ファイルが格納されているディレクトリです。 packageName.config は、Java パッケージ packageName 内の構成ファイルを指定します。 packageName.Main は、Java パッケージ packageName 内の Main.java を指定します。 Stanza1 は、Main () が構成ファイルから読み込むスタンザの名前です。
LoginModule.javaLoginModule には以下の認証メソッドが必須です。
initialize ()Main () で、LoginContext が構成ファイルから適切なスタンザを読み込んだ後、LoginContext がそのスタンザで指定された LoginModule のインスタンスを生成します。
login ()ユーザーが指定したログイン情報を取得します。次のコードスニペットは、2 つのコールバックオブジェクトから成る配列を宣言しています。この配列は、callbackHandler.java プログラムの callbackHandler.handle メソッドに渡されると、ユーザーが入力したユーザー名とパスワードが読み込まれます。 NameCallback nameCB = new NameCallback("Username"); PasswordCallback passwordCB = new PasswordCallback ("Password", false); Callback[] callbacks = new Callback[] { nameCB, passwordCB }; callbackHandler.handle (callbacks);
commit ()login () でユーザーの資格情報が正常に確認されると、JAAS 認証フレームワークは必要に応じてその資格情報をサブジェクトに関連付けます。資格情報には公開とプライベートの 2 種類があります。公開資格情報には公開鍵が含まれます。プライベート資格情報にはパスワードと公開鍵が含まれます。従業員番号やユーザーグループの会員 ID などのプリンシパル (サブジェクトが持つログイン名以外の ID) がサブジェクトに追加されます。次に commit () メソッドの例を示します。この例では、まず、認証されたユーザーが所属するグループごとに、グループ名がプリンシパルとしてサブジェクトに追加されます。次に、サブジェクトのユーザー名がその公開資格情報に追加されます。
public boolean commit() { If (userAuthenticated) { Set groups = UserService.findGroups (username); for (Iterator itr = groups.iterator (); itr.hasNext (); { String groupName = (String) itr.next (); UserGroupPrincipal group = new UserGroupPrincipal (GroupName); subject.getPrincipals ().add (group); } UsernameCredential cred = new UsernameCredential (username); subject.getPublicCredentials().add (cred); } } abort ()abort () メソッドは、認証に失敗したときに呼び出されます。abort () メソッドで LoginModule を終了する前に、ユーザー名とパスワードの入力フィールドなどの状態をリセットするように注意してください。 logout ()
public boolean logout() { if (!subject.isReadOnly()) { Set principals = subject.getPrincipals(UserGroupPrincipal.class); subject.getPrincipals().removeAll(principals); Set creds = subject.getPublicCredentials(UsernameCredential.class); subject.getPublicCredentials().removeAll(creds); return true; } else { return false; } }
CallbackHandler.javaさまざまなコールバックオブジェクトを持つ複数の LoginModule にサービスを提供できるように、callbackHandler はどの LoginModule からも独立したソース (.java) ファイルに存在します。
public void handle(Callback[] callbacks) { for (int i = 0; i < callbacks.length; i++) { Callback callback = callbacks[i]; if (callback instanceof NameCallback) { NameCallback nameCallBack = (NameCallback) callback; nameCallBack.setName(username); } else if (callback instanceof PasswordCallback) { PasswordCallback passwordCallBack = (PasswordCallback) callback; passwordCallBack.setPassword(password.toCharArray()); } } } 関連資料
開示添付の JAAS に関するチートシートに記載のコードはすべて、http://jaasbook.com/ のフリーソースからそのままコピーしたものです。 Authors and Primary EditorsDr. A.L.Gottlieb - AnthonyG [at] owasp.org Other CheatsheetsDeveloper Cheat Sheets (Builder)
Assessment Cheat Sheets (Breaker)
Mobile Cheat Sheets OpSec Cheat Sheets (Defender) Draft Cheat Sheets
|