プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle WebCenter Sitesでの開発
12c (12.2.1.1)
E77292-01
目次へ移動
目次

前
次

45 管理システムのユーザーの管理

WebCenter Sitesでは、USERタグによる認証機能、DIRタグによるユーザー・プロファイル管理が用意されており、アクセス制御リスト(ACL)によりデータベース表およびレンダリングされたページのセキュリティが強化されています。これらのユーザー管理とセキュリティのメカニズムを使用して、ユーザーを管理し、配信システムおよびWebCenter Sitesの開発システムと管理システムに対するユーザーのアクセスを制御します。

管理システムでのユーザーの管理の詳細は、次の項を参照してください。

45.1 ディレクトリ・サービスAPIについて

ディレクトリ・サービス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の管理』を参照してください。

この項には次のトピックが含まれます:

45.1.1 エントリ

ディレクトリのエントリは、割り当てられた属性(特にユーザーおよびグループ・タイプのエントリ)を備えた名前付きオブジェクトです。

  • ユーザー・タイプ・オブジェクトには、識別名および一連の属性として一般名、ユーザー名、パスワード、電子メールなどが備わっています。

  • WebCenter Sites ACLと同様、グループ・タイプ・オブジェクトにも識別名と一連の属性があります。

名前には、名前が関連付けられた階層が反映されます。ディレクトリ実装での移植性を確保するために、名前は不透明な文字列として処理する必要があります。

45.1.2 階層

一部のディレクトリ・データベースは、階層構造を使用してエントリを編成します。WebCenter Sitesのディレクトリ・サービスAPIでは、エントリの属性と階層内でのその場所は個別になっています。その結果、エントリの属性の取得によってその子の情報は発生しません。

階層に対するサポートは、基礎となるディレクトリの実装に応じて異なります。たとえば、LDAPディレクトリは階層構造をサポートしますが、WebCenter Sitesのネイティブ・ディレクトリ・データベースは階層構造をサポートしません。ディレクトリ実装での移植性を確保するために、コードは階層データのサポートを想定していません。

注意:

グループ階層は、内部のWebCenter Sitesの権限に影響を及ぼしません。

45.1.3 グループ

WebCenter Sitesのディレクトリ・サービスAPIは、参照整合性を実行しません。ディレクトリ・タグを持つユーザーを削除する場合は最初に、ユーザーが関連付けられているグループからユーザーを削除します。これにより、グループのメンバーシップも削除されるようにします。

メンバーがグループに追加されるたびに、JNDI実装では、addmemberタグに渡される名前とは関係なく、uniquemember属性の値に対して完全に識別される名前が作成されます。

45.1.4 ディレクトリ・サービス・タグ

表45-1に示すように、DIRタグ・ファミリをXMLおよびJSPの両バージョンで使用して、ディレクトリ・サービスAPIを起動できます。

表45-1 ディレクトリ・サービス・タグ

タグ 説明

DIR.ADDATTRS

dir:addattrs

属性を既存のエントリ(ユーザーまたはグループのいずれか)に追加します。

DIR.ADDGROUPMEMBER

dir:addgroupmember

メンバーをグループ(通常はユーザー)に追加します。

DIR.CHILDREN

dir:children

リスト変数の特定の親に対する子エントリを取得します。

DIR.CREATE

dir:create

ディレクトリ・エントリを作成します。

DIR.DELETE

dir:delete

ディレクトリ・エントリを削除します。

DIR.GETATTRS

dir:getattrs

リスト変数の特定のエントリに対する属性値を取得します。

DIR.GROUPMEMBERS

dir:groupmembers

指定されたグループのメンバーのリストを作成します。

DIR.GROUPMEMBERSHIPS

dir:groupmemberships

エントリ(グループまたはユーザーのいずれか)が属するすべてのグループのリストを作成します。

DIR.LISTUSERS

dir:listusers

ディレクトリ内のすべてのユーザーのリストを返します。

DIR.REMOVEATTRS

dir:removeattrs

エントリの属性値を削除します。

DIR.REMOVEGROUPMEMBER

dir:removegroupmember

グループのエントリを削除します。

DIR.REPLACEATTRS

dir.replaceattrs

エントリ(ユーザーまたはグループのいずれか)の属性値を置換します。

DIR.SEARCH

dir:search

指定された検索基準と一致するエントリのディレクトリを検索します。

ディレクトリがLDAP、WebCenter Sitesのみのいずれを使用して実装しているかに関係なく、DIRタグで記述するコードは酷似しています。

これらのタグの詳細は、Oracle WebCenter Sitesタグ・リファレンスを参照してください。コード・サンプルは、「ディレクトリ・サービスのコード・サンプル」を参照してください。

45.1.5 ディレクトリの操作

一部のWebCenter Sitesディレクトリ・サービスのタグは、データベースに情報を書き込みます。データベース管理者が、データベースへのユーザー情報の追加など、Webサイトへの書込み操作をすべて処理している場合、ディレクトリ・タグの使用を読取り専用の操作に制限します。このポリシーによって、サードバーティのディレクトリ管理ツールとの同期化に関する問題が回避されます。

読取り専用操作については、この項で説明します。現在の認証済ユーザーの資格証明と読取り権限を使用して、これらの操作を実行します。

この項には次のトピックが含まれます:

45.1.5.1 検索

一部のディレクトリ・サーバーの制限のため、組織の最上位レベルからの検索は許可されていません。移植性の問題を回避するために、DIR.SEARCHタグのコンテキスト属性を必ず指定してください。

45.1.5.2 ユーザーの検索

ユーザーのルックアップには、通常、次の2つの手順を実行します。

  1. エントリ名を取得するには、useridDIR.SEARCHをコールします。
  2. 問題のユーザーの属性を取得するには、DIR.GETATTRSをコールします。

45.1.5.3 ユーザーのリスト作成

ユーザーのリストを作成するには、次の3つの方法のいずれかを使用することをお薦めします。

  • 小規模のユーザー・データベースの場合、DIR.LISTUSERSタグを使用します。これは、peopleParentプロパティに従ってすべてのユーザーのリストを再帰的に作成します。このタグの使用は、より大規模なユーザー・データベースでは非効率的です。

  • より大規模なユーザー・データベースの場合、階層の移動にはDIR.CHILDRENタグを使用します。DIR.CHILDRENタグはグループ・タイプには最適ですが、ユーザー・タイプには適していません。

  • フラットな階層を持つユーザー・データベースの場合、検索結果を絞り込みます。

45.1.5.4 ディレクトリ・サービスのコード・サンプル

次の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>

45.1.6 エラー処理

どのディレクトリ・タグでも、設定時に様々なディレクトリ・エラーが発生する可能性があります。ディレクトリ・サービスのエラー・メッセージの包括的なリストは、Oracle WebCenter Sitesタグ・リファレンスを参照してください。

ディレクトリ・サービスのコードによって、指定されたタグ・コールでリストされたそれぞれのエラー・コードが処理される必要があります。これは、J2EE JNDIインタフェースをサポートするために必要です。

45.1.7 ディレクトリ・サービス・アプリケーションのトラブルシューティング

ディレクトリ・サービス・アプリケーションのトラブルシューティングの最初の手順は、エラー・ログ(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プロパティ・ファイル・リファレンスを参照してください。

45.2 ユーザー・アクセスの制御

WebCenter Sitesは、アクセス制御リスト(ACL)でユーザーを管理します。ACLを使用すると、WebCenter Sitesデータベース内の表と、WebCenter Sitesによりサイトで処理したレンダリング済ページへのアクセスを制限できます。ユーザーがユーザー名およびパスワードを使用してログインするサイトの1つ以上のACLに登録済ユーザーを関連付ける必要があります。

ユーザーが最初にサイトを訪れると、WebCenter Sitesではセッションが作成され、そのユーザーは標準デフォルト・ユーザーDefaultReaderとして暗黙的にログインされます。USER.LOGINコマンドが使用されてユーザーがパスワードで認証されると、ユーザーのIDが更新されます(関連付けられたACLが有効になります)。

この項には次のトピックが含まれます:

45.2.1 ACLタグ

WebCenter Sitesには、ACLの作成に使用できる一連のアクセス制御リストのタグ(XMLおよびJSPの両バージョン)が用意されています。管理システムのWebCenter SitesインタフェースかWebCenter Sites ACLタグのいずれかを使用して、管理システムのユーザー・アカウントで必要なACLを作成できます。表45-2は、ACLタグのリストです。

表45-2 ACLタグ

タグ 説明

ACL.CREATE acl: create

ACLを作成します。

ACL.DELETE acl:delete

ACLを削除します

ACL.GATHER acl:gather

ACLにフィールドを収集します

ACL.GET acl:get

ACLからフィールドをコピーします

ACL.LIST acl:list

ACLのリストを取得します

ACL.LOAD acl:load

ACLをロードします。

ACL.SAVE acl:save

ACLを保存します。

ACL.SCATTER acl:scatter

ACLからフィールドを散布します

ACL.SET acl:set

ACL内のフィールドを設定します

関連項目:

  • ACLタグ: Oracle WebCenter Sitesタグ・リファレンスを参照してください。

  • 一般的なACL: 『Oracle WebCenter Sitesの管理』を参照してください。

45.2.2 USERタグ

WebCenter Sitesでは、表45-3で説明するUSERタグ(XMLおよびJSPの両バージョン)タグも用意されています。これらのタグは、ユーザーをログインおよびログアウトさせるページ上で使用します。

表45-3 ユーザー・タグ

タグ 説明

USER.LOGIN

user:login

ユーザーをログインさせます。

USER.LOGOUT

user:logout

ユーザーをログアウトさせます。

USER.SU

user:su

アカウント作成、ユーザー・プロファイルの編集などの操作を実行するために、特定のユーザーとしてユーザーをログインさせます。

これらのタグの詳細は、Oracle WebCenter Sitesタグ・リファレンスを参照してください。

45.2.3 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の管理』を参照してください。