Tomcat SingleSignOn 検証 !!!目的 *Tomcat に付属のSingleSignOn機能を検証する !!!環境構築 !!Windows *インストールパラメータ ,項目,内容 ,Javaインストール先,C:\jdk1.5.0_12 ,tomcatインストール先,D:\tomcat5b ,tomcat SHUTDOWNポート,28005 ,tomcat HTTPポート,28080 ,tomcat AJP13ポート,28009 ,ログインユーザーID,tomcat ,ログインパスワード,tomcat ,確認用webアプリケーション1,http://localhost:28080/servlets-examples/ ,確認用webアプリケーション2,http://localhost:28080/servlets-examples2/ ,ログイン用フォーム,http://localhost:28080/servlets-examples/login_form.jsp !!Java 確認 *コマンドプロンプトで set コマンドを実行 *JAVA_HOME 環境変数が設定されていることを確認, 例: C:\jdk1.5.0_12 *PATH 環境変数に %JAVA_HOME%\bin が含まれることを確認, 例: C:\jdk1.5.0_12\bin *java -version コマンド確認 D:\>java -version java version "1.5.0_12" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_12-b04) Java HotSpot(TM) Client VM (build 1.5.0_12-b04, mixed mode, sharing) !!Tomcat インストール !D:\tomcat5b にインストール D:\> dir d:\@user\soft\Java\apache-tomcat-5.5.25.zip ...(中略).. 2007/09/25 14:16 6,898,457 apache-tomcat-5.5.25.zip ...(中略).. D:\> unzip -x d:\@user\soft\Java\apache-tomcat-5.5.25.zip ...(中略).. D:\>ren apache-tomcat-5.5.25 tomcat5b !!tomcat5b 設定 *bin\startup.bat, bin\shutdown.bat に CATALINA_HOME設定追加 D:\> notepad D:\tomcat5b\bin\startup.bat D:\> notepad D:\tomcat5b\bin\shutdown.bat set CATALINA_HOME=D:\tomcat5b *conf\server.xml 編集 D:\> cd \tomcat5b\conf D:\tomcat5b\conf> copy server.xml server.xml.orig D:\tomcat5b\conf> notepad server.xml !!起動 D:\tomcat5b\conf> cd \ D:\> \tomcat5b\bin\startup.bat *起動ログ確認 2007/09/25 15:25:44 org.apache.catalina.startup.Catalina start 情報: Server startup in 15141 ms *起動ポート確認 D:\>netstat -an | grep LISTENING | grep 280 TCP 0.0.0.0:28009 0.0.0.0:0 LISTENING TCP 0.0.0.0:28080 0.0.0.0:0 LISTENING TCP 127.0.0.1:28005 0.0.0.0:0 LISTENING *アプリケーション動作確認 http://localhost:28080/servlets-examples/ !!停止 D:\> \tomcat5b\bin\shutdown.bat !!Webアプリケーション設定 !必要のないwebアプリケーションの削除 *webapps\balancer *webapps\jsp-examples *webapps\ROOT *webapps\tomcat-docs *webapps\webdav *conf\Catalina\localhost\manager.xml *conf\Catalina\localhost\host-manager.xml !!Linux *インストール先 CATALINA_HOME が /usr/local/tomcat5b *文字コード euc-jp が作業しやすいが、必須でない。UTF-8 がよい。 *その他は修正なし !!!検証 !!ログイン !conf\tomcat-users.xml 修正 *役割(role)「tomcat」が存在すること *id/pw=tomcat/tomcat でログインすると役割(role)「tomcat」を持つように。 !webapps\servlets-examples\login_form.jsp 作成 <%@page pageEncoding="Windows-31J" contentType="text/html; charset=Windows-31J" %> login_form

id:

pw:

!webapps\servlets-examples\login_error.jsp 作成 <%@page pageEncoding="Windows-31J" contentType="text/html; charset=Windows-31J" %> login_error login error!! !webapps\servlets-examples\show_user.jsp 作成 <%@page pageEncoding="Windows-31J" contentType="text/html; charset=Windows-31J" %> login_success!! login success!!

request:<%=request%>

request.getRemoteHost(): <%=request.getRemoteHost()%>

request.getContextPath(): <%=request.getContextPath()%>

request.getRemoteUser(): <%=request.getRemoteUser()%>

session.getId(): <%=session.getId()%>

logout

!webapps\servlets-examples\logout.jsp 作成 <%@page pageEncoding="Windows-31J" contentType="text/html; charset=Windows-31J" %> logout <% session.invalidate(); %> logout!! ユーザー情報表示(要ログイン) !webapps/servlets-examples/WEB-INF/web.xml 追加設定 edi /* GET POST tomcat FORM /login_form.jsp /login_error.jsp tomcat !!ログアウト *basic/digest ではログアウトできない。 *form-based では session.invalidate() でログアウトする *SSL+client証明書では? !!権限の確認 !!SingleSignOn 確認 *conf/server.xml の に SingleSignOn 設定を追加 !SingleSignOn設定がない場合 +http://localhost:28080/servlets-examples/show_user.jsp **ログインが必要 +http://localhost:28080/servlets-examples/show_user.jsp **別途ログインが必要 !SingleSignOn設定がある場合 +http://localhost:28080/servlets-examples/show_user.jsp **ログインが必要 **request.getRemoteUser(): tomcat **session.getId(): DC8A5622659C179B4E0264507B6BAD7F +http://localhost:28080/servlets-examples/show_user.jsp **ログインの必要なし **request.getRemoteUser(): tomcat **session.getId(): 99E4191E17B140C8BDFE2A12CAB94CF5 **Webアプリケーション間での認証の引継ぎが発生している !セッションタイムアウト時 *片方のアプリケーションでセッションがタイムアウトした場合 !!JDBCDataSource !!!今後 !!既存アプリケーションの再構築 !認証 !共通コードの分離 !個別Webアプリケーションのプロジェクト分離 *EDI基盤(ログイン・ユーザー情報・パスワードリマインダ) *webedi *経理 *デジ原 *検品 !新規アプリケーションの構築時の指針作成 *作成方針・利用方針 *レビュー *管理体制 **CVS手順 **要件定義・開発・テスト・リリース !!JDBCStore *セッションをサーバー間で共有 *Webアプリケーション間では共有できない。 **webアプリケーションが発行するCookie は webアプリケーションに限定されている *SingleSignOn 機能では別のcookie が発行される !!!参考 !tomcat-4.0 サーバ設定ドキュメント和訳 / Realmコンポーネント *http://www.jajakarta.org/tomcat/tomcat3.2-4.0/tomcat-4.0b5/src-ja/catalina/docs/config/realm.html '''一旦ユーザーがうまく認証されるならば、HttpServletRequestインタフェースの以下のメソッドは役に立つ値を返すことになります: '''getRemoteUser() - 認証されたユーザーのユーザー名を返すことになります。 *tomcat-5.5 ドキュメントでは該当する文書なし。英文でも該当なし。 !Java Servlet Specification 2.4 *Java サーブレット仕様書 2.4 *http://java.sun.com/products/servlet/download.html より PDF ダウンロード