JBossのセキュリティ管理は2つのプロジェクトを使うことで実現されます。以前は「JBoss Security」というプロジェクトでしたが、以下は現在最新のプロジェクトです。
PicketBox | JBossが提供するセキュリティの基盤API群 |
---|---|
PicketLink | PicketBoxを使用してセキュリティ管理の実現手段を提供 |
表1 最新のJBossのセキュリティ管理のプロジェクト |
「PicketBox」は、JBoss Seamの次期バージョンである3から標準のセキュリティ基盤として採用される予定で、以前は「JBoss Security」と呼ばれていました。
「PicketLink」はPicketBoxの提供するセキュリティの基盤を利用し、具体的なセキュリティの実現手段を用意しています。PicketLinkは以前からJBoss Securityにあったいくつかの実用的なコンポーネントを取りまとめたものです。
PicketLinkが提供する具体的なセキュリティの実現手段は、以下のコンポーネントで構成されます。
IDM | ・認証情報で用いる認証情報の管理に対するオブジェクトモデルを提供するコンポーネント ・LDAPやRDBMSのような異なった認証情報を利用したアプリケーションの認証作業を連携させる目的もある |
---|---|
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のコンポーネント一覧 |
今回は、アクセスコントロールを用いたセキュリティに焦点を当てるため、アクセスコントロールを行えるプロジェクトを作成して、ID管理の動きを理解し、その後、高度なアクセスコントロールの実現方法としてXACMLについて説明します。
JBossが持つ認証機能を実際に作って確認していきます。今回は最新のPicketLinkのIDPコンポーネントを使わず、これまでの連載で構築した環境を使って認証機能を作ります。
JBoss 5.1.0 GAに付属しているライブラリに「JBoss SX」というものがあります。「JBoss SX」は、PicketLinkのIDPコンポーネントの前のバージョンと考えてください。最新のものではありませんが、認証機能を理解するうえでは最新のものと変わりません。
ではこれから、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>
「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>
【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」直下に張り付けてください。
ちなみに、jmx-console-roles.propertiesとjmx-console-users.propertiesのファイルの中身は以下のようになっています。
# A sample roles.properties file for use with the UsersRolesLoginModule admin=JBossAdmin,HttpInvoker
これは、adminユーザーがJBossAdmin権限と、HttpInvoker権限を持つことを意味します。
# A sample users.properties file for use with the UsersRolesLoginModule admin=admin
これは、adminユーザーが「admin」というパスワードを所有することを意味します。
以上が、JBoss SXのベーシック認証機能をhome.seam画面に適用させてアクセスコントロールを行うためのサンプルの設定です。次ページでは、実際に動かして試してみます。
Copyright © ITmedia, Inc. All Rights Reserved.