WebSphere Application Server では、Java 2 Platform, Enterprise
Edition (J2EE) 宣言セキュリティー・モデルをサポートしています。
J2EE デプロイメント記述子を使用して、認証およびアクセス制御ポリシーを定義できます。
カスタム・ログイン・モジュールをさらに積み重ね、
WebSphere Application Server 認証メカニズムをカスタマイズできます。
始める前に
カスタム・ログイン・モジュールにより、プリンシパルおよびクレデンシャル・マッピング、
カスタム・セキュリティー・トークン処理およびカスタム・クレデンシャル処理、およびその他の可能性でのエラー処理を実行できます。
通常は、認証機能の実行のためにアプリケーション・コードを使用する必要はありません。
アプリケーション・コードで認証機能を実行する必要がある場合は、このセクションで説明されている
プログラミング手法を使用してください。例えば、SSOAuthenticator ヘルパー関数をプログラムしたアプリケーションがある場合、以下のプログラミング・インターフェースを使用できます。
SSOAuthenticator ヘルパー関数は、WebSphere Application Server バージョン 4.0 以降では推奨されていません。
通常は、宣言セキュリティーを使用し、
最後の手段として、このセクションで説明する手法を使用してください。
このタスクについて
Lightweight Third-Party Authentication (LTPA) メカニズムのシングル・サインオン (SSO) オプションが使用可能な場合、
Web クライアント・ログイン・セッションは、ログインの成功後、LTPA SSO トークン Cookie によりトラッキングされます。
ログアウト時には、このトークンは削除されてログイン・セッションは終了しますが、
サーバー・サイドのサブジェクトは削除されません。
宣言セキュリティー・モデルを使用する場合、WebSphere Application Server の Web コンテナーにより、クライアント認証およびログイン・セッション管理が自動的に実行されます。
J2EE セキュリティー制約なしでログイン・ページを設定し、最初にそのログイン・ページにクライアント要求を送信することにより、アプリケーション・コードで認証を実行できます。
ログイン・ページは、Java Authentication and Authorization Service (JAAS) プログラミング・モデルを使用して、認証を実行することができます。
WebSphere Application Server Web ログイン・モジュールを使用可能に設定し、SSO Cookie を生成するには、
以下のステップを実行します。
プロシージャー
- 「wsMapDefaultInboundLoginModule」ログイン・モジュールを選択して、「カスタム・プロパティー」をクリックします。ユーザーのログイン構成には、2 つのログイン・モジュール、ltpaLoginModule および wsMapDefaultInboundLoginModule が定義されています。
- 新規システム・ログイン JAAS 構成を作成します。
パネルにアクセスするには、「セキュリティー」>「セキュア管理、アプリケーション、およびインフラストラクチャー」をクリックします。
「Java Authentication and Authorization Service」の下の「システム・ログイン」をクリックします。
- WEB_INBOUND ログイン構成を手動で複製し、それに新しい別名を付けます。
ログイン構成を複製するには、「新規」をクリックして、構成の名前を入力し、「適用」をクリックして、「追加プロパティー」の下の「JAAS ログイン・モジュール」をクリックします。
「新規」をクリックして、JAAS ログイン・モジュールを構成します。詳しくは、Java Authentication and Authorization Service 用のログイン・モジュール設定
を参照してください。 WebSphere Application Server Web コンテナーは、WEB_INBOUND ログイン構成を使用して、Web クライアントを認証します。
WEB_INBOUND ログイン構成を変更すると、セル内のすべての Web アプリケーションが影響を受けます。
WEB_INBOUND ログイン構成の内容を複製して、ユーザーの所有するログイン構成を作成する必要があります。
- 「wsMapDefaultInboundLoginModule」ログイン・モジュールを選択して、「カスタム・プロパティー」をクリックします。ユーザーのログイン構成には、2 つのログイン・モジュール、ltpaLoginModule および wsMapDefaultInboundLoginModule が定義されています。
- true の値を付けて、ログイン・プロパティー名 cookie を追加します。
2 つのログイン・モジュールが LTPA SSO Cookie の生成に使用可能になります。
オリジナルの WEB_INBOUND ログイン構成には、Cookie ログイン・オプションを追加しないでください。
- オプションで、カスタムの LoginModule (1 つまたは複数) を新しいログイン構成にスタックします。
- 新規に定義したログイン構成を使用して、JAAS LoginContext.login を実行することにより、プログラマチック・ログインにログイン・ページを使用します。
ログインの成功後、ltpaLoginModule または wsMapDefaultInboundLoginModule のいずれかにより、認証の成功時に LTPA SSO Cookie が生成されます。
実際にどちらの LoginModule により SSO Cookie が生成されるかは、システム認証構成やランタイムの状態 (このセクションの説明の範囲外) などの、多くの要因に左右されます。
- 変更された WSSubject.setRunAsSubject メソッドを呼び出し、認証キャッシュにサブジェクトを追加します。
そのサブジェクトは、LoginModule により作成された、WebSphere Application Server JAAS サブジェクトである必要があります。
認証キャッシュへサブジェクトを追加することにより、SSO トークンからのサブジェクトが再作成されます。
- WSSecurityHelper クラスから revokeSSOCookies メソッドを起動することにより、プログラマチック・ログアウト・ページを使用して SSO Cookies を取り消します。Cookie という用語が使用されているのは、WebSphere Application Server リリース 5.1.1 (およびそれ以降) のリリースが、異なる暗号化アルゴリズムを持つ新しい LTPA SSO トークンをサポートしているが、後方互換性のためオリジナルの LTPA SSO トークンを生成するよう構成できるためです。
そのサブジェクトが認証キャッシュにまだあり、SSO Cookie のみが取り消されることに注意してください。
例
認証を実行するには、以下のコード例を使用してください。
Suppose you wrote a LoginServlet.java:
Import com.ibm.wsspi.security.auth.callback.WSCallbackHandlerFactory;
Import com.ibm.websphere.security.auth.WSSubject;
public Object login(HttpServletRequest req, HttpServletResponse res)
throws ServletException {
PrintWriter out = null;
try {
out = res.getWriter();
res.setContentType("text/html");
} catch (java.io.IOException e){
// Error handling
}
Subject subject = null;
try {
LoginContext lc = new LoginContext("system.Your_login_configuration",
WSCallbackHandlerFactory.getInstance().getCallbackHandler(
userid, null, password, req, res, null));
lc.login();
subject = lc.getSubject();
WSSubject.setRunAsSubject(subject);
} catch(Exception e) {
// catch all possible exceptions if you want or handle them separately
out.println("Exception in LoginContext login + Exception = " +
e.getMessage());
throw new ServletException(e.getMessage());
}
The following is sample code to revoke the SSO cookies upon a programming logout:
The LogoutServlet.java:
public void logout(HttpServletRequest req, HttpServletResponse res,
Object retCreds) throws ServletException {
PrintWriter out =null;
try {
out = res.getWriter();
res.setContentType("text/html");
} catch (java.io.IOException e){
// Error Handling
}
try {
WSSecurityHelper.revokeSSOCookies(req, res);
} catch(Exception e) {
// catch all possible exceptions if you want or handle them separately
out.println("JAASLogoutServlet: logout Exception = " + e.getMessage());
throw new ServletException(e);
}
}