Tomcat サーバー sans Apache で SSO に JAAS を使用する。SSO は、いくつかの関連アプリケーションへのアクセスを制御し、うまく機能します。最近、Ant から Maven への移行を開始しました。Maven 用の Tomcat プラグインを使用するために、以前は必要のなかった Tomcat Manager アプリケーションをセットアップする必要がありました。サーバー上の他のWebアプリと一緒に、BASIC認証またはCLIENT-CERT認証の両方で起動して実行することができました.
私が抱えている問題は、ユーザーがマネージャーで認証されると、他の webapps のセッションがドロップされることです-webapp への IE ログイン、Manager へのログイン、webapp の更新、ログインページへのリダイレクト。
コンテキスト レベルで SSO バルブを定義し、ホスト レベルでレルムを定義することで、この重複を軽減することができました。これにより、ブラウザーを介して Web アプリケーション間を移動するときに SSO が引き続き機能します。ただし、問題の他のWebアプリケーションにアクセスするまで、クロスコンテキストAJAXリクエストと「ユーザーがログインしていません」というエラーが返されます。Manager のこのアプローチ認証を使用すると、他の Web アプリケーションから効果的に分離されました。
つまり、JAAS 認証モジュールを使用して Web アプリケーションで SSL/データベース認証を介して SSO を使用できるようにする最善の方法を探していますが、Tomcat に Manager を SSO から除外させます。Webapps 1、2、3 の場合は SSL 経由の IE SSO ですが、UN/PW 認証は Manager の SSO とは独立しており、認証は 2 つの間で独立しています。
これを行う方法はありますか?
現在の構成:
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="false"
xmlValidation="false" xmlNamespaceAware="false">
<Realm className="org.apache.catalina.realm.JAASRealm" appName="CustomLogin"
userClassNames="com.foo.bar.User" roleClassNames="com.foo.bar.Role"
useContextClassLoader="true" debug="false"/>
<Valve className="org.apache.catalina.authenticator.SingleSignOn"/>
<Context path="/Webapp1" docBase="webapp1">
<ResourceLink name="jdbc/WEBAPP" global="jdbc/WEBAPP" type="java.sql.DataSource"/>
</Context>
<Context path="/Webapp2" docBase="webapp2">
<ResourceLink name="jdbc/WEBAPP" global="jdbc/WEBAPP" type="java.sql.DataSource"/>
</Context>
<Context path="/Webapp3" docBase="Webapp3">
<ResourceLink name="jdbc/WEBAPP" global="jdbc/WEBAPP" type="java.sql.DataSource"/>
</Context>
<Context path="/manager" docBase="manager" AntiJARLocking="false" antiResourceLocking="false" privileged="true" reloadable="false">
<Realm className="org.apache.catalina.realm.MemoryRealm"></Realm>
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="manager_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
</Context>
</Host>
</Engine>
この構成を使用すると、すべての webapps と Manager が SSO の制御下に置かれ、上記の重複が発生します。IE は SSL 経由で webapp1 にログインし、次に UN/PW 経由で Manager にログインし、webapp1 を更新してログイン ページにリダイレクトします。
SSO バルブを Web アプリケーションのコンテキストに移動すると、この問題は解決しますが、クロス コンテキスト AJAX 要求に対して「ユーザーがログインしていません」という応答が発生します。