連載
» 2010年06月04日 00時00分 公開

企業システムの常識をJBossで身につける(9):社内システムのセキュリティとアクセス制御の常識 (2/4)

[原田壮士, 多田丈晃, 上川伸彦,株式会社ビーブレイクシステムズ]

JBossのセキュリティ管理はどうなっている?

 JBossのセキュリティ管理は2つのプロジェクトを使うことで実現されます。以前は「JBoss Security」というプロジェクトでしたが、以下は現在最新のプロジェクトです。

PicketBox JBossが提供するセキュリティの基盤API群
PicketLink PicketBoxを使用してセキュリティ管理の実現手段を提供
表1 最新のJBossのセキュリティ管理のプロジェクト

 「PicketBox」は、JBoss Seamの次期バージョンである3から標準のセキュリティ基盤として採用される予定で、以前は「JBoss Security」と呼ばれていました。

 「PicketLink」はPicketBoxの提供するセキュリティの基盤を利用し、具体的なセキュリティの実現手段を用意しています。PicketLinkは以前からJBoss Securityにあったいくつかの実用的なコンポーネントを取りまとめたものです。

 PicketLinkが提供する具体的なセキュリティの実現手段は、以下のコンポーネントで構成されます。

IDM ・認証情報で用いる認証情報の管理に対するオブジェクトモデルを提供するコンポーネント
LDAPRDBMSのような異なった認証情報を利用したアプリケーションの認証作業を連携させる目的もある
Federated Identity ・統合された認証およびシングルサインオンを実現するためのサポートを提供しているコンポーネント
OASIS*注1)のSAML*注2)やWS-Trust*注3)、OpenID*注4)をサポート
AuthZ ・Javaアプリケーションの認証フレームワークを基盤としたコンポーネント
XACML ・アクセスコントロールをカスタマイズできる、OASIS提供のXACML*注5)の機能を提供しているコンポーネント
Negotiation ・デスクトップSSO*注6)を基にした、SPNego*注7)や認証用プロトコルであるKerberosを提供するコンポーネント
表2 PicketLinkのコンポーネント一覧
  1. Organization for the Advancement of Structured Information Standardsの略称。XMLやWebサービスなどに関する国際的な標準化団体
  2. Security Assertion Markup Languageの略称。ネット上などでユーザーの認証に対する情報を安全に処理するためのXMLベースの言語仕様
  3. SAMLなどの認証、セキュリティ情報をネット上で移動・交換・処理するための技術
  4. 1つのIDを用いて多種多様なネット上のサービスの認証を可能にする認証プロトコル
  5. eXtensible Access Control Markup Languageの略称
  6. Single Sign Onの略称。Windowsの認証を利用したシングルサインオン
  7. Simple and Protected GSSAPI Negotiation Mechanismの略称。認証プロトコル間をまとめるセキュリティ・パッケージ

 今回は、アクセスコントロールを用いたセキュリティに焦点を当てるため、アクセスコントロールを行えるプロジェクトを作成して、ID管理の動きを理解し、その後、高度なアクセスコントロールの実現方法としてXACMLについて説明します。

JBossが持つ認証機能を実装するには

 JBossが持つ認証機能を実際に作って確認していきます。今回は最新のPicketLinkのIDPコンポーネントを使わず、これまでの連載で構築した環境を使って認証機能を作ります。

「JBoss SX」とは

 JBoss 5.1.0 GAに付属しているライブラリに「JBoss SX」というものがあります。「JBoss SX」は、PicketLinkのIDPコンポーネントの前のバージョンと考えてください。最新のものではありませんが、認証機能を理解するうえでは最新のものと変わりません。

web.xmlの編集

 ではこれから、JBossでのベーシック認証機能によるアクセスコントロールについて、サンプルを用いつつ説明します。まずこのサンプルでは事前の環境設定として、本連載2回目「“全部入り”のEclipseで学ぶ統合開発環境の常識」のサンプルを作成する前までのSeamプロジェクトを使用します。

 プロジェクト名は「sampleSX」です。今回はSeamプロジェクトのhome.seam画面にBASIC認証をかけるサンプルを作成します。

 「sampleSX/WebContent/WEB-INF/web.xml」ファイルを下記のように編集します(赤字が追記部です)。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
id="WebApp_ID" version="2.5">
  <display-name>sampleSX</display-name>
 
……【中略】……
  
  <security-constraint>
    <display-name>raw XHTML ドキュメントを禁止</display-name>
    <web-resource-collection>
      <web-resource-name>XHTML</web-resource-name>
      <url-pattern>*.xhtml</url-pattern>
    </web-resource-collection>
    <auth-constraint/>
  </security-constraint>
  
  <security-constraint>
  <web-resource-collection>
    <web-resource-name>Faces Servlet</web-resource-name>
    <description></description>
    <url-pattern>/home.seam</url-pattern> 
<!-- ↑【1】ベーシック認証をかける画面を設定 -->
 
  </web-resource-collection>
  <auth-constraint>
    <role-name>JBossAdmin</role-name> 
<!-- ↑【2】認証を許可させる【4】と同一の権限(JBossではデフォルトの権限がJBossAdminなので、今回はこれを使用します)を設定 -->
 
    </auth-constraint>
  </security-constraint>
  
   <login-config>
    <auth-method>BASIC</auth-method> 
<!-- ↑【3】ログイン設定として、ベーシック認証を指定 -->
    <realm-name>JBoss SX Auz</realm-name>
  </login-config>
  
  <security-role><role-name>JBossAdmin</role-name></security-role> 
<!-- ↑【4】認証を許可させる【2】と同一の権限を設定 -->
</web-app>
コード1 web.xmlの編集

jboss-web.xmlの編集

 「sampleSX/WebContent/WEB-INF/jboss-web.xml」を下記のように編集してください。

<!DOCTYPE jboss-web PUBLIC
    "-//JBoss//DTD Web Application 4.2//EN"
    "http://www.jboss.org/j2ee/dtd/jboss-web_4_2.dtd">
 
<jboss-web>  
    <class-loading java2ClassLoadingCompliance="false">
        <loader-repository>
            seam.jboss.org:loader=sampleSX
            <loader-repository-config>java2ParentDelegation=false</loader-repository-config>
        </loader-repository>
    </class-loading>
    <security-domain>java:/jaas/jmx-console</security-domain> 
<!-- ↑【1】 -->
 
</jboss-web>
コード2 jboss-web.xmlの編集

 【1】でデフォルト設定されているjmx-consoleのログイン方法を設定しています(このほかのログインの方法は、C:\JBossTools\jboss-eap\jboss-as5\server\default\conf\login-conf.xmlを参照してください)。

そのほかの設定

 「C:/JBossTools/jboss-eap/jboss-as5/server/default/conf/props」直下の「jmx-console-roles.properties」「jmx-console-users.properties」をコピーして下記の通り「src/main」直下に張り付けてください。

図4 sampleSXの階層 図4 sampleSXの階層

 ちなみに、jmx-console-roles.propertiesとjmx-console-users.propertiesのファイルの中身は以下のようになっています。

# A sample roles.properties file for use with the UsersRolesLoginModule
admin=JBossAdmin,HttpInvoker
コード3 jmx-console-roles.propertiesの中身

 これは、adminユーザーがJBossAdmin権限と、HttpInvoker権限を持つことを意味します。

# A sample users.properties file for use with the UsersRolesLoginModule
admin=admin
コード4 jmx-console-users.propertiesの中身

 これは、adminユーザーが「admin」というパスワードを所有することを意味します。

 以上が、JBoss SXのベーシック認証機能をhome.seam画面に適用させてアクセスコントロールを行うためのサンプルの設定です。次ページでは、実際に動かして試してみます。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。