Webアプリ開発事始 第16回

安全な通信を考える(2)
~SSLを使ったユーザー認証サイトの構築
長谷川裕行
有限会社 手國堂

セッション管理の準備

ここまで準備できたら、いよいよサーブレットでセッション管理を行う部分を作ります。Javaサーブレットでセッション管理を行うには、javax.servlet.http.HttpSessionとjavax.servlet.http.HttpRequestというインターフェイスを利用します。


- 認証の手順 -

サーブレットでは、おおよそ以下のような手順でセッション管理を行います。

(1) クライアントからサーバーへリクエストを送信します
(2) サーバーがセッションを参照します
リクエストを受け取ったサーバーはセッションを参照します。JSPの場合、標準でリクエストに結びついたセッションを参照するようになっており、セッションが存在していなければ、新たにセッションが生成されます。
  getSession(true)
(3) サーバーがセッションIDを取得します
サーバーは、参照または生成されたセッションのセッションIDを取得します。
  session.getID()
(4) サーバーからクライアントへセッションIDを渡します
セッションIDは、以下の2通りの手段のいずれかでクライアントに渡されます。

1. パラメータ“jsessionid”を介したURL Rewriting
2. “JSESSIONID”という名称のCookie
これ以降タイムアウトになるかクライアントがログオフするまで、セッションが成立した状態が続きます。
(5) サーバーがセッションにオブジェクトを記録します
  session.setAttribute("myObj", new MyObject())
(6) セッションからオブジェクトを取り出します
  session.getAttribute("myObj")
(7) セッションを無効にします
  session.invalidate()


- ディレクトリ構造 -

サンプルでは、以下のようなファイル群とディレクトリ構造を用います。これは、Tomcatの一般的なディレクトリ構成です。

$TOMCAT_HOME/
 webapps/ -- Webアプリケーションの保存場所
  sample/ -- 個別のWebアプリケーションの保存場所
   protected/ -- 保護されたファイル群
    head.jsp -- キャッシュを無効にする処理(すべてのJSPにinclude)
    showinfo.jsp -- セッション情報を表示する処理(他のJSPにinclude)
    index.jsp -- 保護されたトップページ(参照するには認証が必要)
    whatsnew.jsp -- 保護されたページ(トップからリンクされている)
   login/ -- ログイン処理用ファイル群
    login.jsp -- ログイン処理(ユーザーインターフェイス)
    logout.jsp -- ログアウト処理
    error.jsp -- ログイン失敗時にメッセージを表示
   WEB_INF/ -- 初期設定用ファイルの保存場所
    web.xml -- 保護ページ、認証手段などの設定





- 2つの認証方式 -

ユーザーの認証方法には、基本認証とForm-Based認証の2通りあります。

基本認証
ユーザー名(ID)とパスワードの入力を、ブラウザに実装されているダイアログボックスで行います。従って入力インターフェイスは、OSのAPIに依存したものとなります。
Form-Based認証
ユーザー名(ID)とパスワードの入力を、HTMLのFORMタグを用いたWebフォームで行います。従って、ページ作者が入力インターフェイスを自由にデザインできることになります。

どちらの場合も、SSLを使わなければユーザー名とパスワードの組は、サーバー側に平文で記録され、ネット上をそのままの形で流れることになります。実際、Tomcatに付属するユーザー認証のサンプルでも、ユーザー情報は平文のテキストファイルとなっています。

そのため、ごく少数の組織や部署内での認証システムなら利用可能ですが、顧客や取引先など部外のユーザーにたいする認証手段としては不安です。ユーザー情報はデータベースで管理し、SSLによる暗号化通信を実装するべきでしょう。



- 基本設定~web.xml -


WEB_INFディレクトリに置かれるweb.xmlには、ユーザー認証の手段や各ディレクトリのアクセス制限などが記述されます。ここでは、リスト4のように設定しておきます。

“webapp”エレメント(<web-app>~</web-app>間)の“security-constraint”エレメントと“login-config”エレメントに、アクセス制限と認証のための設定を記述します。

security-constraintエレメント
アクセス制限の設定を記述します
url-pattern:アクセスを制限し、ユーザー認証を必要とするディレクトリおよびファイルを指定します。ファイルはパターンで指定し、*記号はすべてのファイルを示します。先頭に“proc”と付くHTMLファイルを指定するなら“/protected/proc*.html”のようにします。

ここでは“/protected/*”として、protectedディレクトリ内のすべてのファイルを指定しています。
http-method:アクセスを制限するHTTPメソッドを指定します。
 ここではPOSTとGETを指定しているので、送受信ともに制限されます。
auth-constraint:アクセスを許可するロールを指定します。
login-configエレメント
認証手段を設定します
auth-method:認証手段を指定します。ここでは、Form-Based認証を行います。

form-login-config:ユーザー名とパスワードを入力するログインページと、ユーザーがログインに失敗した際に表示されるページを指定します。

リスト4:Form-Based認証の場合のweb.xml



トップページ
実行環境
Tomcatとデータベースの準備
セッション管理の準備
認証の手順
ディレクトリ構造
2つの認証方式
基本設定~web.xml
JSPのソース作成
ApacheとIISでSSLを使うには
あとがき

Copyright © MESCIUS inc. All rights reserved.