USER
タグによる認証機能、DIR
タグによるユーザー・プロファイル管理が用意されており、アクセス制御リスト(ACL)によりデータベース表およびレンダリングされたページのセキュリティが強化されています。これらのユーザー管理とセキュリティのメカニズムを使用して、ユーザーを管理し、配信システムおよびWebCenter Sitesの開発システムと管理システムに対するユーザーのアクセスを制御します。
管理システムでのユーザーの管理の詳細は、次の項を参照してください。
ディレクトリ・サービスAPIは、WebCenter Sitesシステムで認証情報、ユーザー情報などが格納されているディレクトリ・サーバーへの接続を有効化します。
WebCenter Sitesは3つのディレクトリ・サービスのプラグインを配信しており、そのうちの1つはWebCenter Sitesシステムとともにインストールされます。
WebCenter Sitesディレクトリ・サービス・プラグイン: ネイティブのWebCenter Sitesユーザー管理表(SystemUsers
表およびSystemUserAttrs
表)を使用します。
LDAPプラグイン: 任意のJNDIサーバーをサポートします。
NTプラグイン: ユーザー資格証明とログイン名はNTディレクトリから取得しますが、その他のすべてのユーザー情報はSystemUserAttrs
表から取得します。
プラグインはWebCenter Sitesシステムのインストール時にインストールされ、構成するにはwcs_properties.json
ファイルでプロパティを設定します。ユーザー管理との構成の詳細は、『Oracle WebCenter Sitesの管理』を参照してください。
この項には次のトピックが含まれます:
ディレクトリのエントリは、割り当てられた属性(特にユーザーおよびグループ・タイプのエントリ)を備えた名前付きオブジェクトです。
ユーザー・タイプ・オブジェクトには、識別名および一連の属性として一般名、ユーザー名、パスワード、電子メールなどが備わっています。
WebCenter Sites ACLと同様、グループ・タイプ・オブジェクトにも識別名と一連の属性があります。
名前には、名前が関連付けられた階層が反映されます。ディレクトリ実装での移植性を確保するために、名前は不透明な文字列として処理する必要があります。
一部のディレクトリ・データベースは、階層構造を使用してエントリを編成します。WebCenter Sitesのディレクトリ・サービスAPIでは、エントリの属性と階層内でのその場所は個別になっています。その結果、エントリの属性の取得によってその子の情報は発生しません。
階層に対するサポートは、基礎となるディレクトリの実装に応じて異なります。たとえば、LDAPディレクトリは階層構造をサポートしますが、WebCenter Sitesのネイティブ・ディレクトリ・データベースは階層構造をサポートしません。ディレクトリ実装での移植性を確保するために、コードは階層データのサポートを想定していません。
注意:
グループ階層は、内部のWebCenter Sitesの権限に影響を及ぼしません。
WebCenter Sitesのディレクトリ・サービスAPIは、参照整合性を実行しません。ディレクトリ・タグを持つユーザーを削除する場合は最初に、ユーザーが関連付けられているグループからユーザーを削除します。これにより、グループのメンバーシップも削除されるようにします。
メンバーがグループに追加されるたびに、JNDI実装では、addmember
タグに渡される名前とは関係なく、uniquemember
属性の値に対して完全に識別される名前が作成されます。
表45-1に示すように、DIR
タグ・ファミリをXMLおよびJSPの両バージョンで使用して、ディレクトリ・サービスAPIを起動できます。
表45-1 ディレクトリ・サービス・タグ
タグ | 説明 |
---|---|
|
属性を既存のエントリ(ユーザーまたはグループのいずれか)に追加します。 |
|
メンバーをグループ(通常はユーザー)に追加します。 |
|
リスト変数の特定の親に対する子エントリを取得します。 |
|
ディレクトリ・エントリを作成します。 |
|
ディレクトリ・エントリを削除します。 |
|
リスト変数の特定のエントリに対する属性値を取得します。 |
|
指定されたグループのメンバーのリストを作成します。 |
|
エントリ(グループまたはユーザーのいずれか)が属するすべてのグループのリストを作成します。 |
|
ディレクトリ内のすべてのユーザーのリストを返します。 |
|
エントリの属性値を削除します。 |
|
グループのエントリを削除します。 |
|
エントリ(ユーザーまたはグループのいずれか)の属性値を置換します。 |
|
指定された検索基準と一致するエントリのディレクトリを検索します。 |
ディレクトリがLDAP、WebCenter Sitesのみのいずれを使用して実装しているかに関係なく、DIR
タグで記述するコードは酷似しています。
これらのタグの詳細は、Oracle WebCenter Sitesタグ・リファレンスを参照してください。コード・サンプルは、「ディレクトリ・サービスのコード・サンプル」を参照してください。
一部のWebCenter Sitesディレクトリ・サービスのタグは、データベースに情報を書き込みます。データベース管理者が、データベースへのユーザー情報の追加など、Webサイトへの書込み操作をすべて処理している場合、ディレクトリ・タグの使用を読取り専用の操作に制限します。このポリシーによって、サードバーティのディレクトリ管理ツールとの同期化に関する問題が回避されます。
読取り専用操作については、この項で説明します。現在の認証済ユーザーの資格証明と読取り権限を使用して、これらの操作を実行します。
この項には次のトピックが含まれます:
一部のディレクトリ・サーバーの制限のため、組織の最上位レベルからの検索は許可されていません。移植性の問題を回避するために、DIR.SEARCH
タグのコンテキスト属性を必ず指定してください。
ユーザーのルックアップには、通常、次の2つの手順を実行します。
userid
のDIR.SEARCH
をコールします。DIR.GETATTRS
をコールします。ユーザーのリストを作成するには、次の3つの方法のいずれかを使用することをお薦めします。
小規模のユーザー・データベースの場合、DIR.LISTUSERS
タグを使用します。これは、peopleParent
プロパティに従ってすべてのユーザーのリストを再帰的に作成します。このタグの使用は、より大規模なユーザー・データベースでは非効率的です。
より大規模なユーザー・データベースの場合、階層の移動にはDIR.CHILDREN
タグを使用します。DIR.CHILDREN
タグはグループ・タイプには最適ですが、ユーザー・タイプには適していません。
フラットな階層を持つユーザー・データベースの場合、検索結果を絞り込みます。
次のJSPコード・サンプルは、可能なディレクトリ操作を示しています。
<% String sMainTestUserName = "user name"; String sMainTestUserPW="password"; String sPeopleParent = ics.GetProperty("peopleparent", "dir.ini", true); String sGroupParent = ics.GetProperty("groupparent", "dir.ini", true); String sUsername = ics.GetProperty("username", "dir.ini", true); String sCommonName = ics.GetProperty("cn", "dir.ini", true); IList mylist; %> <user:su username='<%=sMainTestUserName%>' password='<%=sMainTestUserPW%>'> <H2>List All Users</H2> <ics:clearerrno/> <dir:listusers list='mylist'/> <br> <b>dir:listusers errno: <ics:getvar name='errno'/></b> <ics:listloop listname='mylist'> <br><ics:listget listname='mylist' fieldname='NAME'/> </ics:listloop> <H2>Look Up the ContentServer User by Username</H2> <ics:clearerrno/> <dir:search list='mylist' context='<%=sPeopleParent%>'> <dir:argument name='<%=sUsername%>' value='ContentServer'/> </dir:search> <br><b>dir:search errno: <ics:getvar name='errno'/></b> <% mylist = ics.GetList("mylist"); if(mylist.numRows() != 1) { out.print("<br>Error finding entry."); } mylist.moveTo(1); ics.SetVar("ContentServerDn", mylist.getValue("NAME")); %> <H2>Show ContentServer Attributes</H2> <ics:clearerrno/> <dir:getattrs list='mylist' name='<%=ics.GetVar("ContentServerDn")%>'/> <br><b>dir:getattrs errno: <ics:getvar name='errno'/></b> <ics:listloop listname='mylist'> <br> <ics:listget listname='mylist' fieldname='NAME'/>= <ics:listget listname='mylist' fieldname='VALUE'/> </ics:listloop> <H2>Show Group Memberships for ContentServer</H2> <ics:clearerrno/> <dir:groupmemberships name='<%=ics.GetVar("ContentServerDn")%>' list='mylist'/> <br><b>dir:groupmemberships errno: <ics:getvar name='errno'/></b> <ics:listloop listname='mylist'> <br> <ics:listget listname='mylist' fieldname='NAME'/> </ics:listloop> <H2>Lookup the SiteGod Group by CommonName</H2> <ics:clearerrno/> <dir:search list='mylist' context='<%=sGroupParent%>'> <dir:argument name='<%=sCommonName%>' value='SiteGod'/> </dir:search> <br><b>dir:search errno: <ics:getvar name='errno'/></b> <% mylist = ics.GetList("mylist"); if(mylist.numRows() != 1) { out.print("<br>Error finding entry."); } mylist.moveTo(1); ics.SetVar("SiteGodDn", mylist.getValue("NAME")); %> <H2>Show SiteGod Attributes</H2> <ics:clearerrno/> <dir:getattrs list='mylist' name='<%=ics.GetVar("SiteGodDn")%>'/> <br> <b>dir:getattrs errno: <ics:getvar name='errno'/></b> <ics:listloop listname='mylist'> <br> <ics:listget listname='mylist' fieldname='NAME'/>= <ics:listget listname='mylist' fieldname='VALUE'/> </ics:listloop> <H2>Show SiteGod Group Members</H2> <ics:clearerrno/> <dir:groupmembers name='<%=ics.GetVar("SiteGodDn")%>' list='mylist2'/> <br> <b>dir:groupmembers errno: <ics:getvar name='errno'/></b> <ics:listloop listname='mylist2'> <br> <ics:listget listname='mylist2' fieldname='NAME'/> </ics:listloop> <H2>Children of groupparent </H2> <ics:clearerrno/> <dir:children name='<%=sGroupParent%>' list='mylist'/> <br> <b>dir:children errno: <ics:getvar name='errno'/></b> <ics:listloop listname='mylist'> <br> <ics:listget listname='mylist' fieldname='NAME'/> </ics:listloop> </user:su>
どのディレクトリ・タグでも、設定時に様々なディレクトリ・エラーが発生する可能性があります。ディレクトリ・サービスのエラー・メッセージの包括的なリストは、Oracle WebCenter Sitesタグ・リファレンスを参照してください。
ディレクトリ・サービスのコードによって、指定されたタグ・コールでリストされたそれぞれのエラー・コードが処理される必要があります。これは、J2EE JNDIインタフェースをサポートするために必要です。
ディレクトリ・サービス・アプリケーションのトラブルシューティングの最初の手順は、エラー・ログ(WebCenter Sitesのログ・ファイル内の)のチェックです。
ディレクトリ・サービスのロギングを有効にするには、log.filterLevel
プロパティ(logging.ini
プロパティ・ファイル内にある)を設定します。次のように、7レベルのエラー・メッセージがあります。
fatal: 致命的なレベルのメッセージを記録します。
severe: 重度および致命的なレベルのメッセージを記録します。
error: エラーおよび致命的なレベルのメッセージを記録します。
warning: 警告および致命的なレベルのメッセージを記録します。
info: 警告、エラー、重度および致命的なレベルのメッセージを記録します。
trace: トレース・メッセージを記録します。
詳細: すべてのタイプのメッセージを記録します。
トラブルシューティング時には、trace
が最も詳細な設定であり、そのためパフォーマンスへの影響は最も高くなります。
ディレクトリ・サービスは、エントリの使用を次の書式で記録します。
[<timestamp>][Directory-<severity>-<errno>] [<class>:<method>][<message>][<session id>]
次に例を示します。
[Jan 17, 2002 1:49:44 PM][Directory-T] [BaseFactory:instantiateImplementation(ICS,String,Class[], Object[])][Instantiating:com.openmarket.directory.common.Factory] [PEccxyF1Ueh7zYvjNgg4D6bqZzf0llfWMaiBimIN9H1Z9KomDcPy]
前のメッセージはトレース(T)であるため、関連付けられたerrno
値はありません。
エラー・ロギングの詳細は、「エラーのロギングおよびデバッグ」を参照してください。
LDAP実装の共通の問題は、ディレクトリ・サーバーで誤って指定される権限です。エラー・ログが権限問題を示している場合には、ディレクトリ・サーバーの権限の設定をチェックして、認証されたユーザーがリクエストされた操作を実行する権限を持っていることを確認します。ディレクトリ・サーバーに直接ログインして(WebCenter Sites外)、権限が正しく設定されていることを確認するために同じアクションを実行します。ログと権限をチェックした後は、プロパティ・ファイルを調べることで、多くの場合構成エラーを解決できます。
プロパティの説明および値については、Oracle WebCenter Sitesプロパティ・ファイル・リファレンスを参照してください。
WebCenter Sitesは、アクセス制御リスト(ACL)でユーザーを管理します。ACLを使用すると、WebCenter Sitesデータベース内の表と、WebCenter Sitesによりサイトで処理したレンダリング済ページへのアクセスを制限できます。ユーザーがユーザー名およびパスワードを使用してログインするサイトの1つ以上のACLに登録済ユーザーを関連付ける必要があります。
ユーザーが最初にサイトを訪れると、WebCenter Sitesではセッションが作成され、そのユーザーは標準デフォルト・ユーザーDefaultReader
として暗黙的にログインされます。USER.LOGIN
コマンドが使用されてユーザーがパスワードで認証されると、ユーザーのIDが更新されます(関連付けられたACLが有効になります)。
この項には次のトピックが含まれます:
WebCenter Sitesには、ACLの作成に使用できる一連のアクセス制御リストのタグ(XMLおよびJSPの両バージョン)が用意されています。管理システムのWebCenter SitesインタフェースかWebCenter Sites ACLタグのいずれかを使用して、管理システムのユーザー・アカウントで必要なACLを作成できます。表45-2は、ACLタグのリストです。
表45-2 ACLタグ
タグ | 説明 |
---|---|
|
ACLを作成します。 |
|
ACLを削除します |
|
ACLにフィールドを収集します |
|
ACLからフィールドをコピーします |
|
ACLのリストを取得します |
|
ACLをロードします。 |
|
ACLを保存します。 |
|
ACLからフィールドを散布します |
|
ACL内のフィールドを設定します |
関連項目:
ACLタグ: Oracle WebCenter Sitesタグ・リファレンスを参照してください。
一般的なACL: 『Oracle WebCenter Sitesの管理』を参照してください。
WebCenter Sitesでは、表45-3で説明するUSER
タグ(XMLおよびJSPの両バージョン)タグも用意されています。これらのタグは、ユーザーをログインおよびログアウトさせるページ上で使用します。
表45-3 ユーザー・タグ
タグ | 説明 |
---|---|
USER.LOGIN
|
ユーザーをログインさせます。 |
USER.LOGOUT
|
ユーザーをログアウトさせます。 |
USER.SU
|
アカウント作成、ユーザー・プロファイルの編集などの操作を実行するために、特定のユーザーとしてユーザーをログインさせます。 |
これらのタグの詳細は、Oracle WebCenter Sitesタグ・リファレンスを参照してください。
WebCenter Sitesには、パスワードやその他の機密関係の情報を暗号化するデフォルト・キーが用意されています。独自の暗号化キーを指定するには、Utilities
クラスのencryptString
メソッドを使用します。暗号化を処理するJavaメソッドの情報は、Oracle WebCenter Sites Java APIリファレンスを参照してください。
また、WebCenter SitesではSecure Sockets Layer (SSL)もサポートされており、これによってWebサーバーを出入りする情報の暗号化が許可されます。WebCenter SitesおよびSSLの詳細は、『Oracle WebCenter Sitesの管理』を参照してください。