WAS 7.0 サーバーの 1 つのインスタンス内で 2 つのアプリケーションを実行しています。そのうちの 1 つは IBM Business Space (この場合は関係ありませんが) で、もう 1 つは開発中の RESTful サービスです。どちらのアプリも FileNet Content Engine と対話します。Business Space が JAAS を使用して認証および許可タスクを活用していることは知っていますが、マイニング サービスもそうです。要件は、サービスへのアクセス中に、ビジネス スペースに既にログインしているユーザーのセキュリティ トークンを使用して、サービス内から FileNet への要求を実行することです。私は JAAS メカニズムを深く理解していないため、間違っている可能性がありますが、Google 検索をすばやく実行すると、ログインしているユーザーの JAAS サブジェクトを取得して、サービスの UserContext に渡すことができると表示されます。私が使用しているコードは次のとおりです。
if (userContext == null) {
userContext = UserContext.get();
if (userContext.getSubject() == null) {
LoginContext loginContext = new LoginContext("config");
loginContext.login();
userContext.pushSubject( loginContext.getSubject() );
}
}
UserContext.set(userContext);
対応する JAAS 構成ファイル:
config {
com.filenet.api.util.WSILoginModule required;
};
次の質問があります。
- ユーザーが Business Space アプリにログインしていない場合に資格情報の入力を求めたくない場合、コールバック・ハンドラーを LoginContext コンストラクターに渡す必要がありますか?
- このシナリオを機能させるために、WAS 設定を微調整する必要はありますか?
アップデート
私は設定しました:
- ブラウザー固有のダイアログを使用して資格情報をユーザーに要求する web.xml の BASIC 認証方法
- 使用する LoginModule クラスの実装を指定する jaas.conf ファイルへのパス
このソリューションをテストすると、次のエラーで失敗します。
javax.security.auth.login.LoginException: エラー: 認証情報を取得するために使用できる CallbackHandler がありません
コールバック承認が成功した場合、これは何らかの理由でサービスが必要な JAAS サブジェクトを取得できないことを意味します。
私は何が欠けていますか?
また、IBM Web サイトで次のステートメントを見つけました。
EJB トランスポート層固有の利点の 1 つは、Java™ Authentication and Authorization Service (JAAS) ベースの認証を利用できることです。
ただし、WS トランスポートの使用中に JAAS を活用することが不可能であるとは述べていません。それともそうですか?