Shoeisha Technology Media

EnterpriseZine(エンタープライズジン)

EnterpriseZine(エンタープライズジン)

テーマ別に探す

ユーザ認証とWADL

  2008/11/19 09:00

さて、いよいよ最終回となりました。今回はまず、JavaEEサーバとしてGlassFishを選択し、JAX-RSでユーザ認証を行う方法を説明します。次に、連載1回目でも少しだけ紹介したWADL(RESTful Webサービスのインタフェース記述言語)を利用して、効率的にリクエスタアプリケーションを作成する方法について、解説します。
 

RESTful Webサービスにおけるユーザ認証

 RESTful Webサービスでユーザ認証を行う場合は、通常、HTTPの仕様で既定された標準的な認証方式(BASIC認証またはDIGEST認証)を利用します。それでは、JavaEEサーバとしてGlassFishを使用し、GlassFishにおけるBASIC認証の方法を紹介していきましょう。

 GlassFishの認証機能を利用するためには、他のJavaEEサーバ製品と同じように、レルムを設定する必要があります。レルムとは、ユーザ認証を行うために必要な、一連のユーザ情報のセットのことです。ここでは、Tomcatなどでもお馴染みのデータベースを利用したレルム(JDBCレルム)を設定します。JDBCレルムを使用すると、認証に必要なユーザ情報(ユーザ名とパスワード)をテーブル上で管理できるため、大変便利です。

GlassFishとデータベースに対する設定

 JDBCレルムを作成するためには、事前に以下の設定作業を行っておく必要があります。

  • 接続プールとデータソースの作成
  • JDBCレルムで使用するユーザテーブルとユーザグループテーブルの作成

 ユーザテーブルとユーザグループテーブルは、以下のように作成します。

ユーザテーブル
CREATE TABLE USER_TABLE (
USER_NAME VARCHAR(30) PRIMARY KEY, -- ユーザ名
PASSWORD  VARCHAR(50) NOT NULL     -- パスワード
);
ユーザグループテーブル
CREATE TABLE GROUP_TABLE (
USER_NAME  VARCHAR(30) PRIMARY KEY, -- ユーザ名
GROUP_NAME VARCHAR(30) NOT NULL,    -- グループ名
CONSTRAINT FK_USER_NAME FOREIGN KEY(USER_NAME)
    REFERENCES USER_TABLE(USER_NAME)
);

 GlassFishでは、管理者は、管理コンソールか管理コマンドのいずれかを使用して設定作業を行いますが、ここでは管理コマンド"asadminコマンド"を使用します。asadminコマンドは、GlassFishのインストールディレクトリのbinの下に格納されています。JDBCレルム"MyJdbcRealm"を作成するためには、以下のように入力します。引数が少々長いですが、改行することなく打ち込みます。

C:\Java\glassfish\bin>asadmin create-auth-realm --classname com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm 
--property jaas-context=jdbcRealm:datasource-jndi=jdbc/DerbyDS:user-table=USER_TABLE:group-table=GROUP_TABLE:
user-name-column=USER_NAME:password-column=PASSWORD:group-name-column=GROUP_NAME  MyJdbcRealm

 "jdbc/DerbyDS"はデータソースのJNDI名を指しています。コマンド投入後、以下のように出力されれば、MyJdbcRealmが正常に作成されたことになります。

コマンド create-auth-realm は正常に実行されました。

 今回の例では、ユーザにFoo、Barの2人を用意します。前述したUSER_TABLEとGROUP_TABLEには、以下のSQL文でローを挿入しておきます。USER_TABLEのパスワードカラムの値は、パスワードをMD5でハッシュ化したものです。また、Barはユーザグループ"user_gropu"に所属しているものとしてます。

INSERT INTO USER_TABLE VALUES('Foo', 'a621f6f849ec2327dabfc4392fd59a70');
INSERT INTO USER_TABLE VALUES('Bar', 'a59d77d28c59ebb32180877327b5d07d');
INSERT INTO GROUP_TABLE VALUES('Bar', 'user_group');

 これでGlassFishとデータベースに対する設定は終わりです。

※この続きは、会員の方のみお読みいただけます(登録無料)。


※この続きは、会員の方のみお読みいただけます(登録無料)。


著者プロフィール

  • UFJIS 斉藤賢哉(ユーエフジェーアイエスサイトウケンヤ)

    UFJIS株式会社 三菱UFJフィナンシャルグループ(MUFG)の100%出資子会社。銀行、信託、証券、カード・信販、リースなど幅広い金融サービス機能を有する総合金融グループであるMUFGグループ各社の総合金融サービスをIT面から支える金融ITのリーディングカンパニー。 斉藤 賢哉 UFJIS...

バックナンバー

連載:JAX-RSで実践!JavaでRESTful Webサービス
All contents copyright © 2007-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5