web.xmlファイルのセキュリティ設定

 

 


 

 


web.xmlファイルのセキュリティ設定

 

各アプリケーションのセキュリティはweb.xmlファイルで以下の手順に基づき設定する。

1.       URLパタンをベースにしてリソースに制約を設定する

2.       そのリソースにアクセスできるセキュリティ・ロール指名する

3.       このウェブ・アプリケーションの全てのセキュリティ・ロールを指名する

4.       そのロール内の全てのグループやユーザを指名する

 

以下、このステップに従って設定法を説明する。

 

 

ステップ1:  URLパタンをベースにしてリソースに制約を設定する

 

セキュリティ制約のタグ<security-constraint>のなかの<web-resource-collection>タグ内の要素を見る。Tomcatについているテンプレートは次のようになっている。

      <web-resource-collection>

         <web-resource-name>Protected Area</web-resource-name>

        <!-- Define the context-relative URL(s) to be protected -->

         <url-pattern>/jsp/security/protected/*</url-pattern>

        <!-- If you list http methods, only those methods are protected -->

        <http-method>DELETE</http-method>

         <http-method>GET</http-method>

         <http-method>POST</http-method>

        <http-method>PUT</http-method>

      </web-resource-collection>

web-resource-name要素は次の要素から構成される。

web-resource-name

この保護領域の名前

description

このリソース名の記述

url-pattern

このコンテキストに相対なこの保護領域のURLパタン。ユーザがこのURLパタンのページにアクセスしようとしたときは、エンジンはこのユーザにアクセスを許容する前に、このユーザが認証されているかの確認をする。

http-method

適用されるHTTPメソッド。これを指定しないときは全てのHTTPメソッドに対して適用される。

 

 

ステップ2:  このリソースにアクセスが許容されるセキュリティ・ロールを指名する

 

この要素に対するTomcatのテンプレートは次のようである。

      <auth-constraint>

         <!-- Anyone with one of the listed roles may access this area -->

         <role-name>tomcat</role-name>

        <role-name>role1</role-name>

      </auth-constraint>

この要素に含まれる要素は<description><role-name>のみである。<role-name>にはロールの名前(複数あれば、その分)を含める。

 

 

ステップ3:  このウェブ・アプリケーションのセキュリティ・ロールの全てを挙げる

 

Tomcatのテンプレートにはこの<security-role>要素は入っていない。この要素に含まれる要素は<description><role-name>のみである。<role-name>にはこのwebアプリケーションに含まれるロールの名前(複数あれば、その分)を含める。

 

 

ステップ4: このロールごとにプリンシパルを設定する

 

WebLogicサーバなどでは、<security-role-assignment>タグによりロールごとにプリンシパル名が設定できるようになっている。Tomcatの場合はtomcat-users.xmlファイルにユーザ名毎にパスワードとロールを指定するだけである。

 

 

ステップ5: 認証のオプションを選択

 

Tomcatweb.xmlテンプレート・ファイルをみるとBASICFORMが選択できるようになっている。

   <!-- Default login configuration uses BASIC authentication -->

    <!--

    <login-config>

      <auth-method>BASIC</auth-method>

      <realm-name>Example Basic Authentication Area</realm-name>

    </login-config>

    -->

 

    <!-- Form-based login is enabled by default.  If you wish to

         try Basic authentication, comment out the <login-config>

         section below and uncomment the one above. -->

    <login-config>

      <auth-method>FORM</auth-method>

      <realm-name>Example Form-Based Authentication Area</realm-name>

      <form-login-config>

        <form-login-page>/jsp/security/login/login.jsp</form-login-page>

        <form-error-page>/jsp/security/login/error.jsp</form-error-page>

      </form-login-config>

    </login-config>

デフォルトである基本(BASIC)認証を選択したときは、これに含める要素は<realm-name>のみである。基本認証はそれだけで済むが、フォーム・ベースの認証手順を選択したときは、さらに次のステップを踏むことになる。

 

 

ステップ6: web.xmlの設定をする

 

ここでは前のステップで示した<login-conf>要素のコメントアウトを外し、レルム名、ログイン・ページやエラー・ページを指定する。ログインやエラーのページはjsp、サーブレット、HTMLいずれでも構わない。

 

 

ステップ7: ログイン・フォームのページを作成する

 

例えばlogin.htmlページは次のようなformHTMLタグを含むことになる。

<form method=”POST” action=”j_security_check”>

  Username: <input type=”text” name=”j_username”><br />

  Password: <input type=”password” name=”j_password”><br />

  <input type=”submit” value=”Login”>

  <input type=”reset” value=”Reset”>

</form>

フォーム・ベースの認証では、エンジンは次のように処理する:

1.       そのリソースが保護されていたら、login.jspなどのログイン用のページをクライアントに返す。

2.       クライアントからのユーザ名とパスワードが帰ってきたら、これを検証し、失敗すればerror.jspなどのエラー・ページを返す。

3.       認証されたユーザが認証ロールに含まれておれば、当初要求されていたリソースをクライアントに送る。そうでなければエラー・ページを返す。

以上でセキュリティの設定は終了である。

 

 

ステップ8: サーブレットやJSPのレビュー

 

サーブレット・エンジンが行う認証の手順にはクッキーを使ったセッションが使われる。これは皆さんが自分のブラウザに、クッキー受付を拒否させると、ログインできなくなることで確認できる(これまでのレッスンで紹介したサーブレットは、クッキーを受け付けないブラウザでも問題が生じないようにプログラミングされていた)。従って認証が終了したHTTP要求は既にセッションが張られている。このユーザが最初に訪問したか否かの判断にHttpSession.isNew()メソッドは使えなくなる。従ってSessionの属性やデータベースを使ったきちんとしたセッション状態管理に変更しなければならない。

 

またセキュリティがからむアプリケーションにおいては、何時誰が何をアクセスしたかのログを(例えばTomcat_home\logsのディレクトリ内に)きちんと残すことが好ましい。このチュートリアルではプログラムを示さないが、各自試されると良い。

 

SimpleMessageReceptionistクラスにあるRequestDumpメソッドを使って認証されたあとのセッションやクッキーがどうなっているかを調べるのも皆さんの宿題にしよう。

 

 

前節     目次     次節