認証について

Tuigwaa ではデフォルトで、認証の為に組込みのディレクトリサービスとして ApacheDS をバンドルして 提供します。ここでは、組込みの ApacheDS を利用する際に必要な J2EE コンテナの設定と、組込み ではなく外部のディレクトリサーバを利用する場合の手順について説明します。 すぐ使い始めたい方については、以下のバンドルの 「ApacheDS を利用する場合」をご参照下さい。

バンドルの ApacheDS を利用する場合

バンドルで利用する際には以下の三点の作業を行います。

  1. コンテナのセキュリティ設定 (Tomcat の場合 Realm 設定)
  2. セキュリティ設定ファイルの作成 (jaas.conf)
  3. コンテナの起動オプションの設定
まず利用する JAAS の LoginModule に関する設定を行います。 Tomcat の場合には、以下のような JAAS Realm の設定を ${CATALINA_HOME}/conf/server.xml もしくは、 ${CATALINA_HOME}/conf/Catalina/localhost/tuigwaa.xml に記述して下さい。

<Context        
        workDir="work/Catalina/localhost/tuigwaa" 
        path="/tuigwaa"
        docBase="tuigwaa">
        <Realm
                className="org.apache.catalina.realm.JAASRealm"
                appName="tuigwaa"
                userClassNames="org.seasar.tuigwaa.security.auth.TgwUser"
                roleClassNames="org.seasar.tuigwaa.security.auth.TgwRole"
                useContextClassLoader="false"/>
</Context>

この設定例はソースをダウンロードし、展開した etc/auth 以下に tomcat-tuigwaa.xmlにて提供されています。 尚、JAAS に関連する、クラス、及びファイルは以下の通りです。(WEB-INF/classes からの相対位置です)

  • org.seasar.tuigwaa.security.auth.TgwLoginModule
  • org.seasar.tuigwaa.security.auth.TgwPrincipal
  • org.seasar.tuigwaa.security.auth.TgwUser
  • org.seasar.tuigwaa.security.auth.TgwRole
  • org.seasar.tuigwaa.security.DirectoryUtils
  • tuigwaa.properties

その後、jaas を利用する為にコンテナのJVMの起動設定としてJAASの設定ファイルを指定します。 JAASの設定ファイルには以下のような設定を行い、適当な場所に保存してください。ここではその設定ファイルを ${CONF_PATH}/jaas.conf とします。(ファイル名は任意です)

tuigwaa {
        org.seasar.tuigwaa.security.auth.TgwLoginModule required;
};

この設定例はソースをダウンロードし、展開した etc/auth 以下にjaas.confにて提供されています。 尚、上記の LoginModule は try_first_pass と use_first_pass をサポートしています。 (詳細は こちら) 他の JAAS のモジュールと組み合わせて利用する際には、その設定も行って下さい。JAAS の設定ファイルの 詳細についてはこちら をご覧下さい。 これを JVM の起動時に下記のようにシステムプロパティでその位置を指定して下さい。

-Djava.security.auth.login.config="${CONF_PATH}/jaas.conf"

尚、Tomcat では、上記の値を CATALINA_OPTS 環境変数に指定する事によって、catalina.sh (catalina.bat) にて起動を行う際にこのシステムプロパティを設定することも可能です。

ここまでの準備が整ったら、Tuigwaa にアクセスしてください。アクセスの際にユーザ名とパスワードを聞かれますので、 ユーザ名、パスワード共にtuigwaaを指定してください。 尚、このユーザはtuigwaaのシステムワイドなアドミニストレータですので、ログイン後にパスワードを変更する事を推奨 致します。その後、ご利用になりたいユーザ、ロール等を順次作成してください。

その他のJ2EEコンテナにおけるJAASの設定方法については、各コンテナの設定マニュアルをご参照下さい。 Tuigwaa バンドルの ApacheDS は、起動と同時に 10389 番 (デフォルト) にて、ディレクトリサービスを 提供します。多くのJ2EEコンテナが、LDAPによる認証をサポートしておりますが、Tuigwaaの場合、アプリケーション コンテキストがロードされるタイミングにて、このディレクトリサービスが起動しますので、コンテナ側がTuigwaaの ロードに先立って、ディレクトリサービスにアクセスするような仕組みのもの (Tomcat の JNDI Realm 等) では 起動自体に失敗する可能性がございます。そのような際にはここで提供されているJAASのLoginModuleを利用した クラスをご利用下さい。 Tomcat 以外動作は未確認ですが、以下に各コンテナのJAAS関連の設定マニュアルがございます。

J2EEコンテナバージョンマニュアルURL
Tomcat5.0Realm Configuration HOW-TO
JBoss?Security & JASS/JBoss (Forum)
Sun Java System Application ServerEnterprise Edition 8.1 2005Q2 Update2 Additional Information for Specific Realms
BEA WebLogic Server9.0認証プロバイダのコンフィグレーション
IBM WebSphere Application Server5.0インフォメーションセンター

外部のディレクトリサーバを利用する場合

外部のディレクトリサーバを利用する場合、以下の二点の作業が必要となります。

  1. tuigwaa.properties ファイルの設定変更作業
  2. J2EEコンテナの設定作業 (以下のどちらかの作業)
    • LDAPセキュリティの設定
    • JAASセキュリティの設定
以降では war ファイルがアプリケーションサーバによって展開された場所を ${tuigwaa_war_home} とします。

まず、${tuigwaa_war_home}/WEB-INF/classes/tuigwaa.properties 内の 以下のプロパティをご利用のディレクトリサービスに適応するように変更してください。

プロパティ名デフォルト値意味変更の指針
ldap.service.embededtruetrue の場合バンドルの LDAP を利用、 false の場合バンドルの LDAP を利用しません。false に設定して下さい。ここが true のままだと、下記の設定変更を行ってもバンドルの LDAP が利用されます。
ldap.admin.usernametuigwaaTuigwaa のデフォルトのシステムアドミニストレータのユーザ名ご利用の LDAP サーバに存在するユーザ名で、かつ設定者が利用可能なユーザ名を設定して下さい。
ldap.admin.rolenameadminTuigwaa のデフォルトのシステムアドミニストレータのロール名上記で設定したアドミニストレータが属するグループで、かつシステムアドミニストレータロールとして利用したいグループ名を指定して下さい。
ldap.provider.urlldap://localhost:10389/dc=seasar,dc=orgLDAP プロバイダの URL ご利用のディレクトリサービスの URL を指定してください。注意点として、ここで LDAP のバインドの際にベースを指定した際には、 それと同じ値を ldap.user.search.base にも必ず指定してください。
ldap.security.authentication

ldap.security.principal

ldap.security.credentials
セキュリティ情報の為記載しません順にコンテキストのバインドの際の「認証方法」「認証ユーザ」「認証パスワード」 ご利用の環境に適した値を設定してください。
ldap.search.basedc=seasar,dc=orgバインドのベース ldap.provider.url にもあるように、ここの値を変更する際には、逆に ldap.provider.url のベースネームも 同じになるように必ず変更して下さい。
ldap.user.search.baseou=usersバインドするベースネームから、ユーザエントリまでの RDN 上記の ldap.provider.url (ldap.search.base) に合わせて適切な「属性=値」を指定して下さい。
ldap.user.search.prefixuidユーザ名を表す属性名 上記の ldap.provider.url (ldap.search.base) 及び、ldap.user.search.base に合わせて適切な「属性名」を指定して下さい。 ユーザは ldap.user.search.base をベースとして、「(ldap.user.search.prefix の値=*)」という検索フィルタにて検索され、 また DN は「(ldap.user.search.prefix),(ldap.user.search.base),(ldap.search.base)」となります。
ldap.role.search.baseou=rolesバインドするベースネームから、ロールエントリまでの RDN 上記の ldap.provider.url (ldap.search.base) に合わせて適切な「属性=値」を指定して下さい。
ldap.role.search.prefixcnロール名を表す属性名 上記の ldap.provider.url (ldap.search.base) 及び、ldap.role.search.base に合わせて適切な「属性名」を指定して下さい。 ロールは ldap.role.search.base をベースとして、「(ldap.role.search.prefix の値=*)」という検索フィルタにて検索され、 また DN は「(ldap.role.search.prefix),(ldap.role.search.base),(ldap.search.base)」となります。
ldap.role.user.attributememberロールに属するユーザを表す属性名 あるロールに含まれるユーザを表す属性名。「(ldap.role.user.attribute=ユーザDN)」という条件で、 あるユーザがどのロールに含まれるかが ldap.role.search.base をベースとして検索されます。
ldap.role.user.prefixonlyfalseディレクトリサーバに格納されているldap.role.user.attributeの値がldap.user.search.prefixの値のみか、完全なDNかのフラグ ldap.role.user.attribute で検索した値が完全な DN (例 : uid=tuigwaa,ou=users,dc=seasar,dc=org)であるか、 ldap.user.search.prefix の値 (例 : uid=tuigwaa の場合の tuigwaa) のみかを判別するフラグ。
上記は最低限、外部のサービスに合わせて変更する必要があると思われるものです。 それ以外のプロパティについては、こちらを参照下さい。


次に上記のディレクトリサービスを利用するようにコンテナ側の設定を変更してください。 上記の JAAS もそのまま利用することも可能ですし、コンテナの LDAP 用のセキュリティ設定のご利用も可能です。 環境に適した方法を選択して下さい。 Tomcat の場合には、以下のような JNDI Realm の設定を ${CATALINA_HOME}/conf/server.xml もしくは、 ${CATALINA_HOME}/conf/Catalina/localhost/tuigwaa.xml に記述して下さい。 パラメータ等は Tuigwaa のバンドル版のディレクトリサービスの場合の例です。

<Context        
        workDir="work/Catalina/localhost/tuigwaa" 
        path="/tuigwaa"
        docBase="tuigwaa">
		<Realm 
			className="org.apache.catalina.realm.JNDIRealm"
			connectionURL="ldap://localhost:389/"
			connectionName="uid=admin,ou=system"
			connectionPassword="tuigwaa"
			userPattern="uid={0},ou=users,dc=seasar,dc=org"
			userRoleName="memberOf"
			roleBase="ou=groups,dc=seasar,dc=org"
			roleName="cn"
			roleSearch="(member={0})"/>
</Context>

その他のJ2EEコンテナにおけるLDAPのセキュリティに関する設定方法については、各コンテナの設定マニュアルをご参照下さい。 Tomcat 以外動作は未確認ですが、以下に各コンテナのセキュリティ関連の設定マニュアルがございます。

J2EEコンテナバージョンマニュアルURL
Tomcat5.0Realm Configuration HOW-TO
JBoss?LdapLoginModule
Sun Java System Application ServerEnterprise Edition 8.1 2005Q2 Update2 Additional Information for Specific Realms
BEA WebLogic Server9.0LDAP認証プロバイダのコンフィグレーション
IBM WebSphere Application Server5.0インフォメーションセンター