Oracle® Fusion Middleware Oracle WebCenter PortalおよびOracle JDeveloperでのポータルの開発 11gリリース1 (11.1.1.8.3) E49666-03 |
|
前 |
次 |
この章では、Portal Frameworkアプリケーションで提供されるセキュリティのメカニズムおよび機能について説明し、Oracle ADFセキュリティを使用して認証および認可を処理する方法について紹介します。
この章の内容は、次のとおりです。
Portal Frameworkアプリケーションは動的であり、カスタマイズやプリファレンスといった形でユーザーからの入力が多く発生するため、柔軟なセキュリティ・モデルが必要になります。WebCenterのセキュリティ・モデルは、従来のJ2EEセキュリティ・モデルではなくADFセキュリティ・モデルに基づいています。ADFセキュリティの詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』のFusion WebアプリケーションでのADFセキュリティの有効化に関する項を参照してください。
デフォルトでは、Portal Frameworkアプリケーションは、ADFセキュリティで構成されます。デフォルトのユーザー名とパスワード(weblogic/weblogic1)が自動的に作成され、このユーザー名とパスワードの組合せをテスト用にただちに使用できます。ADFセキュリティの構成の詳細は、第74.3項「ADFセキュリティの構成」を参照してください。Portal Frameworkアプリケーションのテンプレートには、デフォルトのログインおよびログアウト・ページも用意されています。
Portal Frameworkアプリケーションには、ロール・マネージャ・タスク・フローとページ階層セキュリティ・エディタという2つのセキュリティ・ツールも用意されています。ロール・マネージャ・タスク・フローでは、ユーザーのロールおよび権限を定義するために事前定義されたランタイム・セキュリティ管理機能が提供されます。ページ階層セキュリティ・エディタを使用すると、継承または委任されたセキュリティ(あるいはその両方)をアプリケーション・ページに迅速に適用できます。この2つのセキュリティ・ツールの詳細は、第74.4項「ロール・マネージャ・タスク・フローの使用」および第74.6項「ページ階層セキュリティ・エディタの使用」を参照してください。
次の3つのロールがデフォルトで用意されています。
Administrator: アプリケーションのAdministratorロールのデフォルト・メンバーは、エンタープライズのAdministratorロールです。このロールはドメインに対する管理者権限を持ち、そのデフォルト・メンバーは、weblogic
です。
AppConnectionManager: AppConnectionManagerロールのデフォルト・メンバーは、アプリケーションのAdministratorロールです。このロールは、アプリケーションに対する管理者権限を持ちます。
AppConnectionViewer - AppConnectionViewerロールのデフォルト・メンバーはauthenticated-roleです
Administratorロールを使用すると、アプリケーションにナビゲーションとセキュリティを設定して、権限を他のユーザーに委任できます。
AppConnectionManagerおよびAppConnectionViewerは、個々のアプリケーション接続を管理および確認するために定義されているロールです。通常、アプリケーション接続は、Fusion Middleware ControlまたはWLSTコマンドを使用して構成および管理します。ただし、ポートレット・プロデューサおよび外部アプリケーションの接続は、アプリケーションのランタイム管理ページ(個別に実装されている場合はロール・マネージャ・タスク・フロー)を使用して構成できます。これらの接続を管理または確認するには、前述のいずれかのロールに属している必要があります。デフォルトのロールの詳細は、Oracle Fusion Middleware Oracle WebCenter Portalの管理のアプリケーション・ロールの理解に関する項を参照してください。
これらのロールのメンバーは、実行時に管理者ページ(個別に実装されている場合はロール・マネージャ・タスク・フロー)を使用して、またはJDeveloperでJAZNエディタを使用して追加できます。管理者は、外部アプリケーションとポートレット・プロデューサの接続を即時構成可能であり、これらの接続を確認できるのは、その他の認証ユーザーのみになります。同様に、アプリケーションにユーザーを追加するには、ADFセキュリティ・ポリシー・エディタで「ユーザー」タブを選択し、追加(+)アイコンをクリックしてユーザー名およびパスワードを指定します。
アプリケーション・ロールを作成するには:
次のいずれかの方法でADFセキュリティ・ポリシー・エディタにアクセスします。
META-INFフォルダの下にある「アプリケーション・リソース」パネルのjazn-data.xmlファイルに移動します。jazn-data.xmlを右クリックし、ポップアップ・メニューから「開く」を選択します。「アプリケーション・ロール」タブを開きます。
アプリケーション名を右クリックし、「保護」→「アプリケーション・ロール」の順に選択します。
「アプリケーション」メニューから、「保護」→「アプリケーション・ロール」の順に選択します。
アプリケーション・ロール・エディタで、追加(+)アイコンをクリックして「新規ロール」を選択します。
新規ロールの名前、表示名および説明を入力します。
ファイルを保存します。
同様に、アプリケーションにユーザーを追加するには、ADFセキュリティ・ポリシー・エディタで「ユーザー」タブを開き、追加(+)アイコンをクリックしてユーザー名およびパスワードを指定します。
Portal Frameworkアプリケーション・テンプレートを使用してアプリケーションを作成すると、デフォルトでADFセキュリティが構成されます。この項では、ADFセキュリティの構成ウィザードについて説明します。このウィザードを使用すると、Portal Frameworkアプリケーションのデフォルト設定をオーバーライドできます。また、アプリケーションでPortal Frameworkアプリケーション・テンプレートを使用しない場合についても説明します(アプリケーションの作成時に「標準ポータル機能のアプリケーションの構成」チェック・ボックスを選択しなかった場合など)。この項では、Portal Frameworkアプリケーションの作成の際と、コンポーネントが使用される際に、それぞれ生成される権限付与についても説明します。
この項には次のサブセクションが含まれます:
この項では、ADFセキュリティの構成ウィザードについて説明します。このウィザードを使用すると、Portal Frameworkアプリケーションのデフォルト設定をオーバーライドできます。また、アプリケーションでPortal Frameworkアプリケーション・テンプレートを使用しない場合についても説明します(アプリケーションの作成時に「標準ポータル機能のアプリケーションの構成」チェック・ボックスを選択しなかった場合など)。
ADFセキュリティ設定を構成するには:
ポータル・アプリケーションを開きます。
次のいずれかの方法でADFセキュリティの構成ウィザードにアクセスします。
「アプリケーション」メニューから、「保護」→「ADFセキュリティの構成」の順に選択します。
アプリケーション名を右クリックし、「保護」→「ADFセキュリティの構成」の順に選択します。
「ADFセキュリティの有効化」ページで、Portal Frameworkアプリケーションで通常選択される「ADF認証および認可」を選択します。
「次へ」をクリックします。
デフォルトでフォームベース認証が選択されていることに注意してください。
アプリケーションの保護プロセスを簡単にするには、図74-2に示すように、「フォームベース認証」で「デフォルト・ページの生成」オプションを選択します。
注意: Portal Frameworkアプリケーションには、デフォルトでログイン・ページとエラー・ページが用意されています。Portal Frameworkアプリケーション・テンプレートを使用して構築されていないアプリケーションでは、「デフォルト・ページの生成」オプションを選択する必要があります。 |
「デフォルト・ページの生成」を選択しない場合は、カスタムのログイン・ページおよびエラー・ページを作成できます。カスタム・ログイン・ページの作成の詳細は、第74.7項「ログイン・ページおよびログイン・コンポーネントの作成」を参照してください。
「次へ」をクリックします。
「自動ポリシー付与の有効化」ページでは、図74-3に示すように、アプリケーション開発者が最初にADFポリシー付与を定義することなくADFリソースをパブリックにするかどうかを選択します。標準のセキュリティ実装では、「自動付与なし」オプションを選択できます。
ただし、この場合は、アプリケーション内の各ページに権限を個別に付与する必要があります。
自動ポリシー付与を有効化すると、すべてのADFリソースに対する表示権限がtest-all
アプリケーション・ロールに作成され、public
ロールがデフォルト・メンバーになります。このオプションを選択することで、ADF認可で適用されるアクセスの制限がなくなり、アプリケーション・リソースの実行およびテストが容易になります。自動ポリシー付与を無効にして、デフォルトですべてのADFリソースを保護することもできます。
ADFリソースへのアクセス権を付与するポリシー・ストアを明示的に構成する場合は、「自動付与なし」を選択します。これにより、test-all
アプリケーション・ロールへの自動付与が行われなくなります。ただし、アプリケーションでWebCenter Portalのタスク・フローが使用されると、WebCenter拡張機能によりそれらのタスク・フローに適切な権限が自動的に付与され、authenticated-role
ロールに表示アクセス権が付与されます。タスク・フローを介して付与される特定の権限の詳細は、第74.3.2項「Portal Frameworkアプリケーションの自動セキュリティ権限付与」を参照してください。
注意: デフォルトでは、タスク・フローにアクセスするために付与される権限は、
|
JDeveloperでtest-all
(パブリック)アプリケーション・ロールに表示権限を付与し、このポリシーをすべてのアプリケーションの既存のADFタスク・フロー、およびユーザー・インタフェース・プロジェクト内のすべてのWebページに適用する場合は、「既存のオブジェクトのみに付与」を選択します。
JDeveloperでtest-all
アプリケーション・ロールに表示権限を付与し、このポリシーをすべてのADFタスク・フロー、および開発者がユーザー・インタフェース・プロジェクトで作成するWebページに適用する場合は、「すべてのオブジェクトに付与」を選択します。ウィザードの初回実行時には、「すべてのオブジェクトに付与」オプションが表示されることに注意してください。それ以降は、ウィザードの各実行時に「新規オブジェクトに付与」オプションが表示されます。
「次へ」をクリックします。
必要に応じて、認証時に特定のようこそページを表示する場合は、図74-4に示すように「認証の成功時にリダイレクト」オプションを選択します。
カスタムのようこそページを作成することも、ウィザードでデフォルトのようこそページを作成することもできます。プロセスを簡単にするには、「デフォルトの生成」を選択します。
図74-5に示すような「サマリー」ページが開きます。
「終了」をクリックします。
操作の完了に時間がかかる場合があります。
「セキュリティ・インフラストラクチャが作成されました」ダイアログで、「OK」をクリックします。
表74-1は、標準のポータル機能で構成されたPortal Frameworkアプリケーションで自動的に付与されるセキュリティの権限を示しています。
注意: アプリケーションへのパブリックまたは匿名アクセス権を持っていない場合は、現在 revokePermission(appStripe="papp1#V2.0",principalClass= |
表74-1 Portal Frameworkアプリケーションの自動セキュリティ権限付与
ロール | 付与 | アクション | リソース名 |
---|---|---|---|
anonymous-role |
TaskflowPermission |
表示 |
/oracle/webcenter/siteresources/scopedMD/.* /oracle/webcenter/portalapp/.* /oracle/webcenter/navigationtaskflows/view/pagebreadcrumb-definition.xml#pagebreadcrumb-definition /oracle/webcenter/navigationtaskflows/view/pagemenu-definition.xml#pagemenu-definition /oracle/webcenter/navigationtaskflows/view/pagetree-definition.xml#pagetree-definition /oracle/webcenter/navigationtaskflows/view/.* /oracle/webcenter/.* |
RegionPermission |
表示 |
oracle.webcenter.siteresources.scopedMD.* oracle.webcenter.taskflow.view.ContainerPageDef oracle.webcenter.taskflow.view.ViewerPageDef oracle.webcenter.taskflowstyle.view.PreviewPageDef oracle.webcenter.page.pstemplates.* oracle.webcenter.portalapp.pagetemplates.* oracle.webcenter.portalapp.pages.loginPageDef oracle.webcenter.portalapp.pages.errorPageDef oracle.webcenter.portalapp.pages.navigation_rendererPageDef |
|
HierarchicalResource権限 |
表示 |
serviceID=oracle.webcenter.page,scopeID=s8bba98ff_4cbb_40b8_beee_296c916a23ed,resourceID=s8bba98ff_4cbb_40b8_beee_296c916a23ed |
|
authenticated-role |
RegionPermission |
表示 |
oracle.webcenter.portalwebapp.pages.adminPageDef oracle.webcenter.collab.* oracle.webcenter.doclib.* oracle.webcenter.tagging.* |
RegionPermission |
付与 |
oracle.webcenter.taskflow.view.ContainerPageDef |
|
HierarchicalResourcePermission |
パーソナライズ、表示 |
serviceID=oracle.webcenter.page,scopeID=s8bba98ff_4cbb_40b8_beee_296c916a23ed,resourceID=s8bba98ff_4cbb_40b8_beee_296c916a23ed |
|
CatalogPermission |
作成、編集 |
/oracle/webcenter/quicklinks/scopedMD/.* |
|
管理者 |
HierarchicalResourcePermission |
作成、削除、権限付与、管理、パーソナライズ、更新、表示 |
serviceID=oracle.webcenter.page,scopeID=s8bba98ff_4cbb_40b8_beee_296c916a23ed,resourceID=s8bba98ff_4cbb_40b8_beee_296c916a23ed |
WebCenterResourcePermission |
管理 |
oracle_webcenter_siteresource_s8bba98ff_4cbb_40b8_beee_296c916a23ed_contentpresenter_.* oracle_webcenter_siteresource_s8bba98ff_4cbb_40b8_beee_296c916a23ed_datacontrol_.* oracle_webcenter_siteresource_s8bba98ff_4cbb_40b8_beee_296c916a23ed_navigation_.* oracle_webcenter_siteresource_s8bba98ff_4cbb_40b8_beee_296c916a23ed_pagestyle_.* oracle_webcenter_siteresource_s8bba98ff_4cbb_40b8_beee_296c916a23ed_catalog_.* oracle_webcenter_siteresource_s8bba98ff_4cbb_40b8_beee_296c916a23ed_pagetemplate_.* oracle_webcenter_siteresource_s8bba98ff_4cbb_40b8_beee_296c916a23ed_skin_.* oracle_webcenter_siteresource_s8bba98ff_4cbb_40b8_beee_296c916a23ed_taskflow_.* oracle_webcenter_siteresource_s8bba98ff_4cbb_40b8_beee_296c916a23ed_taskflowstyle_.* |
表74-2はサービスの使用時に付与される権限を示しています。サービスは、当該サービスに属しているコンポーネント(コンポーネント・パレットから)またはタスク・フロー(リソース・パレットから)がページに追加されるたびに使用されます。
jazn-data.xml
ファイルに自動的に追加されます。それらの権限はADFセキュリティ・ポリシー・エディタで確認および編集できます。詳細は、第74.3.1項「ADFセキュリティ設定の構成」を参照してください。
注意: Portal Frameworkアプリケーションが作成されるとき、次の要素
( |
アプリケーションに対してADFセキュリティが構成されていない場合、これらの権限は追加されませんが、後からセキュリティが構成された場合は、アプリケーションで使用されているすべてのコンポーネントに権限が追加されます。一般的な権限は、どのWebCenter Portalサービスを使用した場合でも必ず付与されます。
表74-2 Portal Frameworkアプリケーションの自動セキュリティ権限付与
サービス | ロール | 付与 | アクション | リソース名 |
---|---|---|---|---|
共通 |
anonymous-role |
TaskFlow権限 |
表示 |
/oracle/webcenter/framework/service/controller/taskflows/resourceViewer.xml#resourceViewer /oracle/webcenter/security/peoplepicker/jsf/taskflows/peoplepicker.xml#peoplepicker /oracle/webcenter/peopleconnections/personalweb/view/jsf/regions/profile-gallery.xml#profile-gallery /oracle/webcenter/peopleconnections/profile/view/jsf/regions/extended/extended-profile.xml#extended-profile /oracle/webcenter/peopleconnections/view/jsf/regions/profile-snapshot.xml#profile-snapshot /oracle/webcenter/peopleconnections/connections/controller/taskflows/connections-main-view-taskflow.xml#connections-main-view-taskflow /oracle/webcenter/peopleconnections/connections/controller/taskflows/connections-mini-view-taskflow.xml#connections-mini-view-taskflow /oracle/webcenter/peopleconnections/connections/controller/taskflows/table-of-connections-taskflow.xml#table-of-connections-taskflow /oracle/webcenter/peopleconnections/wall/controller/taskflows/WallDetailViewer.xml#WallDetailViewer /oracle/webcenter/peopleconnections/wall/controller/taskflows/WallViewer.xml#WallViewer /oracle/webcenter/peopleconnections/kudos/controller/taskflows/KudosDetailViewer.xml#KudosDetailViewer /oracle/webcenter/peopleconnections/kudos/controller/taskflows/KudosMiniViewer.xml#KudosMiniViewer /oracle/webcenter/activitystreaming/controller/taskflows/activity-streaming-mainview.xml#activity-streaming-mainview /oracle/webcenter/activitystreaming/controller/taskflows/activity-streaming-miniview.xml#activity-streaming-miniview /oracle/webcenter/peopleconnections/.* /oracle/webcenter/activitystreaming/.* |
authenticated-role |
Region権限 |
表示 |
oracle.webcenter.security.peoplepicker.pageDefs.oracle_webcenter_security_peoplepicker_jsf_pages_PeoplePickerPagePageDef |
|
authenticated-role |
CustomPage権限 |
表示 |
oracle.webcenter.framework.service.view.pageDefs.resourceExternalPageDef |
|
authenticated-role |
Profile権限 |
編集、共有、ビュー |
/oracle/webcenter/peopleconnections/profile/s8bba98ff_4cbb_40b8_beee_296c916a23ed/.* |
|
管理者 |
WCApp権限 |
管理 |
application |
|
管理者 |
Profile権限 |
管理 |
/oracle/webcenter/peopleconnections/profile/s8bba98ff_4cbb_40b8_beee_296c916a23ed/.* |
|
お知らせ |
anonymous-role |
TaskFlow権限 |
表示 |
/oracle/webcenter/collab/announcement/view/taskflows/main-view-definition.xml#announcement-main-view /oracle/webcenter/collab/announcement/view/taskflows/mini-view-definition.xml#announcement-mini-view /oracle/webcenter/collab/announcement/view/taskflows/link-existing-view-definition.xml#link-existing-view-definition /oracle/webcenter/collab/announcement/view/taskflows/config-view-definition.xml#announcement-config-view /oracle/webcenter/collab/announcement/view/taskflows/announcement-view-definition.xml#announcement-resource-view /oracle/webcenter/collab/announcement/view/taskflows/.* |
authenticated-role |
Region権限 |
表示 |
oracle.webcenter.collab.announcement.view.pageDefs.oracle_webcenter_collab_announcement_view_jsf_pages_AnnouncementLinkExistingViewPageDef oracle.webcenter.collab.announcement.view.pageDefs.oracle_webcenter_collab_announcement_view_jsf_pages_AnnouncementLinkResourceViewPageDef |
|
コンポーザ |
anonymous-role |
Taskflow権限 |
表示 |
/oracle/adfinternal/pageeditor/.* |
ディスカッション |
anonymous-role |
Taskflow権限 |
表示 |
/oracle/webcenter/collab/forum/view/taskflows/main-task-flow.xml#forum-main /oracle/webcenter/collab/forum/view/taskflows/miniview-task-flow.xml#forum-miniview /oracle/webcenter/collab/forum/view/taskflows/popularTopic-task-flow.xml#forum-popularTopic /oracle/webcenter/collab/forum/view/taskflows/recentTopic-task-flow.xml#forum-recentTopic /oracle/webcenter/collab/forum/view/taskflows/watchedTopic-task-flow.xml#forum-watchedTopic /oracle/webcenter/collab/forum/view/taskflows/watchedForum-task-flow.xml#forum-watchedForum /oracle/webcenter/collab/forum/view/taskflows/config-task-flow.xml#forum-config-view /oracle/webcenter/collab/forum/view/taskflows/link-existing-task-flow.xml#forum-link-existing /oracle/webcenter/collab/forum/view/taskflows/link-new-task-flow.xml#forum-link-new /oracle/webcenter/collab/forum/view/taskflows/message-task-flow.xml#forum-message /oracle/webcenter/collab/forum/view/taskflows/resource-view-task-flow.xml#forum-resource-view /oracle/webcenter/collab/forum/view/taskflows/scope-config-task-flow.xml#forum-scope-config-view /oracle/webcenter/collab/forum/view/taskflows/.* |
authenticated-role |
Region権限 |
表示 |
oracle.webcenter.collab.forum.view.pageDefs.oracle_webcenter_collab_forum_view_jsf_pages_ForumLinkExistingViewPageDef oracle.webcenter.collab.forum.view.pageDefs.oracle_webcenter_collab_forum_view_jsf_pages_ForumLinkNewViewPageDef oracle.webcenter.collab.forum.view.pageDefs.oracle_webcenter_collab_forum_view_jsf_pages_ForumLinkResourceViewPageDef |
|
ドキュメント |
anonymous-role |
Taskflow権限 |
表示 |
/oracle/webcenter/doclib/view/jsf/taskflows/presenter/contentPresenter.xml#doclib-content-presenter /oracle/webcenter/doclib/view/jsf/taskflows/docListViewer.xml#doclib-document-list-viewer /oracle/webcenter/doclib/view/jsf/taskflows/docViewer/docInfo.xml#doclib-document-information /oracle/webcenter/doclib/view/jsf/taskflows/explore/explorer.xml#doclib-explorer /oracle/webcenter/doclib/view/jsf/taskflows/treeNav/treeNavigator.xml#doclib-navigator /oracle/webcenter/doclib/view/jsf/taskflows/docViewer/documentViewer.xml#doclib-document-viewer /oracle/webcenter/doclib/view/jsf/taskflows/folderViewer/folderView.xml#doclib-folder-viewer /oracle/webcenter/doclib/view/jsf/taskflows/mainView.xml#doclib-document-library /oracle/webcenter/doclib/view/jsf/taskflows/miniProperties/miniProperties.xml#doclib-mini-properties /oracle/webcenter/doclib/view/jsf/taskflows/recentDocuments.xml#doclib-recent-documents /oracle/webcenter/doclib/view/jsf/taskflows/richTextEditor/editor.xml#doclib-richtext-editor /oracle/webcenter/doclib/view/jsf/taskflows/upload/uploader.xml#doclib-upload-document /oracle/webcenter/doclib/view/jsf/taskflows/versionHistory/history.xml#doclib-version-history /oracle/webcenter/blog/view/jsf/taskflows/blogDigestViewer/blog-main-view.xml#blog-main-view /oracle/webcenter/doclib/view/jsf/taskflows/.* /oracle/webcenter/blog/view/jsf/taskflows/.* |
authenticated-role |
Region権限 |
表示 |
oracle.webcenter.doclib.view.jsf.* oracle.webcenter.blog.view.jsf.* |
|
外部アプリケーション |
anonymous-role |
Taskflow権限 |
表示 |
/oracle/adfinternal/extapp/view/fragments/extapp-credential-provisioning-taskflow.xml#extapp-credential-provisioning-taskflow /oracle/adfinternal/extapp/view/fragments/extapp-change-password-taskflow.xml#extapp-change-password-taskflow |
リンク |
anonymous-role |
Taskflow権限 |
表示 |
/oracle/webcenter/relationship/view/jsf/resources/links-detail.xml#links-detail /oracle/webcenter/relationship/view/jsf/resources/links-detail-popup.xml#links-detail-popup /oracle/webcenter/relationship/view/jsf/resources/links-to-service.xml#link-to-service /oracle/webcenter/relationship/view/jsf/resources/links-picker-popup.xml#links-picker-popup /oracle/webcenter/relationship/url/view/jsf/taskflows/linkToUrl.xml#link-to-url |
管理者 |
Relationship権限 |
管理 |
*s8bba98ff_4cbb_40b8_beee_296c916a23ed/.* |
|
リスト |
anonymous-role |
Taskflow権限 |
表示 |
/oracle/webcenter/list/view/jsf/regions/main-view-task-flow.xml#main-view-task-flow /oracle/webcenter/list/view/jsf/regions/list-instance-view-task-flow.xml#list-instance-view-task-flow /oracle/webcenter/list/view/jsf/regions/.* |
authenticated-role |
Region権限 |
表示 |
/oracle/webcenter/list/templates/lists/.* |
|
管理者 |
List権限 |
表示 |
/oracle/webcenter/list/scopedMD/s8bba98ff_4cbb_40b8_beee_296c916a23ed/lists/.* |
|
メール |
anonymous-role |
Taskflow権限 |
表示 |
/oracle/webcenter/collab/mail/view/jsf/regions/compose-task-flow.xml#mail-compose-view /oracle/webcenter/collab/mail/view/jsf/regions/content-view-definition.xml#mail-content-view /oracle/webcenter/collab/mail/view/jsf/regions/dl-config-definition.xml#dl-config-view /oracle/webcenter/collab/mail/view/jsf/regions/mini-view-definition.xml#mail-mini-view /oracle/webcenter/collab/mail/view/jsf/regions/.* |
authenticated-role |
Region権限 |
表示 |
oracle.webcenter.collab.mail.view.pageDefs.oracle_webcenter_collab_mail_view_jsf_pages_ComposeviewPageDef oracle.webcenter.collab.mail.view.pageDefs.oracle_webcenter_collab_mail_view_jsf_pages_ContentViewPageDef |
|
通知 |
anonymous-role |
Taskflow権限 |
表示 |
/oracle/webcenter/notification/view/jsf/regions/SubscriptionPreferences.xml#SubscriptionPreferences /oracle/webcenter/notification/view/jsf/regions/SubscriptionsViewer.xml#SubscriptionsViewer |
ページ |
anonymous-role |
TaskFlow権限 |
表示 |
/oracle/webcenter/page/view/jsf/fragments/page-create-page.xml#page-create-page /oracle/webcenter/page/view/jsf/fragments/page-doc-prop-panel-definition.xml#page-doc-prop-panel-definition /oracle/webcenter/page/view/jsf/fragments/page-doc-sec-panel-definition.xml#page-doc-sec-panel-definition /oracle/webcenter/page/view/jsf/fragments/golink-prop-panel-definition.xml#golink-prop-panel-definition |
authenticated-role |
Region権限 |
作成 |
oracle_webcenter_page_scopedMD_s8bba98ff_4cbb_40b8_beee_296c916a23ed_.* |
|
管理者 |
Region権限 |
カスタマイズ、編集、権限付与、パーソナライズ、表示 |
oracle_webcenter_page_scopedMD_s8bba98ff_4cbb_40b8_beee_296c916a23ed_.* |
|
投票 |
anonymous-role |
Taskflow権限 |
表示 |
/oracle/webcenter/collab/survey/view/jsf/taskflows/list-surveys-definition.xml#list-surveys /oracle/webcenter/collab/survey/view/jsf/taskflows/take-survey-definition.xml#take-survey /oracle/webcenter/collab/survey/view/jsf/taskflows/quick-poll-definition.xml#quick-poll /oracle/webcenter/collab/survey/view/jsf/taskflows/view-results-definition.xml#view-results /oracle/webcenter/collab/survey/view/jsf/taskflows/take-polls-definition.xml#take-polls /oracle/webcenter/collab/survey/view/jsf/taskflows/empty-definition.xml#empty-definition /oracle/webcenter/collab/survey/view/jsf/taskflows/.* |
最近のアクティビティ |
anonymous-role |
TaskFlow権限 |
表示 |
/oracle/webcenter/recentactivity/controller/taskflows/recent-activities.xml#recent-activities /oracle/webcenter/recentactivity/controller/taskflows/.* |
RSS |
anonymous-role |
TaskFlow権限 |
表示 |
/oracle/webcenter/rssviewer/view/jsf/fragments/RSSViewerTaskFlow.xml#RSSViewerTaskFlow /oracle/webcenter/rssviewer/view/jsf/fragments/.* |
検索 |
anonymous-role |
TaskFlow権限 |
表示 |
/oracle/webcenter/search/controller/taskflows/searchResults.xml#search-view /oracle/webcenter/search/controller/taskflows/localToolbarSearch.xml#search-toolbar /oracle/webcenter/search/controller/taskflows/preferences.xml#search-preferences /oracle/webcenter/search/controller/taskflows/allSavedSearches.xml#all-saved-searches /oracle/webcenter/search/controller/taskflows/simpleSearchResults.xml#search-simple-view /oracle/webcenter/search/controller/taskflows/customize.xml#search-customize /oracle/webcenter/search/controller/taskflows/.* |
タグ |
anonymous-role |
TaskFlow権限 |
表示 |
/oracle/webcenter/tagging/controller/taskflows/related-links.xml#tagging-related-links /oracle/webcenter/tagging/controller/taskflows/launch-dialog.xml#tagging-launch-dialog /oracle/webcenter/tagging/controller/taskflows/tagging-personal-view.xml#tagging-personal-view /oracle/webcenter/tagging/controller/taskflows/tag-selection.xml#tag-selection /oracle/webcenter/tagging/controller/taskflows/related-resources.xml#related-resources /oracle/webcenter/tagging/controller/taskflows/tag-center-task-flow.xml#tag-center /oracle/webcenter/tagging/controller/taskflows/tag-center-related-tags.xml#tag-center-related-tags /oracle/webcenter/tagging/controller/taskflows/tag-center-related-users.xml#tag-center-related-users |
authenticated-role |
Region権限 |
表示 |
oracle.webcenter.tagging.view.pageDefs.oracle_webcenter_tagging_view_jsf_fragments_launch_dialogPageDef oracle.webcenter.tagging.view.pageDefs.oracle_webcenter_tagging_view_jsf_fragments_tag_centerPageDef oracle.webcenter.tagging.view.pageDefs.oracle_webcenter_tagging_view_jsf_fragments_tag_center_related_resourcesPageDef oracle.webcenter.tagging.view.pageDefs.oracle_webcenter_tagging_view_jsf_fragments_tag_center_related_tagsPageDef oracle.webcenter.tagging.view.pageDefs.oracle_webcenter_tagging_view_jsf_fragments_tag_center_related_usersPageDef oracle.webcenter.tagging.view.pageDefs.oracle_webcenter_tagging_view_jsf_fragments_tag_center_tag_selectionPageDef |
|
ワークリスト |
anonymous-role |
TaskFlow権限 |
表示 |
/oracle/webcenter/worklist/view/jsf/taskFlowDefs/worklist.xml#worklist /oracle/webcenter/worklist/view/jsf/taskFlowDefs/.* |
ロール・マネージャ・タスク・フローを使用すると、管理者は、アプリケーション・ロールおよびそのメンバーシップ、さらにそのロールに関連付けられたサービス権限を管理できます。ロール・マネージャ・タスク・フローは事前に構成されており、Portal Frameworkアプリケーション・テンプレートを使用して作成されたアプリケーションのランタイム管理ページの「セキュリティ」タブから使用できます。ロール・マネージャのランタイムを使用して、ユーザー・ロールおよびアプリケーション・ロールを管理する方法の詳細は、Oracle Fusion Middleware Oracle WebCenter Portalの管理のユーザー・ロールおよびアプリケーション・ロールの管理に関する項を参照してください。
カスタマイズが更新中に上書きされることを防ぐために、管理ページのソースをカスタマイズしないでください。ただし、デフォルトの管理ページが十分でない場合は、自身の管理ページを書くことも選択できます。この場合、アプリケーションのランタイム・セキュリティ管理の一部としてロール・マネージャ・タスク・フローを使用することができます。次の手順に従ってJSFまたはJSPページを追加し、アプリケーションにそれを含めてください。
Portal Frameworkアプリケーションに、ロール・マネージャ・タスク・フローを追加するには:
アプリケーション・タイプとしてPortal Frameworkアプリケーションを選択し、新規アプリケーションを作成します。
必要な可能性のあるすべてのプロジェクト・テクノロジ・ライブラリを追加して、アプリケーションを作成します。「標準ポータル機能のアプリケーションの構成」チェック・ボックスは選択解除しないでください。
新しいJSFページまたはJSPページを作成します。
「リソース・パレット」で「WebCenter Portal - サービス・カタログ」を開き、「タスク・フロー」のリストからSecurity - Role Manager
タスク・フローを選択します。
図74-6 「リソース・パレット」 - 「WebCenter Portal - サービス・カタログ」
「ロール・マネージャ」タスク・フローをドラッグし、リージョンとして作成したページにドロップします。
アプリケーションを作成して管理者としてログインし、ロール・マネージャ・タスク・フローを含むページに移動します。
エンタープライズ・ロール・メンバー・タスク・フローでは、ロール・マネージャ・タスク・フローに追加のタスク・フローが提供され、それをページに追加することでエンタープライズ・ユーザーおよびエンタープライズ・ロールを監視できるようになります。ロールおよびユーザーの両方がメンバーとしてツリー構造で表示されます。ロールを開くと、そのメンバーが表示されます。
タスク・フローを追加するには、ロール・マネージャ・タスク・フローと同じ手順(第74.4項「ロール・マネージャ・タスク・フローの使用」を参照)を実行し、タスク・フローを次のいずれかに置き換えます。すべてのエンタープライズ・ロール・メンバー・タスク・フローが、単一の必須パラメータ(エンタープライズ・ロール名)を取ることに注意してください。
セキュリティ - エンタープライズ・ロール - メンバー
このタスク・フローでは、指定したロールのメンバーのリストが表示されます。
セキュリティ - エンタープライズ・ロール - メンバー検索
このタスク・フローでは、指定したロールのパターンを使用してメンバーのネストされた検索が実行され、メンバーのリストが表示されます。
セキュリティ - エンタープライズ・ロール - メンバー・ビューア
このタスク・フローでは、エンタープライズ・ロール・メンバー・タスク・フローおよびメンバー検索タスク・フローに表示される「メンバー」タブおよび「検索」タブが単一ページに表示されます。
この項では、継承または委任されたセキュリティを、Portal Frameworkアプリケーション・ページに提供する、ページ階層セキュリティの使用方法について説明します。次の項が含まれます:
この項では、ページ階層モデルと、Portal Frameworkアプリケーション内でのページ階層セキュリティの動作について説明します。
この項には次のサブセクションが含まれます:
ページ階層には、階層のルートに設定されたデフォルトのセキュリティ・ポリシーがあります。明示的にオーバーライドされないかぎり、このポリシーは下にあるすべてのページに適用されます。階層内のページでは、継承されたポリシーが新しいポリシーでオーバーライドされることがあり、それによって従属ページの委任管理およびポリシー変更が可能になります。あるページのポリシーがオーバーライドされると、そのページの子はデフォルトで新しいポリシーを継承します。特定のノードで確立されるポリシーは、そのページで各権限受領者およびその子(存在する場合)が持つ権限を示したリストになります。
Frameworkアプリケーションを作成すると、ページ階層のルート・ノードを含むデフォルトのナビゲーション・モデルが作成されます。これら2つの構造は、アプリケーションのページにナビゲーション・フローおよびセキュアなアクセスを提供するために、単独および一元的に機能します。図74-8は、デフォルトのナビゲーション・モデル(default-navigation-model.xml
)を示しています。このモデルには、デフォルトのページ階層のノードが含まれています(pages.xml
)。
たとえば、追加のナビゲーション·モデルを追加すると、特定のユーザー・グループに異なるナビゲーション・ビューを提供することができます。各ナビゲーションには、よりきめ細かなナビゲーションおよびセキュリティ・モデルを提供するために1つ以上のページ階層ノードを追加することができます。新しいナビゲーション・モデルの作成の詳細は、第10.2項「ナビゲーション・モデルの作成」を参照してください。ページ階層をナビゲーションに追加する方法の詳細は第10.3.5項「その他のリソースをナビゲーション・モデルに追加する方法」を参照してください。
アプリケーション内にページ階層が1つしかない場合でも、その階層内の任意のノードをナビゲーション・モデルのルート・ノードとして使用できます。たとえば、Human Resources、Support、Sales、Administrationなどの上位レベル・ノードを含むページ階層があるとします。これらの各ノードをナビゲーション・モデルに個別に追加することで、ページ階層の特定のセクションにのみにナビゲーションを作成することができます。
図74-9は、ページ階層のルート・ノードおよび関連する権限を示しています。ルート・ノードを起点にページを追加またはドラッグすることでページ階層を構築できます。管理権限はルート・ノード上で管理者に対してのみ表示されることに注意してください。これにより管理者は、セキュリティを委任できるだけでなく、セキュリティがオーバーライドされているかどうかに関係なく階層内のすべてのページにアクセスできます。つまり、ルート・ノード上で管理権限を持つユーザーはスーパー管理者であり、階層全体のすべてのページにアクセスできます。
ページ階層では、Portal Frameworkアプリケーションのページ・レベルのセキュリティに代替のセキュリティ・メカニズムが提供されます。アプリケーションにページを追加する場合、そのページをページ階層に含めなくてもセキュリティを提供することは可能ですが、ページ階層を使用すれば、大規模サイトのコンテンツなどをより便利に管理しやすい方法で保護することができます。階層のルート・ノードまたはホーム・ノードに階層ノードを追加し、そこにページをドラッグ・アンド・ドロップするだけで、そのページにすばやく基本的なセキュリティを提供できます。
注意: ページ・レベルのセキュリティとページ階層セキュリティは共存できますが、その両方を同じページに適用することはできません。ページを階層ノードに追加する場合は、以前のページ・レベルの権限がすべて消去されることにも注意してください。 |
ページ階層モデルでは、カスケード型のロール・ベース・セキュリティを提供するノード構造が使用されており、ここでは、各子ノードが親のセキュリティ権限を継承します。ページをノードに追加することで、アプリケーション・ページのセキュリティを迅速に構成できます。
特定のノードでアクションを実行するには、そのノードで必要な権限、またはセキュリティを委任(オーバーライド)している直接の親で必要な権限を所有している必要があります。ただし、ページを表示するには、そのルート・ページまでの階層権限上にある全ページの表示アクセス権が必要です。
ノードの親から継承される基本的なセキュリティに加えて、委任セキュリティを子ノードに適用することで、本来継承されるセキュリティを制限またはオーバーライドすることもできます。ページ階層セキュリティのこのような機能の詳細は、第74.6.2項「ページ階層の構築」を参照してください。
注意: 継承セキュリティは、最初に管理者によってのみ移入可能なルート・ノードを介してカスケードされます。他のユーザーによる権限の作成および委任を可能にするには、まず管理者がそれらの権限を委任する必要があります。どのような場合でも、権限はツリー内で下位にカスケードされます(つまり、ユーザーは親ノードの設定を変更できません)。また、ユーザーが他のユーザーに委任できるのは、自身の権限またはその権限のサブセットのみになります。 |
この項では、ページ階層セキュリティを使用して親ページのロール・ベース・セキュリティ設定を子ページに自動的にカスケードする方法と、各ページ・ノードにおけるセキュリティの委任方法について説明します。
この項には次のサブセクションが含まれます:
デフォルトのナビゲーション・モデルのデフォルトのページ階層に加えて、ページ階層ノードをデフォルトのページ階層からアプリケーション内のナビゲーションにルート・ノードとして追加できます。ナビゲーションへのページ階層の追加の詳細は、第10.3.5項「その他のリソースをナビゲーション・モデルに追加する方法」を参照してください。
この項では、JSFページまたはJSPページをページ階層に追加する方法について説明します。
注意: 継承セキュリティ・モデルの競合の問題を回避するため、1つのページがページ階層内で表示されるのは1回のみです。 |
JSFページまたはJSPページをページ階層に追加するには:
次のいずれかの方法を使用して、JDeveloperでページ階層エディタを開きます。
/oracle/webcenter/portalapp/pagehierarchy
フォルダを右クリックします
または
/oracle/webcenter/portalapp
の下にあるいずれかの.jspx
ページを右クリックして、ポップアップ・メニューから「ページ階層の編集」を選択します
ページを追加するノードを選択して、次のいずれかを実行します。
「ページの追加」アイコンをクリックし、ブラウザでページを見つけて追加します
または
適切なノードの下にあるナビゲーションからページをドラッグ・アンド・ドロップします
必要に応じて、さらにページを追加するか、「ページの削除」アイコンを使用して不要なページを削除します。
この項では、ノードおよびその子ページの権限を委任することで継承セキュリティをオーバーライドする方法について説明します。ページのセキュリティは、ランタイム管理ページを使用して委任することもできます。ランタイム管理ページを使用したセキュリティの委任の詳細は、Oracle Fusion Middleware Oracle WebCenter Portalの管理のアプリケーション・ロールおよび権限の管理に関する項を参照してください。
委任されたセキュリティで継承セキュリティをオーバーライドするには:
JDeveloperでページ階層(pages.xml
)を開きます。
継承セキュリティのオーバーライドを開始するノードを選択します。
「表示」チェック・ボックスを選択または選択解除して、ページまたはリソースを表示するかどうかを指定します。すべてのユーザーに常にリソースを表示するには、このチェック・ボックスを選択します。すべてのユーザーで常にリソースを非表示にするには、このチェック・ボックスの選択を解除します。
「セキュリティの委譲」を選択します。
委任するセキュリティの「セキュリティ」オプションが表示されます(図74-10を参照)。
このページおよびその子ページのロールの権限を選択または選択解除します。
使用可能な他のユーザー・ロールの権限を指定するには、追加アイコン(+)をクリックして必要なロールを選択します。表内にそのロールの新しい行が作成されます。既存ロールの権限を削除するには、表内の該当する行を選択し、削除アイコン(X)をクリックします。
注意: 「追加」リスト内のロール名は、アプリケーションのポリシー・ストアで定義されているアプリケーション・ロールに対応します。セキュリティの委任は、設計時にアプリケーション・ロールに対してのみ実行できます。ただし、Oracle Fusion Middleware Oracle WebCenter Portalの管理のアプリケーション・ロールおよび権限の管理に関する項で説明しているように、ユーザー・ロールおよびエンタープライズ・ロールはランタイム管理ページを使用して実行時に追加できます。 |
ログイン・リンクやログアウト・リンクをパブリックのようこそページ、またはログイン・バッキングBean (LoginBackingBean
)を使用して他のページに追加して、アプリケーション使用中にログインおよびログアウトをユーザーが明示的に行えるようにします。Beanは、ログインおよびログアウトをするためにユーザーが使用できるメソッドを提供します。
このBeanを使用するには、次の手順に従って、単一のページを作成し、それをログインおよびログアウトを実行するためのBeanにバインドします。
JSFページを作成します。
LoginBackingBean
をfaces-config.xml
ファイルまたはtaskflow.xml
ファイルに追加します。
ユーザー名、パスワード、ログイン・リンクおよびログアウト・リンクを指定してページを作成します。
そのユーザー名とパスワードを、Beanのユーザー名とパスワードにバインドします。
次の例に示すように、ログイン・リンクおよびログアウト・リンクをそれぞれdoLogin
メソッドおよびdoLogout
メソッドにマップします。
<af:subform id="pt_sf1" defaultCommand="pt_logincb" rendered="#{attrs.showLogin and !securityContext.authenticated}"> <af:panelFormLayout id="pt_pfl1"> <af:panelLabelAndMessage id="pt_plam1" label="User Name" styleClass="NoLabelWrap" labelStyle="font-size:small;color:white;"> <af:inputText id="pt_it1" simple="true" value="#{o_w_s_l_LoginBackingBean.userName}" columns="15"/> </af:panelLabelAndMessage> <af:panelLabelAndMessage id="pt_plam2" label="Password" styleClass="NoLabelWrap" labelStyle="font-size:small;color:white;"> <af:inputText id="pt_it2" simple="true" value="#{o_w_s_l_LoginBackingBean.password}" columns="15" secret="true"/> </af:panelLabelAndMessage> </af:panelFormLayout> <af:spacer width="3" height="3" id="pt_s2"/> <af:panelGroupLayout id="pt_pgl14" layout="horizontal" halign="end"> <af:commandLink id="pt_logincb" text="Login" action="#{o_w_s_l_LoginBackingBean.doLogin}" inlineStyle="font-size:small;color:white;"/> <af:spacer id="pt_s3" width="5px"/> </af:panelGroupLayout> </af:subform>
ログイン・メソッドおよびログアウト・メソッドは、アクションにマップして、ログインおよびログアウト後にfaces-config.xml
のナビゲーション・ルールで使用可能な値を戻します。faces-config.xml
内の次のエントリは、Portal Frameworkアプリケーションにおいてデフォルトで生成されます。
<navigation-rule> <from-view-id>*</from-view-id> <navigation-case> <from-outcome>login_success</from-outcome> <to-view-id>/pages_home</to-view-id> <redirect/> </navigation-case> <navigation-case> <from-outcome>logout_success</from-outcome> <to-view-id>/pages_home</to-view-id> <redirect/> </navigation-case> </navigation-rule>
これにより、ログインおよびログアウト後の移動先が定義されます(この例では、いずれの場合もホーム・ページに移動します)。この動作を変更するには、faces-config.xml
内でこれらのルールを変更して、たとえば、ユーザーを別のページにリダイレクトするようにします。
faces-config.xml
ファイルで使用できる他の構成要素のリファレンスは、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』のADF Faces構成に関する項を参照してください。
アプリケーションのログイン・ポートレットの作成の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』を参照してください。
アプリケーションにADF Facesベースのログイン・ページを作成する方法の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』を参照してください。この項では、そのようなログイン・ページにポートレットを追加することで、Frameworkアプリケーションの他のページと同じような外観のログイン・ページを作成します。
続行前に、ポートレット・プロデューサが登録されていることを確認します。詳細は、第63章「ポートレットの消費」を参照してください。
ポートレットをログイン・ページに追加するには、次の手順を実行します:
ログイン・ページに追加した最初のcust:panelCustomizable
タグ内のh:form
タグに、PanelCustomizableをドラッグします。
コンポーネント・パレットから、リッチ・テキスト・ポートレット・プロデューサを選択し、リストからリッチ・テキスト・ポートレットを選択して「PanelCustomizable」
コンポーネントの上にドラッグします。
コンポーネント・パレットから、「ADF Faces Core」を選択し、「ObjectSeparator」をリッチ・テキスト・ポートレットの下の「PanelCustomizable」
コンポーネントの上にドラッグします。
コンポーネント・パレットから、OmniPortletプロデューサを選択し、リストからOmniPortletを選択して「PanelCustomizable」
コンポーネントの上にドラッグします。
ページを保存します。
ログイン・プロセスの一部としてコンテナからログイン・ページが呼び出されるため、適切なポートレットおよびセキュリティのコンテキストを確立するために、リクエストをADFバインディング・フィルタに転送する必要があります。このためには、web.xml
ファイル内でADFバインディング・フィルタのマッピングを構成する必要があります。これを行うには、次の手順を実行します:
アプリケーション・ナビゲータで、「WEB-INF」ノードを開き、「web.xml」を右クリックし、「プロパティ」を選択してプロパティ・パレットを開きます。
左パネル内で「フィルタ・マッピング」を選択し、「add」をクリックして、adfBindings
フィルタに新しいマッピングを定義します。これにより、「Webアプリケーション・フィルタ・マッピングの作成」ダイアログ・ボックスが表示されます。
フィルタ名として「adfBindings」を指定し、「サーブレット名」オプションをクリックし、サーブレット名としてFacesサーブレットを指定します。図74-11に示すように、ディスパッチャ・タイプとして「フォワード」および「インクルード」が選択されていることを確認します。
「OK」をクリックします。
『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』の手順に従い、ログイン・ページの作成を完了します。
自己登録ページは、WebCenter Portal自己登録タスク・フローを使用して作成するか、CreateUserHelper
で提供されるユーザーAPIとロールAPIの使用方法を示す指定のサンプルをベースにしてカスタムで構築できます。この種類の自己登録では、パブリック・ユーザーがアプリケーションに独自のログインおよびパスワードを作成するための方法が提供されます。
また、WebCenter Portalパブリック招待タスク・フローを使用して、組織の外部にいるユーザーを自己登録に招待することもできます。この2種類の自己登録ページとその実行時動作の詳細は、Oracle Fusion Middleware Oracle WebCenter Portalの管理の自己登録の有効化に関する項を参照してください。
この項には次のサブセクションが含まれます:
次に示すように、Frameworkアプリケーション内のWebCenter Portalで提供されている自己登録ページを統合できます。タスク・フローの実行時動作の詳細は、Oracle Fusion Middleware Oracle WebCenter Portalの管理の任意のユーザーの自己登録の有効化に関する項を参照してください。
WebCenter Portal自己登録タスク・フローを使用するには:
JDeveloperでPortal Frameworkアプリケーションを開くか作成します。
JSPXページを作成します。
「リソース・パレット」でタスク・フローを開いて、自己登録タスク・フローをページにドラッグ・アンド・ドロップします。
パブリック資格証明を使用してメール接続および外部アプリケーションを作成し、その外部アプリケーションをメール接続に接続します。これをメールのデフォルト接続にします。メール接続の設定方法の詳細は、Oracle Fusion Middleware Oracle WebCenter Portalの管理の「メールの管理」の章を参照してください。
自己登録タスク・フローでページを実行すると、実行時の自己登録ページが表示されます。
注意:
<serviceInstance provider="idstore.ldap.provider" name="idstore.ldap.0"> <!-- existing props ... -> <property name="user.login.attr" value="mail"/> <property name="username.attr" value="mail"/> <extendedProperty> ...... </extendedProperty> </serviceInstance> 変更後、WebCenter Portalサーバー( |
次に説明する自己登録ページの例では、ユーザーのfirstname
、lastname
、mailid
、login name
およびpassword
を受け入れる単純なページを作成します。ローカル環境内で使用するための出発点としてサンプル・ファイルを使用するか、またはCreateUserHelper
で提供されるユーザーAPIおよびロールAPIを使用して独自の自己登録ページとロジックを構築します。サンプルで提供されるユーザー・プロファイル属性のプロパティ・セットを使用すれば、必要に応じてさらに属性をユーザーに追加できます。
自己登録のサンプル・ページを作成するには:
WebCenter拡張機能バンドルのwebcenter/customportal
ディレクトリにあるsecurity-samples.zip
内のセキュリティ・サンプル・ファイルを解凍します。
CreateUserBean.java
ファイルとCreateUserHelper.java
ファイルをFrameworkアプリケーションのアプリケーション・ソース・フォルダにコピーします。
TestCreateUserPage.jspx
ファイルをpublic-html
フォルダにコピーします。
ローカル環境およびローカル要件に合せてTestCreateUserPage.jspx
ファイルを編集します。
TestCreateUserPage.jspx
ページを実行して、自己登録ページを表示します。
WebCenter Portalパブリック招待タスク・フローを使用すれば、Portal Frameworkアプリケーション内の自己登録ページにパブリック招待を作成できます。タスク・フローの実行時動作の詳細は、Oracle Fusion Middleware Oracle WebCenter Portalの管理の招待に限定した自己登録の有効化に関する項を参照してください。
自己登録招待タスク・フローを使用するには:
JDeveloperでPortal Frameworkアプリケーションを開くか作成します。
JSPXページを作成します。
「リソース・パレット」でタスク・フローを開いて、自己登録招待タスク・フローをページにドラッグ・アンド・ドロップします。
jazn-data.xml
にある次のCredentialAccessPermission
をoracle.webcenter.framework.view/-
に付与します。
jazn-data.xml
ファイルは次のようになります。
<permission> <class>oracle.security.jps.service.credstore.CredentialAccessPermission</class> <name>context=SYSTEM,mapName=o.webcenter.security.selfreg,keyName=o.webcenter.security.selfreg.hmackey</name> <actions>read,write</actions> </permission>
ページで自己登録タスク・フローを実行すると、実行時の自己登録招待ページが表示されます。
次の例では、ユーザー名と新規パスワードを受け入れる単純なパスワードのリセット・ページを作成します。ローカル環境内で使用するための出発点としてサンプル・ファイルを使用するか、またはResetPasswordHelper
で提供されるユーザーAPIおよびロールAPIを使用して、パスワードを変更するための独自のパスワードのリセット・ページとロジックを構築します。
パスワードのリセットのサンプル・ページを作成するには:
WebCenter拡張機能バンドルのwebcenter/customportal
ディレクトリにあるsecurity-samples.zip
内のセキュリティ・サンプル・ファイルを解凍します。
ResetPasswordBean.java
ファイルとResetPasswordHelper.java
ファイルをPortal Frameworkアプリケーションのアプリケーション・ソース・フォルダにコピーします。
TestResetPasswordPage.jspx
ファイルをpublic-htmlフォルダにコピーします。
ローカル環境およびローカル要件に合せてTestResetPasswordPage.jspx
ファイルを編集します。
TestResetPasswordPage.jspx
ページを実行して、パスワードのリセット・ページを表示します。
ポートレット・パーソナライズは、特定の認証されたユーザーに関連付けられています。このため、編集モードを備えたポートレットを実行すると、ポートレットのドロップダウン・メニューの「パーソナライズ」オプションは、認証されたアプリケーション・ユーザーにのみ表示されます。匿名ユーザーまたはパブリック・ユーザーには、ポートレットをパーソナライズするためのオプションはありません。ポートレットやページを作成する開発者の場合、アプリケーション用の完全なセキュリティ・モデルを作成せずに、ポートレットの編集モードをすぐにテストすることが必要になる場合があります。このようなテストを実行するには、アプリケーションにごく基本的な認証を構成して、テストの完了後にその認証を削除します。
注意: この手順は、編集モードを備えたすべてのポートレット(Omniportlet、JPSおよびPDK-Java)に有効です。 |
ユーザーsking
およびロールmanager
を作成します。ユーザーおよびロールの作成の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』を参照してください。
ADFセキュリティ・ウィザードを使用して、アプリケーションを保護します。実行する手順の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』を参照してください。ウィザードの「ログイン」ページで、「HTTP Basic認証(RFC 2617)」を選択します。これにより、アプリケーションで基本認証を使用することが指定されます。
統合WLSでページを実行し、有効なユーザーとしてログインして、ポートレットの編集モードをテストします。
ポートレットの編集モードのテストが完了したら、次の手順を実行すると、このテスト・セキュリティをすばやく削除できます。
アプリケーション・ナビゲータで、テストするポートレットが含まれるページが属するプロジェクトをクリックします。
「ツール」メニューから、「ADFセキュリティ・ウィザード」を選択します。
「ようこそ」ページが表示されたら、「次へ」をクリックします。
「すべてのADFセキュリティ設定の削除」を選択します。
ウィザードの「終了」ページが表示されるまで、「次へ」をクリックします。「終了」をクリックします。セキュリティが削除されます。セキュリティが削除されたことを確認する場合は、ブラウザを終了してからアプリケーションを再実行します。ページにアクセスしてもログインが要求されず、ポートレットのドロップダウン・メニューにパーソナライズ・オプションが表示されなくなります。
Oracle WebCenter Frameworkでは、外部アプリケーションは独自の認証プロセスを実装したアプリケーションとして定義されます。つまり、アプリケーションは、Portal Frameworkアプリケーションのシングル・サインオン・プロセスに関与しません。ID管理ソリューションが同じ場合もありますが、認証プロセスは異なります。
WebCenter Frameworkサービスが独自の認証を処理するアプリケーションとやりとりする際は、そのサービスと外部アプリケーションを関連付けることで資格証明プロビジョニングに対応できます。つまり、外部アプリケーション定義を使用することで、これらの独立した認証アプリケーションのコンテンツにアクセスする方法が提供されます。
エンドユーザー側からのシングル・サインオンを実現するには、外部アプリケーション・サービスがユーザー名、パスワードおよび外部アプリケーション用の他の資格証明を取得し、それを必要とするWebCenterサービスに提供します。次にWebCenterサービスが、その情報を使用してエンド・ユーザーのかわりにログインします。このユーザー名とパスワードの組合せは、アプリケーションがデプロイされたWebLogicドメインに構成されている資格証明ストアにセキュアに格納されます。
ユーザーは要求に応じてログイン資格証明を入力し、これらの資格証明はPortal Frameworkアプリケーション・ユーザーにマップされ、ドメインに構成された資格証明ストアに格納されます。それ以降は、認証時に資格証明ストアによってその情報が外部アプリケーションに提供されます。外部アプリケーションの資格証明が変更されないかぎり、マップされた情報が資格証明ストアから読み込まれるため、ユーザーによる資格証明の入力は1回のみです。
注意: 外部アプリケーションにログインする際、「ログイン情報を保存する」チェック・ボックスの選択を解除すると、高可用性(HA)環境でフェイルオーバーが発生した場合に、そのユーザー・セッションにプロビジョニングされた資格証明は失われます。同じユーザー・セッションでその外部アプリケーション・コンテンツにアクセスしようとすると、再び資格証明を指定するように要求されます。 |
Portal Frameworkアプリケーションで使用する外部アプリケーションを指定できるのは、Oracle JDeveloperのウィザードを介してデプロイする前、またはアプリケーション・サーバーの管理インタフェース(WebLogic Scripting ToolおよびOracle Enterprise Manager)を介してデプロイした後になります。詳細は、『Oracle Fusion Middleware管理者ガイド』を参照してください。
この項の内容は、次のとおりです。
WebCenter外部アプリケーション・サービスを使用すると、マップされたユーザー・アイデンティティを独自の認証が必要なWebアプリケーションに渡すことができます。外部アプリケーションのサポートやWebCenter外部アプリケーション・サービスで提供される資格証明マッピングを使用することで、セキュアなサービス接続の設定、およびユーザーのシームレスな自動シングル・サインオンが可能になります。
次の項で、これについて説明します。
外部アプリケーション定義でセキュアなサービス(メール・サーバーやポートレット・プロデューサなど)を使用するには、名前付き外部アプリケーションを必要なサービスの接続構成に関連付けます。たとえば、メール・サーバーへの接続では、ユーザーはメールを参照するために、有効なユーザー名とパスワードを入力する必要があります。図74-12に示すように、外部アプリケーションとIMAPサーバー接続定義を関連付けることにより、ユーザーの資格証明がメール・リクエストの一部として自動的に渡されます。
注意: 次のWebCenter Portalコンポーネントは、資格証明マッピング・サポートを使用可能にする外部アプリケーションで構成する必要があります。
WebCenter Portalサービスで使用するアイデンティティ伝播メカニズムの詳細は、第74.16項「アイデンティティ伝播メカニズム」を参照してください。 |
図74-13に示すように、ポートレット・プロデューサが独自の認証を処理するアプリケーションに依存する場合は、そのプロデューサを外部アプリケーションに関連付けることができます。これにより、プロデューサを登録する際、ポートレット内で公開されるアプリケーションにマップする適切な外部定義の選択が容易になります。
実行時には、プロデューサは、外部アプリケーションに関連付けられた情報を使用してアプリケーションに対してユーザーを認証し、結果としてそのポートレットを消費します。プロデューサ・コードは、外部アプリケーションとの認証対話を実際に実行する役割を担います。WebCenter Portal Frameworkで提供される外部アプリケーション・サポートでは、ポートレット・プロデューサへの認証に必要な情報が提供されるだけです。外部アプリケーションの使用は、Oracle PDK-JavaとWSRPの両方のプロデューサでサポートされています。
たとえば、プロデューサで、独自の認証メカニズムを備えたポートレット生成アプリケーションから株式ポートフォリオ・ポートレットを提供するとします。この場合、開発者は:
外部アプリケーションを定義します。これは、Oracle JDeveloperのウィザードまたはOracle Enterprise Managerを使用して行えます。
外部アプリケーションをポートレット・プロデューサに関連付けます。
自動シングル・サインオンでは、資格証明が資格証明ストアから取得されるため、ユーザーはアプリケーションに直接接続し、保護されたWebアプリケーションに自動的に認証されます。これにより、エンドユーザーにシームレスなシングル・サインオンが提供されます。
注意: 次については自動ログインがサポートされません。
|
WebアプリケーションへのURLを直接使用するのではなく、アプリケーションへのリンクが、外部アプリケーションの自動ログイン・サーブレット(adfextapplogin
)によってプロキシ処理されます。ユーザーが外部アプリケーションに認証されず、以前に資格証明ストアに資格証明を格納したことがない場合は、後述する資格証明プロビジョニング・ページによってパスワードが要求されます。ただし、ユーザーが以前に資格証明を定義したことがある場合、これが資格証明ストアから返され、ユーザーはアプリケーションに自動的にログインします。
プロキシURLによって、当該外部アプリケーションが参照され、外部アプリケーション定義で指定されたURLにリダイレクトされます。
/adfextapplogin?extappid=<extappid>
たとえば、myoracle.com
というWebサイトを示す外部アプリケーションを定義したFrameworkアプリケーションがある場合(外部アプリケーションのIDはmyoracle)、プロキシURLは次のようになります。
/adfextapplogin?extappid=myoracle
リンクのtarget
属性も適切に設定する必要があります。たとえば、<a href=>
を使用する場合は、ターゲットをhref
に指定するだけでなく、そのtarget
属性を適切に設定します。サーブレットに指定されたtarget属性によって、「取消」ボタンの機能が次のように決定されます。
/adfextapplogin?extappid=<extappid> [target= _self | _blank]
target=_blank
を指定した場合はリンクが新しいウィンドウで開きます。target=_self
を指定した場合はリンクが現在のウィンドウで開きます。target
パラメータが指定されていない場合はリンクが現在のウィンドウで開きます。
このパラメータは、資格証明プロビジョニング・ページの「取消」ボタンの動作方法にも影響を与えます。_blank
が指定された場合は、「取消」をクリックすると新規ウィンドウが閉じられ、_self
が指定された(またはtarget
パラメータが使用されない)場合は、ユーザーがコール元のページに戻ります。
注意: UTF8エンコードをサポートしないサイトでは、外部サイトの自動ログインはサポートされません。 |
エンドユーザーが外部アプリケーションの資格証明を定義できるようにする方法は、外部アプリケーションの使用方法によって異なります。多くのコンポーネントでは、コンポーネントが公開するタスク・フローに資格証明プロビジョニング画面が組み込まれており、それ以上の構成手順は必要ありません。ただし、これらのコンポーネントを使用してExternal Application - Change Password
タスク・フロー・コンポーネントをアプリケーションに追加できるため、エンド・ユーザーは、WebCenter Portal Frameworkアプリケーションに登録されている各外部アプリケーションに対して、適切なユーザー名およびパスワードを事前に設定できます。
External Application - Change Password
タスク・フローでは、共有資格証明を指定しないアプリケーションに定義されたすべての外部アプリケーションが表示されます(共有資格証明の詳細は、第74.13.3項「外部アプリケーションの管理」を参照してください)。このタスク・フローを表示するには、ユーザーが認証される必要があることに注意してください。
ただし、インスタント・メッセージおよびプレゼンス・サービスでは、「リソース・パレット」または「コンポーネント・パレット」からアプリケーションにExternal Application - Change Password
タスク・フロー・コンポーネントを明示的に追加する必要があります。External Application - Change Password
タスク・フロー・コンポーネントを使用したインスタント・メッセージおよびプレゼンス・サービスに対するセキュリティの構成手順の詳細は、第34.2.2項「IMP機能の設計時の追加」を参照してください。
実行時、資格証明プロビジョニング画面には、外部アプリケーション登録を介して指定されたデータ・フィールドからなるログイン・データ・フィールドが表示されます。ユーザーは、データ・フィールドに特定の外部アプリケーションに対するログイン情報を入力し、そのログイン情報が外部アプリケーションまたはサービスに渡されます。プロビジョニング画面に資格証明を入力すると、WebLogicドメインに構成された資格証明ストア内でもその資格証明が維持されることになります。
デフォルトでは、ユーザーが入力したログイン情報は資格証明ストアに保存され、以後のセッションのログインを処理します。ユーザーの資格証明に変更がないかぎり、ユーザーが再度ログイン情報を入力する必要はありません。ただし、エンド・ユーザーは、資格証明プロビジョニング・ページの「ログイン情報を保存する」チェック・ボックスの選択を解除することで、現在のセッションの情報を使用するかを選択できます。
この項では、外部アプリケーションの登録に関する情報について説明します。また、登録詳細の編集および削除のプロセスについても説明します。次のサブセクションが含まれます:
外部アプリケーション・タスク・フローを使用すると、実行時に外部アプリケーション接続を管理できます。このタスク・フローでは、ユーザーの資格証明がバックエンドで変更された場合に、すべての外部アプリケーションに対する資格証明を更新するインタフェースが提供されます。このタスク・フローを使用すれば、ランタイム管理コンソールの「ツールとサービス」タブから資格証明を更新する必要はなくなります。
Oracle JDeveloperを使用して追加可能な外部アプリケーション・タスク・フローは次のとおりです。
外部アプリケーション: このタスク・フローでは、実行時に接続を登録、変更および削除できます。
外部アプリケーション - パスワードの変更: このタスク・フローでは、実行時に外部アプリケーションのパスワードを変更できます。
Portal Frameworkアプリケーション・テンプレートを使用して作成されたアプリケーションでは、Portal Frameworkアプリケーションの管理ページ(「ツールとサービス」タブ)からこれらのタスク・フローをすぐに使用できます。詳細は、Oracle Fusion Middleware Oracle WebCenter Portalの管理のPortal Frameworkアプリケーションのサービス、ポートレット・プロデューサおよび外部アプリケーションの構成に関する項を参照してください。
また、他のタスク·フローのように、アプリケーション・ページに外部アプリケーション・タスク·フローを追加することができます。Portal Frameworkアプリケーション・テンプレートを使用せず、したがって管理ページがプロジェクトの一部でない場合、これは特に有用です。特別な権限は、これらのタスク・フローを介して外部アプリケーション接続を管理したり、表示するために必要です。
AppConnectionManager - このロールを持つユーザーは、実行時に外部アプリケーション接続を登録、変更および削除できます。
AppConnectionViewer - このロールを持つユーザーは、実行時に外部アプリケーション接続を表示できます。このロールは、ログインするすべてのユーザー(authenticated-roleを持つユーザー)にデフォルトで付与されます。
デフォルトでは、管理者ロールを持つユーザーが外部アプリケーションを管理できます。これらのタスク・フローを介して他のユーザーに接続を管理させる場合は、そのユーザーにAppConnectionManagerロールを付与する必要があります。
外部アプリケーション・タスク・フローを追加するには:
タスク・フローを追加するアプリケーションで、JSFページを作成するか、開きます(第15.2項「WebCenter Portal Frameworkアプリケーションでのページの作成」を参照)。
リソース・パレットで「カタログ」、「WebCenter Portal - サービス・カタログ」、「タスク・フロー」と開きます。
「リソース・パレット」から「外部アプリケーション」をドラッグし、それをaf:form
begin
タグとend
タグの間のページにドロップします。
「外部アプリケーション」タスク・フロー(af:region - # {bingings.extapp1.regionModel}
)の後、「リソース・パレット」から「外部アプリケーション - パスワードの変更」をドラッグし、それをaf:form
begin
タグとend
タグの間のページにドロップします。
必要に応じて、AppConnectionManagerロールを1人以上のテスト・ユーザーに付与します。
テスト・ユーザーTEST_EXTAPP
を追加します。
AppConnectionManagerロールを付与します。
ユーザーを追加してこのロールを付与する方法の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』のADFエンティティ・オブジェクトへの権限の付与に関する項を参照してください。
ページを保存し、実行します。管理者として、または前の手順で定義したTEST_EXTAPP
ユーザーとしてログインします。図74-14に示す画面が表示されます。
注意: 実行時、アプリケーション管理者は、WebCenter Portal管理を使用してAppConnectionManagerロールおよびAppConnectionViewerロールをユーザーに付与できます(Oracle Fusion Middleware Oracle WebCenter Portalの管理のアプリケーション・ロールへのメンバーの追加に関する項を参照)。または、システム管理者は、Fusion Middleware Controlを使用してAppConnectionManagerロールおよびAppConnectionViewerロールを付与できます(Oracle Fusion Middleware Oracle WebCenter Portalの管理のFusion Middleware Controlを使用したアプリケーション・ロールの付与に関する項を参照)。 |
この項では、Oracle JDeveloperでの外部アプリケーションの登録と、登録詳細の編集および削除について説明します。次のサブセクションが含まれます:
外部アプリケーションの登録ウィザードを使用して、外部アプリケーションへの認証に必要なデータ・タイプ(ログイン・フィールド名など)を指定し、その情報を格納します。
外部アプリケーションをOracle JDeveloperで登録するには:
アプリケーション・ナビゲータで、WebCenter Portal Frameworkアプリケーションまたはプロジェクトを右クリックし、ポップアップ・メニューから「新規」を選択します。
「新規ギャラリ」で、「General」ノードの下の「External Applications」を選択します。
右ペインで「外部アプリケーション」を選択し、「OK」をクリックします。
これにより、外部アプリケーションの登録ウィザードが表示されます。
「名前」ページで「外部アプリケーションの作成場所」オプションを使用して、他のPortal Frameworkアプリケーションで外部アプリケーションを再利用するかどうかを指定します。「アプリケーション・リソース」を選択して、登録されているPortal Frameworkアプリケーションにのみ外部アプリケーションを利用可能にするか、「リソース・パレット」を選択して、リソース・パレットからOracle JDeveloperで作成する任意の新しいPortal Frameworkアプリケーションに外部アプリケーションを利用可能にします。
「リソース・パレット」を選択すると、リソース・パレットの「IDE接続」の下に外部アプリケーション接続が表示されます。アプリケーションで使用する場合は、リソース・パレットで外部アプリケーションを右クリックして、「アプリケーションに追加」をクリックします。
「名前」フィールドに、アプリケーションを識別する一意の名前を入力します。
この名前は、WebCenter Portal Frameworkアプリケーション内および他の接続間で一意である必要があります。このフィールドは後から変更できないことに注意してください。
「表示名」フィールドに、資格証明プロビジョニング画面でエンド・ユーザーに表示されるアプリケーション名を入力します。
第74.13.3.2.2項「外部アプリケーションの登録詳細のOracle JDeveloperでの編集」で説明しているように、この表示名はいつでも変更できます。このフィールドを空白のままにすると、デフォルトで、「名前」フィールドの値が表示名に設定されます。
「次へ」をクリックします。
「一般」ページの「ログインURL」フィールドに、HTMLログイン・ページの送信先のURLを入力します。
このURLを取得するには、アプリケーションのログイン・フォームのHTMLソースを表示します。
「ユーザー名/IDフィールド名」フィールドに、アプリケーションでユーザー名フィールドに使用されるラベル(User Name
など)を入力します。
「パスワード・フィールド名」フィールドに、アプリケーションでパスワード・フィールドに使用されるラベル(Password
など)を入力します。
「認証方式」リストから、アプリケーションのログイン方式を選択します。
次のうちから選択します。
GET
サーバーにページ・リクエストを送信します。ログインURLの一部としてログイン資格証明を送信します。
POST
フォーム本体内でログイン資格証明を送信します。
「次へ」をクリックします。
「追加フィールド」ページで、外部アプリケーションのログイン・フォームとともに送信される追加フィールドの名前および値を入力します。
「フィールドの追加」ボタンをクリックして、入力フィールドを作成します。
フィールド名
外部アプリケーションのHTMLログイン・フォームへのユーザー入力を必要とする追加フィールドに対して一意の名前を入力します。
フィールド値
対応するフィールド名のデフォルト値を入力します。
ユーザーに表示
これを選択すると、フィールドが外部アプリケーションのログイン画面に表示されます。フィールドを表示しない(選択しない)場合、すべてのユーザーで外部アプリケーションへのログインに使用されるデフォルト値を指定する必要があります。値がユーザーに固有の場合、フィールドをユーザー・プロビジョニング・ページに表示する必要があります。
注意: 「フィールドの削除」オプションを使用すると、選択した行を削除できます。 |
「次へ」をクリックします。
すべての認証ユーザーが特定の資格証明を使用して外部アプリケーションにアクセスするようにするには、「共有資格証明」ページで「共有資格証明の指定」チェック・ボックスを選択し、「ユーザー名」および「パスワード」を指定します。認証ユーザーは、外部アプリケーションにアクセスする際、資格証明の入力を要求されなくなります。
「次へ」をクリックします。
すべての認証されていない(パブリック)ユーザーが外部アプリケーションのアクセスに使用する資格証明を指定するには、「パブリック資格証明」ページで「パブリック資格証明の指定」チェック・ボックスを選択し、「ユーザー名」および「パスワード」を指定します。これは、いずれかのWebCenter Portalコンポーネント(ドキュメント・ライブラリ、インスタント・メッセージ、プレゼンスなど)を介して外部アプリケーションのコンテンツにアクセスする場合および、タスク・フローがパブリック・ページに配置される場合に必要です。
「終了」をクリックして、外部アプリケーションを登録します。
外部アプリケーションの登録後、エンド・ユーザーがユーザー名とパスワードを定義できるようにアプリケーションを構成する必要があります。これを行うには、External Application - Change Password
タスク・フロー・コンポーネントをアプリケーションにドロップします。これによって、エンドユーザーは、WebCenter Portal Frameworkアプリケーションに登録された各外部アプリケーションに対して適切なユーザー名とパスワードを事前に設定できます。
エンド・ユーザーがユーザー名とパスワードを定義できるようにアプリケーションを構成するには、次の手順を実行します:
ViewControllerプロジェクトのJSFページを開きます。
リソース・パレットから、「カタログ」、「WebCenter Portal - サービス・カタログ」、「タスク・フロー」の順に開きます。
External Application - Change Password
タスク・フロー・コンポーネントをページにドラッグします。
要求されたら、タスク・フローの作成方法として「リージョン」を選択します。
このタスク・フローが認証ユーザーからのみアクセスできるようにページを保護します
外部アプリケーションに指定されている登録詳細を修正するには、「外部アプリケーションの登録情報の編集」ウィザードを使用します。
外部アプリケーションの登録詳細を編集するには:
アプリケーション・ナビゲータで、「コネクション」ノードの下の「アプリケーション・リソース」ペインから外部アプリケーションを右クリックし、ポップアップ・メニューから「プロパティ」を選択します。
外部アプリケーションの編集ウィザードでリンクをクリックしてページを表示し、その値を修正します。
次のうちから選択します。
名前
一般
追加フィールド
共有資格証明
パブリック資格証明
詳細は、第74.13.3.2.1項「外部アプリケーションのOracle JDeveloperでの登録」を参照してください。
「OK」をクリックして、変更を保存してウィザードを終了するか、「取消」をクリックして、保存せずにウィザードを終了します。
外部アプリケーションの登録詳細を削除するには、次の手順を実行します:
アプリケーション・ナビゲータで、「コネクション」ノードの下の「アプリケーション・リソース」ペインから外部アプリケーションを右クリックし、ポップアップ・メニューから「削除」を選択します。
あるいは、アプリケーション・ナビゲータで外部アプリケーションを選択し、「編集」メニューから「削除」を選択します。
「外部アプリケーションの削除」ダイアログ・ボックスで、「はい」を選択します。
外部アプリケーションが関連付けられているポートレット・プロデューサなどのコンポーネントへの参照も削除することをお薦めします。これを行わないと、コンポーネントで外部アプリケーションとの通信が試みられるため、実行時にエラーになる場合があります。
Oracle JDeveloperで外部アプリケーションの登録詳細の作成、編集および削除が行えるのと同様に、Enterprise Managerでもこれを行うことができます。詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの使用』の「外部アプリケーションの使用」の章を参照してください。
Oracle JDeveloperおよびEnterprise Managerと同様に、WebLogic Scripting Tool (WLST)のコマンドを使用して外部アプリケーションの登録詳細を作成、編集および削除できます。詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの使用』の「外部アプリケーションの使用」の章を参照してください。
Secure Sockets Layer (SSL)通信では、認証局によって発行された信頼できる証明書を必要とし、認証局は発行または署名した証明書の認証を保証します。広く受け入れられている認証局は、キーストア(cacerts
ファイル)にリストされていて、<
JDEV_HOME
>\jdk\jre\lib\security
ディレクトリで利用可能です。ポートレット・プロデューサが、広く受け入れられていない認証局で発行されたセキュリティ証明書を使用してこのプロデューサからポートレットにアクセスしようとする場合、信頼していない認証局から発行されたセキュリティ証明書であることを知らせるために、セキュリティ・アラートが表示されます。これは、キーストアで証明書が利用できないことを意味します。そのようなポートレットにアクセスするたびにプロンプトが表示されないようにするには、キーストアにこの証明書を登録する必要があります。
証明書をキーストアに登録するには、次の手順を実行します:
JDEV_HOME
\jdk\jre\lib\security
にナビゲートします。
cacerts
ファイルをバックアップします。
Internet ExplorerでプロデューサURLにアクセスして、証明書を取得します。
注意: FireFoxの最近のバージョンでは、証明書をエクスポートする手段が備わっていません。 |
図74-15に示すように、「セキュリティの警告」ダイアログ・ボックスで、「証明書の表示」をクリックします。
「証明書」ダイアログ・ボックスで、「証明のパス」タブをクリックします。
図74-16に示すように、デフォルトでダミーの子証明書が選択されます。ルート証明書を選択し、「証明書の表示」をクリックします。
「詳細」タブをクリックし、「ファイルにコピー」をクリックします。
図74-17に示すように、「証明書のエクスポート ウィザード」で、「エクスポートするファイル」が表示されるまで、デフォルト設定を受け入れて「次へ」をクリックします。
「ファイル名」フィールドに<
JDEV_HOME
>\jdk\jre\lib\security\root.cer
を入力し、「次へ」をクリックします。
「終了」をクリックします。
コマンド・プロンプトで、デフォルトのディレクトリを<
JDEV_HOME
>\jdk\jre\lib\security
に設定し、次のコマンドを実行します。
keytool -import -file root.cer -keystore cacerts -storepass changeit
このコマンドを実行することにより、root.cer
証明書がキーストアにインポートされます。
プロンプトでy
を入力して、この証明書を信頼することを確認します。
証明書を使用してcacerts
ファイルが更新されていることを確認します。
ポートレットおよびカスタマイズ可能コンポーネントに対する各アクションは、デフォルトでは保護されていません。ポートレットまたはカスタマイズ可能コンポーネントをカスタマイズできるかどうかは総じて、ページ権限から継承されます。ポートレットまたはカスタマイズ可能コンポーネント内に詳細なアクティビティの権限を付与する場合は、ページ・レベルのセキュリティ継承を無視し、必要なアクションに対してセキュリティを直接定義できます。
ユーザーがポートレットまたはカスタマイズ可能コンポーネントに対してアクションを実行できるかどうかは、adf-config.xml
ファイル内のアプリケーション・ワイドなスイッチの値(enableSecurity
)に基づくページ・セキュリティから継承されます。アプリケーションの作成中にWebCenter Portal Frameworkアプリケーション・テンプレートを選択した場合、adf-config.xml
ファイルは<
APPLICATION_NAME
>/.adf/META-INF
ディレクトリ内に配置されています。enableSecurity
要素は、デフォルトではadf-config.xml
内で使用できません。ポートレットおよびカスタマイズ可能コンポーネントに対するページ・レベルのセキュリティ継承をオーバーライドまたは拡張するには、例74-1および例74-2に示すように、ポートレット・セキュリティおよびカスタマイズ可能コンポーネント・セキュリティのセクションをadf-config.xml
ファイルに追加し、これらのセクションのenableSecurity
要素をtrue
に設定します。
例74-1 adf-config.xmlのポートレット・セキュリティ・セクション内のenableSecurity要素
<!-- ============================================================================== PORTLETS ACTIONS SECURITY ============================================================================== --> <adfp:adf-config-child xmlns:adfp="http://xmlns.oracle.com/adfp/portlet"> <adfp:enableSecurity value="true"/> <adfp:actionsCategory> .......................................... </adfp:adf-config-child>
例74-2 adf-config.xmlのカスタマイズ可能コンポーネント・セキュリティ・セクション内のenableSecurity要素
<!--
==============================================================================
CUSTOMIZABLE COMPONENTS ACTIONS SECURITY
==============================================================================
-->
<cust:customizableComponentsSecurity
xmlns:cust="http://xmlns.oracle.com/adf/faces/customizable/config
">
<cust:enableSecurity value="true"/>
<cust:actionsCategory>
..........................................
</cust:customizableComponentsSecurity>
ポートレットおよびカスタマイズ可能コンポーネントに対するアクションのセキュリティは、次のレベルで実装できます。
ページ・レベル: ポートレットおよびカスタマイズ可能コンポーネントがページ・レベルの権限を継承するように、これらのコンポーネントのセキュリティを定義できます。これがデフォルトの動作です。
デフォルトでは、ポートレットおよびカスタマイズ可能なコンポーネントは、パーソナライズやカスタマイズなどの定義されたページ・レベルの権限から許容されるアクションを継承します。つまり、このページにカスタマイズ権限を持つユーザーは、そのページ上のコンポーネントのカスタマイズ・アクションに対する権限を持ちます。enableSecurity
要素を使用すると、セキュリティ継承動作をオーバーライドできます。この要素は、次のいずれかの値を取ります。
true
: true
(デフォルト)に設定した場合、ユーザーがコンポーネントを変更できるかどうかは、まずページ権限から決定され、次に、その権限のタイプに定義されている現在のアクションのセットに応じて調整されます。ユーザーにカスタマイズ権限がある場合は、カスタマイズ・カテゴリを構成するアクション(移動やカスタマイズなど)がユーザーに利用可能になります。ただし、これらのアクションは、adf-config.xml
ファイル内に定義されているアクションによってオーバーライドされます。たとえば、ページ設計者は、エンドユーザーがポートレットはカスタマイズできるが、ページ・レイアウトはカスタマイズできないようにすると考えるとします。enableSecurity
をtrue
に設定することにより、ページ設計者はユーザーにまず、ページに対するカスタマイズ権限を強制的に持たせます。カスタマイズ可能コンポーネントに対してcustomizeActionsCategory
をfalse
に設定すると、ページ・レイアウトはカスタマイズできなくなりますが、ポートレットのカスタマイズは可能です。(customizeActionsCategory
のデフォルトはtrue
なので、ポートレットに対してこれを明示的に設定する必要はありません。)
false
: false
に設定した場合、すべてのアクションがユーザーに選択可能になります。adf-config.xml
で構成されたアクションとユーザーのページ権限は無視されます。
アクション・カテゴリ・レベル: ポートレットまたはカスタマイズ可能コンポーネントの、特定のカテゴリに属するすべてのアクションに対してセキュリティを定義できます。
adf-config.xml
ファイル内にactionsCategory
要素を追加すると、複数のアクションに対するセキュリティを同時に定義できます。有効化したactionCategory
属性に基づいて、ポートレットまたはカスタマイズ可能コンポーネントに適切な権限が設定されます。
アクション・レベル: ポートレットまたはカスタマイズ可能コンポーネントの各アクションに対してセキュリティを定義できます。
adf-config.xml
ファイル内でactions
要素を使用すると、各アクションを有効化または無効化できます。有効化したactions
属性に基づいて、ポートレットまたはカスタマイズ可能コンポーネントに適切な権限が設定されます。
注意:
|
第74.15.1項「ポートレット・セキュリティ」では、ポートレットに対するセキュリティをアクション・カテゴリ・レベルおよびアクション・レベルで実装する方法について説明します。カスタマイズ可能なコンポーネントに対するアクションのセキュリティをアプリケーション・レベルで定義する方法の詳細は、第22.5項「Panel CustomizableおよびShow Detailコンポーネント・アクションでのアクション・レベルの制限の適用」を参照してください。
adf-config.xml
ファイルのポートレット・セキュリティ・セクションでenableSecurity
をtrue
に設定すると、ポートレットに対するアクションをアプリケーション・レベルでページから継承する場合に、ポートレットのセキュリティを定義できます。true
の値は、ユーザーの権限がページ権限から決定され、次に指定されたactionsCategory
要素とactions
要素に応じて補完されることを示します。アクション・カテゴリおよび各アクションを定義することにより、特定のページ権限内で使用可能な各アクションを公開するかどうかを制御できます。
前述のような様々なレベルでポートレットのアクションにセキュリティを実装するには、次の各項でセキュリティ設定を定義する必要があります。
adf-config.xml
ファイルのポートレット・セキュリティ・セクション内にactionsCategory
要素を追加すると、アプリケーション内のポートレット上に公開されるアクション・グループを定義できます。有効化したactionsCategory
属性に基づいて、ポートレットに適切な権限が設定されます。表74-3に、様々なactionsCategory
属性と、デフォルトでサポートされるポートレット・アクションを示します。
表74-3 actionsCategory属性とポートレット・アクションのマッピング
属性値 | サポートされるアクション |
---|---|
viewActionsCategory |
Render isHelpModeAvailable isNormalModeAvailable isAboutModeAvailable isPreviewModeAvailable isDetailModeAvailable isLinkModeAvailable isPrintModeAvailable |
customizeActionsCategory |
showMoveAction showRemoveAction isCustomizeModeAvailable showMinimizeAction showMaximizeAction isConfigModeAvailable |
personalizeActionsCategory |
isPersonalizeModeAvailable |
例74-3に、adf-config.xml
ファイルのポートレット・セキュリティ・セクションに追加できるactionsCategory
エントリを示します。この例では、カスタマイズを禁止するためにcustomizeActionsCategory
がfalse
に設定されています。これらの要素の値にはExpression Language (EL)を使用できます。
例74-3 ポートレット・セキュリティ・セクション内のactionsCategory要素
<!-- ============================================================================== PORTLETS ACTIONS SECURITY ============================================================================== --> <adfp:adf-config-child xmlns:adfp="http://xmlns.oracle.com/adfp/portlet"> <adfp:enableSecurity value="true"/> <adfp:actionsCategory> <adfp:actionCategory name="viewActionsCategory" value="true"/> <adfp:actionCategory name="customizeActionsCategory" value="false"/> <adfp:actionCategory name="personalizeActionsCategory" value="true"/> </adfp:actionsCategory> <adfp:actions> .......................................... </adfp:actions> </adfp:adf-config-child>
adf-config.xml
ファイルのポートレット・セキュリティ・セクション内にactions
要素を使用すると、各ポートレット・アクションを有効化または無効化できます。有効化したaction
属性に基づいて、ポートレットに適切な権限が設定されます。
例74-4に、adf-config.xml
ファイルのポートレット・セキュリティ・セクションに追加できるactions
エントリの例を示します。これらの要素の値にはELを使用できます。この場合、isCustomizeModeAvailable
をfalse
に設定することによって、カスタマイズを禁止しています。
例74-4 ポートレット・セキュリティ・セクション内のactions要素
<!-- ============================================================================== PORTLETS ACTIONS SECURITY ============================================================================== --> <adfp:adf-config-child xmlns:adfp="http://xmlns.oracle.com/adfp/portlet"> <adfp:enableSecurity value="true"/> <adfp:actionsCategory> .......................................... </adfp:actionsCategory> <adfp:actions> <adfp:action name="Render" value="true"/> <adfp:action name="showMoveAction" value="true"/> <adfp:action name="isCustomizeModeAvailable" value="false"/> <adfp:action name="isPersonalizeModeAvailable" value="true"/> </adfp:actions> </adfp:adf-config-child>
ELを使用した営業時間外のポートレットのカスタマイズの禁止
たとえば、通常の営業時間外にはポートレットのカスタマイズができないように構成されたアプリケーションでは、継承されたポートレット・セキュリティをオーバーライドする必要があります。このためにはまず、例74-5に示すようなメソッドが含まれるマネージドBean(たとえば、appBusinessRules
という名前のマネージドBean)を作成する必要があります。
例74-5 appBusinessRulesマネージドBean内に定義されたInsideBizHoursメソッド
public boolean isInsideBizHours() { Calendar rightNow = Calendar.getInstance(); int currentHr = rightNow.get(rightNow.HOUR_OF_DAY); // Do not allow customize operation outside of standard business hours if ((currentHr > 9) && (currentHr < 17)) return true; else return false; }
その後は、例74-6に示すように、adf-config.xml
ファイルのポートレット・セキュリティ・セクション内のactionsCategory
要素からこのマネージドBeanを参照できます。
例74-6 adf-config.xmlファイル内で参照されるInsideBizHoursメソッド
<adfp:adf-config-child xmlns:adfp="http://xmlns.oracle.com/adfp/portlet"> <adfp:enableSecurity value="true"/> <adfp:actionsCategory> <adfp:actionCategory name="customizeActionsCategory" value="#{appBusinessRules.InsideBizHours?"true":"false"}"/> </adfp:actionsCategory> </adfp:adf-config-child>
この例では、アプリケーションが営業時間内に実行される場合のみ、customizeActionsCategory
がtrue
に設定されます。この時間外は、ページに対する権限がユーザーに付与されていても、ポートレットはカスタマイズできません。明示的に定義されていないその他のカテゴリはすべて、ページから継承されます。
ELを使用した、企業ネットワーク外のポートレットのパーソナライズおよびカスタマイズの禁止
この例では、ユーザーがアプリケーションに企業プロキシ・サーバーを介してアクセスしたか、それとも企業ネットワーク内部からアクセスしたかを判別するために、マネージドBeanによってリクエストのIPアドレスが確認されます。この単純な例では、リクエストにプロキシ・サーバーのIPアドレスが含まれていれば、そのリクエストは企業ネットワークの外部から発生したものと想定します。IPアドレスが危険にさらされることがあるため、一般には、完全にセキュリティの基礎をIPアドレスにすることはお薦めしません。このために、例74-7に示すメソッドをマネージドBeanに追加する必要があります。
例74-7 appBusinessRulesマネージドBean内に定義されたInsideCorpNetworkメソッド
public boolean isInsideCorpNetwork() { // Do not allow personalize and customize operations // for requests that go through the corporate proxy FacesContext ctx = FacesContext.getCurrentInstance(); ExternalContext ectx = ctx.getExternalContext(); HttpServletRequest myrequest = (HttpServletRequest) ectx.getRequest(); String currentIP = myrequest.getRemoteAddr(); if (currentIP.equals(getProxyServerIP())) return false; else return true; }
その後は、例74-8に示すように、adf-config.xml
ファイルのポートレット・セキュリティ・セクション内のactionsCategory
要素からこのマネージドBeanを参照できます。
例74-8 adf-config.xmlファイル内で参照されるInsideCorpNetworkメソッド
<adfp:adf-config-child xmlns="http://xmlns.oracle.com/adfp/portlet"> <adfp:enableSecurity value="true"/> <adfp:actionsCategory> <adfp:actionCategory name="customizeActionsCategory" value="#{appBusinessRules.InsideCorpNetwork?"true":"false"}"/> <adfp:actionCategory name="personalizeActionsCategory" value="#{appBusinessRules.InsideCorpNetwork?"true":"false"}"/> </adfp:actionsCategory> </adfp:adf-config-child>
この例では、アプリケーションのリクエストのIPアドレスが企業プロキシのIPアドレスと一致しない場合のみ、customizeActionsCategory
およびpersonalizeActionsCategory
がtrue
に設定されます。ここでは、内部リクエストが有効なクライアントIPアドレスを持っていることを前提としています。明示的に定義されていないその他のカテゴリはすべて、ページから継承されます。
次の表は、エンド・ユーザーのアイデンティティを様々な情報ソースに伝播するためにWebCenterサービスによって使用されるアイデンティティ伝播メカニズムを示しています。この情報ソースからコンテンツがPortal Frameworkアプリケーションに統合されます。
可能なかぎり、アイデンティティ伝播にはWS-Securityを使用してください。従来の制限や事前定義されたストア固有の標準または仕様に起因してWS-Securityを使用できない場合は、外部アプリケーション・サービスにより提供される資格証明マッピング機能をプライマリ・メカニズムとして使用し、個別のセキュリティ・プロバイダを使用してユーザーのリモート・アプリケーションの資格証明を取得します。WS-Securityに関する詳細は、『Oracle Fusion Middleware Webサービスのためのセキュリティおよび管理者ガイド』を参照してください。外部アプリケーションの詳細は、第74.13項「外部アプリケーションの使用」を参照してください。
表74-4 アイデンティティ伝播メカニズム
サービス | 接続タイプ | アイデンティティ伝播メカニズム |
---|---|---|
ディスカッション |
Jive |
Oracle WS-Security |
お知らせ |
ディスカッション・フォーラムを参照 |
|
ドキュメント |
コンテンツ・サーバー |
ソケット接続を使用した専用のアイデンティティ伝播メカニズム。SSLの相互認証を使用することも、ソケットのIP認証をクリアする(つまり外部アプリケーションを使用する)こともできます。 |
ファイル・システム |
n/a |
|
Portal 10g/11g |
JSR-170(外部アプリケーション) |
|
Day Adapter |
JSR-170(外部アプリケーション) |
|
電子メール |
電子メール接続 |
外部アプリケーション |
LDAP接続 |
外部アプリケーション |
|
イベント - 個人 |
Exchangeサーバー接続 |
外部アプリケーション |
外部アプリケーション |
ブラウザからのHTTPリクエスト |
外部アプリケーション |
IMP |
Microsoft Live Communication Server (LCS) |
SOAP、Webサービスの呼出し。 外部アプリケーション |
ポートレット・プロデューサ |
WSRPプロデューサ (セキュア) |
Oracle WS-Security (WSRP仕様による推奨) |
WSRPプロデューサ (非セキュア) |
SOAPメッセージ内のWSRP userContext (WSRP仕様) |
|
JPDKプロデューサ (外部アプリケーション) |
外部アプリケーション JPDKペイロードにはユーザー情報が含まれており、ProviderUser内のプロデューサに伝達されます。 この情報には、マップされたユーザー名とパスワードも含まれています。 (専用、レガシー) |
|
JPDKプロデューサ (非セキュア) |
レンダリング・リクエスト内のユーザー名 (専用、レガシー) |
|
検索 |
Secure Enterprise Search (SES) |
Webサービス呼出し |
Wiki |
ブラウザ接続 |
SSOメカニズム - OSSO/OAMまたは他のWLSでサポートされるSSOメカニズム |
ワークリスト・サービス |
BPEL接続 |
Webサービス呼出し Oracle WS-Security |
Web Services for Remote Portlets (WSRP)仕様では、コンシューマとポートレット・プロデューサの間でセキュアなアイデンティティ伝播をするためにWeb Services Security (WS-Security)を利用できることが示されています。ただし、WSRPそれ自体が、ポートレット・プロデューサへのエンド・ユーザーのアイデンティティのセキュアなアイデンティティ伝播を提供するわけではありません。WSRP仕様は、セキュアなアイデンティティ伝播に対しては明示的に他のセキュリティ標準に準拠しており、使用する必要のある特定のWS-Securityプロファイルやオプションを扱うことはありません。セキュアなメカニズムがない場合、WSRPでは、ユーザー・カテゴリという概念が定義されています。ユーザー・カテゴリは、JSR168ポートレットで使用されるセキュリティ・ロールに類似したロールにマップできます。WSRPとWS-Securityを組み合せて使用することにより、エンドツーエンドのセキュリティが確実になります。
この項の内容は、次のとおりです。
WS-SecurityなしでWSRPを使用すると、SOAPメッセージ内のuserContext
構造に、ユーザー・プロファイル情報とユーザー・カテゴリ情報が含まれます。この情報はセキュアでないと考えられるため、パーソナライズ機能およびカスタマイズ機能以外には使用しないでください。機密的なリソースの認可には使用しないでください。この情報は、JSR168 APIのisUserInRole(
role
)
およびgetUserPrincipal
内にも公開されます。例74-9内のコードは、サンプル・ポートレットのマークアップ・レンダリング・コードでisUserInRole
APIを使用して、表示するコンテンツを決定する方法を示しています。
例74-9 isUserInRole(role) API
private void doViewHtml(RenderRequest request, RenderResponse response) throws PortletException, IOException { // To do: markup the required content. PrintWriter out = response.getWriter(); out.print("<p>Welcome"); out.println("</p>"); if (request.isUserInRole("moderator")) {out.println("<p>MODERATOR</p>" );} else {out.println("<p>not moderator</p>" );} if (request.isUserInRole("participant")) {out.println("<p>PARTICIPANT</p>" );} else {out.println("<p>not participant</p>" );} if (request.isUserInRole("viewer")) {out.println("<p>VIEWER</p>" );} else {out.println("<p>not viewer</p>" );} }
WS-SecurityをWSRPとともに利用すると、ユーザーのアイデンティティは、WS-Securityヘッダー内でSOAPメッセージ本体の外部に伝播されます。これは、ユーザー名トークン形式を使用するユーザー・アサーションであり、コンシューマを認証してアサーションの整合性を保つためにデジタル署名されます。
このメカニズムを使用すると、JSR 168 APIのisUserInRole
およびgetUserPrincipal
が、SOAPメッセージのuserContext
内の情報ではなく、WS-Security認証から生成されたセキュリティ・コンテキストに基づいて確立されます。
また、プロデューサのデフォルト・ユーザー接続パラメータを使用して匿名(PUBLICなど)クライアントがデフォルト・ユーザーにマップされる場合は、WSRPプロデューサをstrict-authentication
で構成し、権限付与をポリシー・ストアに追加する必要があります。詳細は、Oracle Fusion Middleware Oracle WebCenter Portalの管理のOracle PDK-Javaプロデューサの登録に関する項を参照してください。
WS-Securityを使用すると、Frameworkアプリケーションおよびそれにより消費されるプロデューサのセットの構成と管理が複雑になります。しかし、状況により使用が許される場合、それは、Frameworkアプリケーションにより公開される情報のセキュリティを保証する、SOAアーキテクチャの重要な要素となります。
Oracle WebCenter Frameworkでは、(セキュリティ・トークンおよびメッセージ本体をデジタル署名して真正性と整合性を保証するための)次のトークン・プロファイルがサポートされています。
パスワードなしのユーザー名トークン
パスワード付きユーザー名トークン
SAMLトークン(プロデューサがサブジェクト・アサーションを確認するために使用する送信者保証方式を使用)
セキュリティ・トークンおよびSOAPメッセージ本体をデジタル署名すると、次の目的を達成できます。
コンシューマ認証
ポートレット・プロデューサで機密的な情報(給与明細情報など)を生成する場合、正当なコンシューマからの情報表示リクエストにのみ応答する必要があります。
WS-Securityを使用し、コンシューマによってセキュリティ・トークンおよびメッセージ本体がデジタル署名されるように設定すれば、プロデューサは、正当なコンシューマの公開鍵を使用して署名を検証できます。署名を検証できない場合は、リクエストが不正なコンシューマから発行された可能性があります。デジタル署名の検証を必須にすることで、機密的な情報は正当なコンシューマにのみ送信されます。
アサーションおよびメッセージ整合性
セキュリティ・トークンおよびメッセージ本体をデジタル署名すると、Webサービスのリクエストを発行したコンシューマのアイデンティティを検証するほかにも、トークンとメッセージが改ざんされていないことが保証されます。これにより、介入者攻撃(正当なりクエストが妨害され、セキュリティ・トークン内のユーザー名が別のユーザー名に置換されて、他のユーザーに対して返される給与情報が表示される可能性がある)などの問題が回避されます。トークンをデジタル署名すると、改ざんが不可能になります。トークンを変更すると、プロデューサ・エンドで署名を検証できなくなり、リクエストされた給与情報ではなくSOAPフォルトが返されます。
サポートされているプロデューサ
WS-Security実装は、Oracle WebCenter Suite WSRPコンテナによってサポートされています。その他のWSRPベンダーが、ユーザー名トークンとSOAPメッセージ本体に基づくXMLデジタル署名を使用した、パスワードを使用しないユーザー名トークンのWS-Security構成をサポートしている場合もあります。
セキュリティ・ドメインの意味
この項の説明に従ってセキュアなアイデンティティ伝播を使用する場合は、コンシューマ(Frameworkアプリケーション)に認証されたユーザーのユーザー名が、資格証明の再マッピングや提供なしでプロデューサに伝播されます。ここでは、プロデューサがこのユーザー名を認識していて、関連付けられたセキュリティ・ドメイン内でこのユーザーを見つけられることが暗黙の前提です。したがって、この構成の管理を簡略化するために、コンシューマとプロデューサが同じセキュリティ・プロバイダ(IDストア)を共有していることを確認することを強くお薦めします。
図74-18に、全体的なWSRPポートレット・セキュリティ・アーキテクチャをまとめています。
WS-Securityのプロデューサを構成する前に、まず、第61章「ポートレット・プロデューサのデプロイ」で説明されている手順を実行して、標準準拠のポートレット・プロデューサをOracle WebCenter Suite WSRPコンテナにデプロイする必要があります。
プロデューサをデプロイした後は、次の手順を実行して、WS-Securityのプロデューサを構成します。
プロデューサ・エンドポイントへのポリシーの添付
キーストアの作成
プロデューサの構成
コンシューマの構成
これらの手順は、Oracle Fusion Middleware Oracle WebCenter Portalの管理の「WS-Securityの構成」の章で説明されています。
この項では、PDK-Javaポートレットで使用できるセキュリティ・サービスについて説明します。
この項で参照されているPDKクラスの詳細は、次の「Portlet Development」ページの「Java Doc API」をクリックして、OTNのJavaDocを参照してください
http://www.oracle.com/technology/products/ias/portal/portlet_development_10g1014.html
次の前提は、この項でのタスクを実行するためのものです。
第60.2項「PDK-Javaポートレットの作成」を読み終えて理解していること。
ウィザードで作成したポートレットがページに正常に追加されている。
この項では、PDK-Javaポートレット・プロデューサの保護に使用できる主な機能について説明します。
ユーザーが初めてログインするときは、アイデンティティを確認してアクセス権限を取得するためにパスワードを入力する必要があります。
ユーザーが認証されると、プロデューサ・コードは、次のように、HttpServletRequest
オブジェクトにあるPortletRenderRequest
から、認証されたユーザーのアイデンティティにアクセスできます。
PortletRenderRequest pr = (PortletRenderRequest)request.getAttribute (HttpCommonConstants.PORTLET_RENDER_REQUEST); String userName = pr.getUser().getName();
このユーザー・アイデンティティを機密性の高い操作に使用する場合、基本的なメッセージ認証を使用してアイデンティティ・アサーションの整合性を確認するようにこのプロデューサが構成されているかどうかを確認することが重要です。
認可によって、特定のユーザーがポートレットの表示または対話を行えるかどうかが判断されます。ポートレットへのアクセスを制限する方法の詳細は、第74.18.4項「ポートレットのセキュリティ・マネージャ」を参照してください。
これまでに説明したユーザー認証と認可では、プロデューサが受信したメッセージの信頼性までは確認されません。プロデューサを完全に保護するには、プロデューサとの通信も保護する必要があります。通信が保護されていないと、誰かがアプリケーション・インスタンスを装い、プロデューサをだまして機密情報を返信させる恐れがあります。通信セキュリティには、次の3種類があります。
サーバー認証では、プロデューサへのアクセスを少数の認証されているマシンに制限します。この方法では、受信したHTTPメッセージのIPアドレスまたはホスト名をトラステッド・ホストのリストと比較します。リストにIPアドレスまたはホスト名がある場合、メッセージはプロデューサに渡されます。リストにないと、そのメッセージはプロデューサに達する前に拒否されます。
メッセージ認証では、コンシューマ認証とメッセージ整合性が提供されます。ここでは、メッセージをデジタル署名するために、クライアント(Portal Frameworkアプリケーション)およびプロデューサに既知の共有鍵が使用されます。詳細は、第74.18.5項「メッセージ認証」を参照してください。
メッセージの暗号化は、アプリケーションとプロデューサ間の通信にHTTPSプロトコルを使用することによって行われます。メッセージは高度に暗号化され、その中でデータが保護されます。暗号化によって高水準のセキュリティを確保できますが、メッセージごとに追加処理が必要になるため、パフォーマンスが低下します。
ユーザー入力のエスケープでは、アプリケーションはXSS攻撃から保護するために、ユーザーが入力した任意の文字列をエスケープし、テキストのみとして処理します。XSS攻撃では、攻撃者はユーザー入力フォームを介して悪意のあるスクリプトで渡そうとします。たとえば、ポートレット・タイトルがカスタマイズ可能な場合、攻撃者はタイトル・パラメータ・エントリを使用して、ポートレットにスクリプトまたはコマンドを渡そうとすることができます。このため、デフォルトの動作では、ユーザー入力がエスケープされ、すべての着信スクリプトが使用不可になっています。詳細は、第74.18.6項「ユーザー入力のエスケープ」を参照してください。
ポートレットは、アプリケーションへのウィンドウの役割を果たすことができます。ポートレットにはサマリー情報が表示され、アプリケーションのすべての機能にアクセスする方法が提供されます。ポートレットにはFrameworkアプリケーションにアプリケーションの一部が表示され、通常はユーザーがいくつかのアプリケーション・タスクを実行できます。
アプリケーションでは、ポートレットを介してアプリケーションにアクセスするユーザーを認証する必要があります。次のアプリケーション認証方法があります。
外部アプリケーション。この認証方法では、Oracle Portal (Oracle Portal)ユーザーとアプリケーションのユーザーは異なりますが、アプリケーションのユーザー名とパスワードはOracle Portalユーザーが管理します。
アプリケーションによる認証がない場合。この場合は、プロデューサとコンシューマ間の通信がまったく保護されません。
外部アプリケーションでは、Frameworkアプリケーションとは異なる認証サーバーを使用します。これは、ユーザーがFrameworkアプリケーションにログインしている場合、そのユーザーを、ユーザー名やパスワードを入力せずに、外部アプリケーションにもログインできるようにすることを意味します。
ユーザーの認証を管理しているアプリケーションは、管理者がそのアプリケーションを外部アプリケーションとして登録している場合、WebCenter Frameworkと柔軟に統合できます。以前にWebCenter Frameworkによって認証されたユーザーが初めて外部アプリケーションにアクセスすると、WebCenter Frameworkでは、その外部アプリケーションを使用してユーザーの認証を試みます。認証プロセスでは、そのアプリケーションの登録情報と、ユーザーのユーザー名とパスワードとを結合するHTTPリクエストが送信されます。ユーザーがまだその外部アプリケーションのユーザー名とパスワードを登録していない場合は、認証リクエストを行う前に、必要な情報の入力がユーザーに要求されます。ユーザーが外部アプリケーションのユーザー名とパスワードを入力すると、WebCenter Frameworkでは、新しいユーザー名とパスワードがFrameworkアプリケーションのユーザー名にマップされ、格納されます。格納された情報は、次回ユーザーが外部アプリケーションによる認証が必要なときに使用されます。
外部アプリケーションの利点は次のとおりです。
ユーザーはシングル・サインオンを利用できます。ただし、ユーザーは異なるユーザー名やパスワードを保持する必要があります。さらに、外部アプリケーションのユーザー名のマッピングも保持する必要があります。
ユーザー・リポジトリおよびOracle Single Sign-Onに依存せずに、複数のポータルと統合できます。
アプリケーションのソース・コードへのアクセス権限が不要です。
外部アプリケーションの不利な点は次のとおりです。
ポータルと同じユーザー・リポジトリを共有しません。このため、エンド・ユーザーによるユーザー情報の管理が必要です。
ユーザー名とパスワードは、Secure Sockets Layer (SSL)を実装しないかぎり、プレーン・テキストでプロデューサに送信されます。
プロデューサはリクエストを送信するFrameworkアプリケーション・インスタンスを完全に信頼します。プロデューサは、ユーザーがログインしているかどうかの確認やポータル・ユーザー名の確認はできますが、アプリケーションによるユーザーの認証は行われていません。
アプリケーションによる認証がない場合の利点は次のとおりです。
最も簡単な形式で統合し、最も短時間で実装できます。
アプリケーションによる認証がない場合の不利な点は次のとおりです。
最も低いセキュリティ・レベルになります。
WebCenter Portal Frameworkアプリケーションとの最も弱い統合になります。
ポートレットのセキュリティ・マネージャをプロデューサ内に実装し、ユーザーの詳細に応じてポートレットへのアクセスを制限できます。ユーザーがポートレット・インスタンスを含むページを表示すると、セキュリティ・マネージャによって、そのユーザーにポートレットを表示する適切な権限があるかどうかが判断されます。プロデューサでアクセス制御メソッドを実装することで、適切な権限のないユーザーはポートレットからコンテンツを取得できない(つまり、ポートレットを表示しない)ように制限します。ユーザーの詳細や設定項目など指定の特性が認可ロジックを通過した場合のみ、そのユーザーはコンテンツを取得できます。プロデューサでポートレットのセキュリティ・メソッドを実装しない場合は、偽名や認証されていない名前であっても、すべてのユーザー名が通過する可能性があります。
AuthLevelSecurityManager
は、認可レベルに関する次の情報にアクセスできます。
強い認証
ユーザーはPortal Frameworkアプリケーションにサインインしたことがあり、そのセッションのコンテキストでポートレットをリクエストしています。
パブリックまたは認証なし
ユーザーは現行セッションのコンテキスト内でログインしたことがなく、以前にログインしたことを示す永続的なCookieもありません。
これらのセキュリティ・サービスをJavaポートレットに組み込むには、provider.xml
を更新して、セキュリティ・レベルをstrong、weakまたはpublicに設定する必要があります。次のXMLをprovider.xml
の</portlet>
タグの直前に挿入してください。
<securityManager class="oracle.portal.provider.v2.security.AuthLevelSecurityManager"> <securityLevel>strong</securityLevel> </securityManager>
provider.xml
を変更した後は、プロデューサをリフレッシュします。
provider.xml
の構文の詳細は、OTNでプロデューサのJavaDocを参照してください。
http://www.oracle.com/technology/products/ias/portal/html/javadoc/xml_tag_reference_v2.html
PDKに付属する実装では提供されない特別なセキュリティ対策がポートレットに必要な場合は、独自のカスタムPortletSecurityManager
コントローラ・クラスを指定する必要があります。そのためには、oracle.portal.provider.v2.security.
PortletSecurityManager
クラスを拡張し、インタフェースで指定されている2つのメソッドに対して実装を提供します。次に、XMLプロデューサ定義でsecurityManager
コントローラ要素のクラス属性を新しいクラス名に置き換え、子要素を適切に構成します。
メッセージ認証ではデジタル署名を使用します。この署名は、Hashed Message Authentication Code (HMAC)アルゴリズムを使用し、ユーザー情報、共有鍵およびUTC(協定世界時)タイムスタンプを基にして生成されます。プロデューサは、共有鍵の独自のコピーを使用してメッセージを認証します。この手法は、クライアント資格証明のかわりに、プロデューサとのSecure Sockets Layer (SSL)通信で使用できます。
キャッシュを目的として、セッションが設定されるたびに表示リクエストの署名が計算されるため、メッセージ認証を使用するプロデューサでは常にプロデューサ・セッションを有効にしておく必要があります。これは同時に、パフォーマンスとセキュリティとの間にトレードオフの関係があることを示しています。セッション・タイムアウトを短くするほどメッセージが不正に再送される可能性も低くなりますが、プロバイダ・セッションの再確立に関連するパフォーマンスのオーバーヘッドが発生します。
セキュリティや管理上の問題が発生する可能性があるため、1つのプロデューサ・インスタンスで複数の共有鍵はサポートできません。たとえば、共有鍵のコピーの1つがなんらかの方法で侵害された場合、プロデューサの管理者は鍵を作成してすべてのアプリケーション・クライアントに配布し、クライアントはそのプロデューサ定義を更新する必要があります。この問題を回避するには、異なるプロデューサ・サービスをデプロイして、サービスごとに一意の共有キーを指定します。各プロデューサ・サービスには独自のデプロイ・プロパティ・ファイルがあるため、各サービスは他のサービスとは無関係に構成されます。同じプロデューサ・アダプタ内に複数のプロデューサ・サービスをデプロイすることによるオーバーヘッドは比較的小さいものです。
署名要素は、メッセージの傍受や再送信に対する保護を提供しますが、メッセージ・コンテンツの傍受や読取りを防ぐための処理は何も行いません。しかも、メッセージはプレーン・テキストで送信されます。メッセージの内容を認可されていない人々に読み取られることが心配な場合は、これをSSLと組み合せて使用し、メッセージを暗号化する必要があります。
メッセージ認証の利点は次のとおりです。
プロデューサによって受信されたメッセージが正当なFrameworkアプリケーション・インスタンスから送信されたものであることが保証されます。
メッセージ認証の不利な点は次のとおりです。
プロデューサが複数のポータルを提供する場合は、管理上の問題が発生します。セッションのタイムアウトを短くすることによってセキュリティを非常に高くした場合は、パフォーマンス上の影響があります。
テキストにエスケープせずにユーザー入力を受け付けると、攻撃者がユーザー入力フォームを介して悪意のあるスクリプトを渡そうとするXSS攻撃を受ける危険があります。たとえば、ポートレット・タイトルがカスタマイズ可能な場合、攻撃者はタイトル文字列を使用して、ポートレットにスクリプトまたはコマンドを渡そうとすることができます。PDK-Javaでは、そのような攻撃からポートレットを保護できるように、次の機能が提供されています。
ポートレット・タイトル内のスクリプトが実行されないように、フレームワーク・デフォルト・コンテナ・レンダラ・クラスはすべてのスクリプト文字をエンコードします。このデフォルトの動作は、JNDI変数escapeStrings
で制御されます。true
に設定すると、ポートレット・タイトル内のマークアップ・タグが表示タグ文字としてレンダリングされます。たとえば、<i>title</i>
というタイトルのカスタマイズは、titleではなく<i>title</i>
としてレンダリングされます。このモードは安全ですが、そのようにしたくない場合は、そのプロデューサのescapeStrings
をfalse
に設定できます。
escapeStrings
はプロデューサ内のすべての論理プロデューサに適用されます。escapeStrings
の値は、Fusion Middleware Controlコンソールから、他のJNDI変数と同じように設定できます。詳細は、第60.3.5.2項「JNDI変数値の設定」を参照してください。
カスタマイズされた値をレンダリングするコードがある場合、XSS攻撃を避けるためにそれらの入力値を適切にエスケープする必要があります。これは、どのモードでページをレンダリングするコードでも同様です。PDK-Javaではこのための2つの新しい静的なメソッドが提供されています。Javaクラスoracle.portal.provider.v2.url.UrlUtils
にある次のようなメソッドです。
public static escapeString(
string_text
)
は、与えられた文字列内の任意のスクリプト文字をエスケープします。たとえば、より小さい(<)は<
となります。このメソッドはescapeStrings
JNDI変数による影響を受けず、安全であり、使用を推奨されています。
public static escapeStringByFlag(
string_text
)
は、与えられた文字列内の任意のスクリプト文字をエスケープします。このメソッドはescapeStrings
JNDI変数によって制御されるので、安全性が低く、使用を推奨されていません。
例:
title = UrlUtils.escapeString(data.getPortletTitle());
WebCenter Portal偽装では、一連の式言語式(EL)およびマッチングJava APIが提供され、偽装セッションをカスタマイズするため使用できます。WebCenter Portal偽装の管理の詳細は、Oracle Fusion Middleware Oracle WebCenter Portalの管理の「偽装の管理」の章を参照してください。(偽装者による)偽装セッションの開始および(被偽装者による)偽装セッションの許可の手順は、『Oracle Fusion Middleware Oracle WebCenter Portalの使用』の「WebCenter Portal偽装の使用」の章を参照してください。
公開されるELは、次のとおりです。
#{WCSecurityContext.impersonationConfigured}
: 現在のドメインで、偽装が有効化されているかどうかを返します。
このELは、偽装セッションの終了が早すぎることが原因でエラーが発生したのかどうかを判別したり、セッションが終了したことを示す追加のインジケータを提供する場合に便利です。
#{WCSecurityContext.userInImpersonationSession}
: 現在のユーザーが偽装セッション内かどうかを返します。
このELを使用して、コンテンツを保護し、偽装セッション中はアクセスできないようにレンダリングできます。たとえば、ページ上の管理タスク・フローのレンダリングされた属性をこのELにマップして、ユーザーが偽装セッションでタスク・フローを表示しない場合、タスク・フローのレンダリングのみを行うことができます。
#{WCSecurityContext.currentImpersonator}
: もし存在すれば、現在の偽装者を返します。
このELを使用すると、ページ・テンプレートを変更して偽装者を表示したり、特定の偽装者のみにアクセスできるようにコンテンツをレンダリングできます。
偽装および他のELの詳細は、付録F「式言語式」を参照してください。
oracle.webcenter.security.common.WCSecurityUtility
では、次のパブリックAPIが公開されます。
isImpersonationConfigured()
: 現在のドメインで、偽装が有効化されているかどうかを返します。
このAPIは、エラーの原因が偽装セッションの終了が早すぎるためなのかを判定するため、またはセッション終了のインジケータを追加して提供するために役立ちます。
isUserInImpersonationSession()
: 現在のユーザーが偽装セッション内かどうかを返します。
このAPIは、コンテンツを保護するため、また偽装セッションの間にコンテンツをアクセス不能にするために使用することをお薦めします。たとえば、認証の例外をスローするか、ユーザーが偽装セッションでタスク・フローを表示している場合に空のリストを返すかして、ページ上の管理タスク・フローの変更された属性を、このAPIにマップすることが可能です。
getCurrentImpersonatorId()
: もし存在すれば、現在の偽装者を返します。
このAPIを使用して、ページ・テンプレートを変更して偽装者を表示するようにする(例74-10参照)か、一部のコンテンツを、特定の偽装者にかぎりアクセス可能に変更することが可能です。
これらのAPIおよびその他のAPIの詳細は、Oracle Fusion Middleware Oracle WebCenter Portal Java APIリファレンスを参照してください。
例74-10 getCurrentImpersonatorId API
import oracle.webcenter.security.common.WCSecurityUtility; if (WCSecurityUtility.isUserInImpersonationSession()) { String impersonator = WCSecurityUtility.getCurrentImpersonatorId(); String currentUser = ADFContext.getCurrent().getSecurityContext().getUserName(); //Code to be executed when the user is in an impersonation session. ..log("User " + impersonator + " is impersonating as user " + currentUser); }
この項では、Portal Frameworkアプリケーションのセキュリティ関連の問題の診断に役立つトラブルシューティング情報を提供します。
この項には、次のトラブルシューティング項目が含まれています。
問題
コンテンツ・リポジトリのデータ・コントロール・メソッドを含むページを実行すると、次のエラー・メッセージが表示されます。
"Unable to locate the credential for key extapp in JPS credential store."
原因
資格証明は、データ・コントロール・メソッドを使用するページにアクセスする前に、パスワードの変更タスク・フローを使用して明示的にプロビジョニングする必要があります。
解決方法
データ・コントロールは単なるモデルであり、資格証明プロビジョニングに対処するユーザー・インタフェース・レベルでは何も実行できないため、リダイレクトに対応するエラー・ハンドラをユーザー・インタフェースに記述する必要があります。エラー・ハンドラの記述の詳細は、『Oracle Application Development Framework開発者ガイド』のエラー処理のカスタマイズに関する項を参照してください。
エラー・ハンドラの例を次に示します。
public class ErrorHandler extends DCErrorHandlerImpl { public ErrorHandler(boolean b) { super(b); } public ErrorHandler() { super(true); } @Override public void reportException(DCBindingContainer formBnd, Exception ex) { if (ex instanceof AdapterException) { AdapterException ae = (AdapterException) ex; if (ae.getCause() != null && ae.getCause() instanceof ExtAppLoginException) { ExtAppLoginException eale = (ExtAppLoginException) ae.getCause(); Throwable t = eale.getCause(); if (t != null && (t instanceof ExtAppCredentialNotFoundException) || (t instanceof ExtAppInvalidUserCredential)) { String extAppId = eale.getExternalAppId(); showCredentialsProvisioningDialog(extAppId); return; } } } super.reportException(formBnd, ex); } private void showCredentialsProvisioningDialog(String extAppId) { FacesContext context = FacesContext.getCurrentInstance(); // Create the dialog UIViewRoot ViewHandler viewHandler = context.getApplication().getViewHandler(); UIViewRoot dialog = viewHandler.createView(context, "/oracle/adfinternal/extapp/view/pages/CredentialProvisionerDialog.jspx"); HashMap<String, Object> properties = new HashMap<String, Object>(); properties.put("width", new Integer(500)); properties.put("height", new Integer(350)); HashMap<String, Object> parameters = new HashMap<String, Object>(); parameters.put("oracle.extapp.id", extAppId); RequestContext reqContext = RequestContext.getCurrentInstance(); //launched from the button, need to specify this for the return listener //to be called. reqContext.launchDialog(dialog, parameters, null, true, properties); } }