第6章 認証

6.1. はじめに

jUDDI Registry への書き込み権限を適切なものにするため、この Registry へのリクエストは、有効な authToken がなければなりません。

重要

読み取り権限は制限がないため、レジストリへのクエリも制限がありません。
有効な authToken を取得するには、getAuthToken() リクエストを出す必要があります。リクエストを出すと GetAuthToken オブジェクトが渡されますので、このオブジェクトに、useridcredential (password) を設定してください。
org.uddi.api_v3.GetAuthToken ga = new org.uddi.api_v3.GetAuthToken();
ga.setUserID(pubId);
ga.setCred("");

org.uddi.api_v3.AuthToken token = securityService.getAuthToken(ga);
juddi.properties 設定ファイルの juddi.auth プロパティを使って、jUDDI Registry が GetAuthToken リクエストにより渡された認証情報をチェックするよう設定します (デフォルトでは JUDDIAuthenticator 実装を使用します)。
独自の認証実装や、下記のいずれかを使用することができます。認証実装には、org.apache.juddi.auth.Authenticator インターフェースを使用して、juddi.auth プロパティは実装クラスを参照するようにします。
認証は、認証フェーズ識別フェーズとして知られる 2 フェーズプロセスとなっています。これらのフェーズは、 Authenticator インターフェースのメソッドで表現されます。
認証フェーズは、GetAuthToken リクエストが出されると発生します。このフェーズの目的は、user id や認証情報を有効な publisher id に変換することです。publisher id (UDDI の用語では 認証名 と呼ばれる) は、UDDI 内でオーナーシップを割り当てる値です。新しいエンティティが作成されると、必ず publisher の認証名でオーナーシップがタグ付けされます。
publisher id の値は、 jUDDI Registry とは関連がありません。唯一の要件としては、新しいエンティティに割り当てられるように non-null の id が存在しなければならない点です。GetAuthToken リクエストが完了すると、authentication token が呼び出し元に発行されます。
その後、UDDI API に認証を必要とする呼び出しを行うと、GetAuthToken リクエストから発行されたトークンを提供する必要があります。その後、識別フェーズに移動します。
識別フェーズが担当するのは、認証トークンを (またはトークンに関連付けられた publisher id ) 有効な UddiEntityPublisher オブジェクトに変えることです。このオブジェクトには、 UDDI エンティティのオーナーシップを処理する際に必要な全プロパティが含まれています。そのため、トークン (または publisher id) を使用して、publisher を識別します。
この 2 つのフェーズは、UDDI 認証構造に準拠して、独自の認証メカニズムを提供したいユーザーに柔軟性を提供します。
jUDDI Register 外で、認証と publisher プロパティをすべて処理できます。しかし、デフォルトでは、Registry が UddiEntityPublisher のサブクラスである Publisher エンティティを提供します。このサブクラスは、jUDDI Registry 内で publisher プロパティを永続化します。

6.2. jUDDI 認証

jUDDI Registry がデフォルトで提供する認証メカニズムは、JUDDIAuthenticator です。 JUDDIAuthenticator の認証フェーズは、Publisher テーブルの記録とサブミットされた user id が一致するか確認するだけです。認証情報の確認は行いません。認証プロセスで、Publisher がないと判断されると、その場で追加されます。

警告

実稼働環境では jUDDI 認証プロセスは使用しないでください。提供された認証情報をすべて受け入れ、レジストリにアクセスする際にクライアントが認証を行う必要がなくなってしまうためです。
識別フェーズでは、publisher id を使用して、Publisher レコードをリトリーブし、返します。Publisher は UddiEntityPublisher から必要とされるプロパティをすべて継承します。
juddi.auth = org.apache.juddi.auth.JUDDIAuthentication

6.3. XMLDocAuthentication

XMLDocAuthentication 実装を使用するには、XML ファイルをクラスパスに追加する必要があります。
デフォルトでは、このファイルの名前は juddi-users.xml で、内容は以下のようになっています。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<juddi-users>
    <user userid="anou_mana" password="password" />
    <user userid="bozo" password="clown" />
    <user userid="sviens" password="password" />
</juddi-users>
juddi.properties ファイルの中身は、以下のようになります。
juddi.auth = org.apache.juddi.auth.XMLDocAuthentication
juddi.usersfile = juddi-users.xml
認証フェーズは、ユーザー id とパスワードが XML ファイルの値と一致するか確認します。識別フェーズは、単に user id を使用して新しい UddiEntityPublisher を生成します。

6.4. CryptedXMLDocAuthentication

CryptedXMLDocAuthentication 実装は、XMLDocAuthentication 実装と似ていますが、パスワードが暗号化されています。
juddi.auth = org.apache.juddi.auth.CryptedXMLDocAuthentication
juddi.usersfile = juddi-users-encrypted.xml
juddi.cryptor = org.apache.juddi.cryptor.DefaultCryptor
ここでは、ユーザー認証ファイルは、juddi-users-encrypted.xml で、ファイルの内容は、以下のようになります。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<juddi-users>
    <user userid="anou_mana" password="+j/kXkZJftwTFTBH6Cf6IQ=="/>
    <user userid="bozo" password="Na2Ait+2aW0="/>
    <user userid="sviens" password="+j/kXkZJftwTFTBH6Cf6IQ=="/>
</juddi-users>
DefaultCryptor 実装は BEWithMD5AndDESBase64 を使用してパスワードを暗号化します。

注記

AuthenticatorTest のコードを使用して、この認証実装の使用方法を確認することができます。org.apache.juddi.cryptor.Cryptor インターフェースを実装して、この実装クラスを juddi.cryptor プロパティで参照し、独自の暗号化アルゴリズムをプラグインすることができます。
認証フェーズは、user id とパスワードが XML ファイルの値と一致するか確認します。識別フェーズは、単に user id を使用して新しい UddiEntityPublisher を生成します。

6.5. LDAP 認証

LdapSimpleAuthenticator を使用して、LDAP のシンプルな認証機能でユーザー認証を行います。このクラスは、principaljuddi publisher id が同じであれば、LDAP プリンシパルを元にユーザーを認証することができます。
このクラスを使用するには、以下を juddi.properties ファイルに追加する必要があります。
juddi.auth=org.apache.juddi.auth.LdapSimpleAuthenticator
juddi.auth.url=ldap://localhost:389
juddi.auth.url プロパティは、LdapSimpleAuthenticator クラスに LDAP サーバーが常駐する場所を伝えます。

6.6. JBoss 認証

最後に、サードパーティの認証ストアとインターフェースするというオプションもあります。AS の認証コンポーネントとリンクすることができます。
docs/examples/auth ディレクトリに JBossAuthenticator クラスがあります。このクラスでは、JBoss に jUDDI をデプロイして、ユーザー認証を行うセキュリティドメインを使用できるようになります。
このクラスを使用するには、以下のプロパティを juddi.properties ファイルに追加する必要があります。
juddi.auth=org.apache.juddi.auth.JBossAuthenticator
juddi.securityDomain=java:/jaas/other
juddi.auth プロパティは、JbossAuthenticator クラスと jUDDI Registry の Authenticator フレームワークを連携します。juddi.sercuity.domain は、JBossAuthenticator にアプリケーションサーバーのセキュリティドメインがどこにあるか伝えます。このドメインを使用して認証を行います。
JBoss は、$JBOSS_HOME/server/default/conf/login-config.xml ファイルにアプリケーションポリシー別のセキュリティドメインを 1 つ作成します。これらのドメインは、サーバー JNDI ツリーとその名前をバインドします java:/jaas/<application-policy-name> (ルックアップで、存在しないアプリケーションポリシーを参照した場合、デフォルトでは other という名前が使用されるようになっています)。