この章には次の項が含まれます。
WEMフレームワークでは、CAS (http://www.jasig.org/cas
)上に構築されたSSOメカニズムを認証の際に使用します。このシステムの動作は、REST APIをブラウザから使用するか、プログラムから使用するかによって異なります。
ブラウザからREST APIにアクセスすると、ユーザーはCASログイン・ページにリダイレクトされ、ログインに成功すると、ユーザーのアイデンティティを確立するために検証されるticket
パラメータによって、元の位置に戻されます。プログラムでREST APIにアクセスする場合は、開発者がticket
パラメータまたはmultiticket
パラメータのいずれかを指定する必要があります。
ticket
およびmultiticket
パラメータを取得するにはいずれも、はOracle SSO APIを使用するか(Javaでコールする場合)、単にHTTPプロトコルを使用します(他の言語でコールする場合)。ticket
とmulticket
の違いは、ticketはRESTリソースごとに取得され、1回しか使用できないのに対し(名前からわかるように、列車や劇場のチケットが1回の乗車あるいは1回の鑑賞のみに有効であることを想像してください)、multiticketは任意のリソースに対して複数回使用できます。ticket
およびmultiticket
パラメータはいずれも回数に制限がありますが、一般的な使用パターンが異なります。ticketはコールごとに取得されるので有効期限を気にする必要がありません。一方、同じmultiticketを再利用すると最終的に期限切れとなり、HTTP 403
エラーが発生します。期限切れになった場合、アプリケーションでこのような動作を認識して、そのmultiticketを再取得できる必要があります。ticket
とmultiticket
のどちらを使用するかは、アプリケーション開発者が決定します。
この項の内容は、次のとおりです。
Oracle SSO APIは、認証プロバイダに依存しない方法で実装されています。ただし、ユーザーは独自のSSO認証プロバイダを登録できません。新しい認証プロバイダのサポートは、Oracleでのみ実装できます。プロバイダの切替えは、SSO構成ファイルを変更するのみで済みます。
すべてのSSOコールは、SSOフロントエンド・クラスSSOで開始します。これは、SSOSession
オブジェクトの取得に使用されます。SSOSession
は、SSO構成ごとに取得されます。Webアプリケーションの場合はSpring Webアプリケーション・ローダーを使用してロードされた単一の構成、またはスタンドアロン・アプリケーションの場合は構成ファイルからロードされた構成となります。
Webアプリケーション
SSO.getSession().getTicket(String service,String username, String password)
SSO.getSession().getMultiTicket(String username, String password
)
スタンドアロン・アプリケーション
SSO.getSession(String configName).
getTicket
(String service, String username, String password)
SSO.getSession(String configName).getMultiTicket
(String username, String password)
CAS REST APIは、チケットまたはマルチチケット(あるいはその両方)を配信環境で取得するために使用します。チケットまたはマルチチケットのいずれかを取得するには、2つのHTTP POST
コールを実行する必要があります。チケットとマルチチケットとの違いは、マルチチケットの場合はservice
パラメータが「*
」であるのに対し、ticket
パラメータの場合は、実際にアクセスするRESTリソースである点です。
次の例では、CASサーバーに対して実行されるコールを示します。このコールでは、資格証明fwadmin
/xceladmin
を使用してhttp://localhost:8080/cs/REST/sites
サービスのチケットを取得します。
Ticket Granting Ticket
を取得するためのコール
リクエスト
POST /cas/v1/tickets
HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 35
username=fwadmin&password=xceladmin
レスポンス
HTTP/1.1 201 Created Location: http://localhost:8080/cas/v1/tickets/TGT-1-ej2biTUFoCNBwA5X4lJn4PjYLRcLtLYg2QhLHclInfQqUk3au0-cas Content-Length: 441 ...
サービス・チケットを取得するためのコール
リクエスト
POST /cas/v1/tickets/TGT-1-ej2biTUFoCNBwA5X4lJn4PjYLRcLtLYg2QhLHclInfQqUk3au0-cas HTTP/1.1 Content-Type: application/x-www-form-urlencoded Content-Length: 57 service=http%3A%2F%2Flocalhost%3A8080%2Fcs%2FREST%2Fsites
レスポンス
HTTP/1.1 200 OK Content-Type: text/plain Content-Length: 29 ST-1-7xsHEMYR9ZmKdyNuBz6W-cas
プロトコルは、非常に単純です。最初に、ユーザー名およびパスワード・パラメータをapplication/x-www-form-urlencoded POST
リクエストで渡すことで、Ticket Granting Ticket (TGT)を取得するためのコールを実行します。レスポンスにはLocation
HTTPヘッダーが含まれます。これを使用して、service
パラメータを指定する2番目のapplication/x-www-form-urlencoded POST
リクエストを発行します。レスポンス本文には実際のチケットが含まれます。
生成されたチケット/マルチチケットを使用するには、ticket/multiticket
URL問合せパラメータを指定します。例:
http://localhost:8080/cs/REST/sites?ticket=ST-1-7xsHEMYR9ZmKdyNuBz6W-cas http://localhost:8080/cs/REST/sites?multiticket=ST-2-Bhen7VnZBERxXcepJZaV-cas
アプリケーションが、チケット/マルチチケットを取得するためのコールを実行します。
入力: サービス、ユーザー名、パスワード
出力: チケット/マルチチケット
アプリケーションが、リソースを取得するためのコールをリモートSatellite Serverに対して実行します。
入力: チケット、リソース入力データ
出力: リソース出力データ
リモートSatellite Serverは、結果のアサーションを検証するためのコールを実行します。アサーションにはユーザー情報が含まれます。また、Satellite Serverはマルチチケットの時間ベースのキャッシュを保持しているため、後続のコールでは検証によるコストは発生しません。
入力: チケット/マルチチケット
出力: アサーション
この手順はオプションです。Satellite Server側で、SSOConfig.xml
ファイル・パラメータのproxyTickets
パラメータがtrue
に設定されている場合は、チケットのプロキシも行われます。
入力: チケット
出力: プロキシされたチケット
リモートSatellite Serverが、WebCenter Sitesに対してコールを実行します。
入力: アサーション(シリアライズ形式)、リソース入力データ
出力: リソース出力データ
この手順はオプションです。WebCenter Sites側でセキュリティが有効な場合は、チケットを検証するためのコールをWebCenter Sitesが実行します。
入力: チケット/マルチチケット
出力: アサーション
デフォルトでは、WebCenter SitesとリモートSatellite Server間の通信チャネルは信頼されていません。リモートSatellite ServerのSSOConfig.xml
ファイルのproxyTickets
パラメータがtrue
に設定されているため、アクセスしているアプリケーションで指定されたチケットが、リモートSatellite Serverによって強制的にプロキシされます。
最適なパフォーマンスを得るために、システムをSatellite Serverのみによって認証するように構成できます。REST APIが使用するRESTおよびWebCenter SitesエレメントをSSOフィルタから除外することで、WebCenter Sites側のセキュリティ・チェックを無効にする必要があります。リモートSatellite ServerのSSOConfig.xml
ファイルのproxyTickets
パラメータは、false
に設定する必要があります。このモードではマルチチケットを活用できます。このモードでは、WebCenter Sitesのインストールはプライベート・ネットワーク内でホストする必要があること、およびWebCenter SitesとリモートSatellite Server間の通信チャネルの信頼性を確保する必要があることに注意してください。
シングル・サインオン・モジュールはSpring構成に基づいています。唯一必要なBeanはssoprovider
で、これはssoconfig
Beanを参照しています。
この項の内容は、次のとおりです。
id="ssolistener", class="com.fatwire.wem.sso.cas.listener.CASListener"
id="ssofilter", class="com.fatwire.wem.sso.cas.filter.CASFilter"
表75-2 id="ssofilter"
プロパティ | 説明 |
---|---|
|
必須。SSO構成参照です。 サンプル値: |
|
必須。SSOプロバイダ参照です。 サンプル値: ssoprovider |
id="provider", class="com.fatwire.wem.sso.cas.CASProvider"
id="config", class="com.fatwire.wem.sso.cas.conf.CASConfig"
表75-4 id="config"
プロパティ | 説明 |
---|---|
|
プロキシ・コールバックのパス( サンプル値: |
|
このプロパティは、保護されているページへの未認証アクセスに対するデフォルト動作を指定するために使用します。trueを指定すると、ユーザーがCASログイン・ページにリダイレクトされます。falseを指定すると、ユーザーが未認証の場合は403エラーが表示されます。この設定は、Pragma: auth-redirect HTTPヘッダーによってオーバーライドできます。 サンプル値: |
|
ログイン・ページのパス(casUrlからの相対パス)。 次の追加の問合せパラメータを受け取ることができます。
サンプル値: |
|
CAS RESTサーブレットのパス( サンプル値: |
|
ログアウト・ページのパス( サンプル値: /logout |
|
必須プロパティ。CAS URLの接頭辞です。 例: |
|
trueの場合、保護されているページへのリクエストはCASにリダイレクトされます。チケット発行Cookieが存在する場合は、ユーザーは暗黙的に認証されます。存在しない場合は、ユーザーは元の位置にリダイレクトされます。これは主に、ユーザーがすでに別のアプリケーションにログインしている場合に、暗黙的な認証を許可するために使用されます。 |
|
デフォルトでリダイレクトの動作が行われるようにする場合は次の点に注意してください。クライアントがリダイレクトを追従できることを確認してください。そうでない場合は、gateway=false URL問合せパラメータを使用して、デフォルトの動作をオーバーライドする必要があります。たとえば、wemLoginTemplateおよびwemLoginCssパラメータの処理中は、CASがリダイレクトを追従しないため、この設定をオンにして、gateway=falseをURLに付加する必要があります。 デフォルト値: |
|
マルチチケットのタイムアウト(ミリ秒単位)。 デフォルト値: |
|
除外されるマッピングのリスト。正規表現を使用できます。 許可値: |
|
保護されるマッピングのリスト。正規表現を使用できます。 許可値: pathはURLパスの一部です。アスタリスクを含めることができます( 例 /folder1/folder2は/folder1/*と一致しますが、/folder1/folder2/folder3は一致しません。 /folder1/folder2と/folder1/folder2/folder3は、/folder1/**と一致します。 ?[..]ブロックはオプションです。問合せパラメータはブロック内で指定できます。パラメータはカンマで区切られます。特殊文字#は、指定されたパラメータがリクエストの内容のサブセットであることを意味しています。#を省略するには、指定されたパラメータに正確に一致するリクエスト・パラメータが必要です。 パラメータには、nameのみを含めることができます。照合はnameのみに対して、またはname=value(つまり、nameとvalueの両方)に対して行われます。パラメータには、複数の値を指定できます。この場合、指定したパラメータ値のいずれかが、対応するリクエストのパラメータ値と一致すると照合テストに合格します。 例
|
|
リモートSatellite Serverを介してアプリケーションのカスタムRESTリソースを使用可能にするには、次の値を指定します。
例 第73.1項「Recommendationsサンプル・アプリケーション」のカスタムRESTリソースに指定する場合は、 |
|
チケットをプロキシするかどうかを指定します。 コール・チェーンの最後のサーバーに対してこのプロパティをfalseに設定すると、パフォーマンスが最適化されます。 現在のログイン済ユーザーの代理としてこのアプリケーションからCASで保護された別のアプリケーションをコールする必要がある場合は、このプロパティをtrueに設定します。これにより、メソッド デフォルト値: |
|
マルチチケットを使用するかどうかを指定します。 デフォルト値: |
表75-5 SSOフィルタで処理される問合せパラメータ
プロパティ名 | 説明 |
---|---|
ticket |
ユーザーIDを検証するために使用します。あるかぎられた期間内で、1つのリソースに対して1回のみ使用できます。 タイプ: 値: |
multiticket |
ユーザーIDを検証するために使用します。あるかぎられた期間内で、任意のリソースに対して複数回使用できます。 タイプ: 値: |
|
このプロパティがtrueに設定されている場合は、パブリック・ページのリクエストはCASにリダイレクトされます。チケット発行Cookieが存在する場合は、ユーザーは暗黙的に認証されます。存在しない場合は、ユーザーは元の位置にリダイレクトされます。これは主に、ユーザーがすでに別のアプリケーションにログインしている場合に、暗黙的な認証を許可するために使用されます。 タイプ: 値: |
|
保護されているページへの未認証アクセスに対するデフォルトの動作を指定するために使用します。このプロパティがtrueに設定されている場合は、ユーザーはCASログイン・ページにリダイレクトされます。falseに設定されている場合は、 タイプ: 値: |
CASクラスタリングに関する情報は、次のソースを参照してください。
CASアーキテクチャの詳細は、次のリンクを使用してください。
http://www.jasig.org/cas/about
WebCenter Sitesのインストール時にCASクラスタリングを構成する方法の詳細は、『Oracle Fusion Middleware WebCenter Sitesインストレーション・ガイド』を参照してください。
LDAPプロバイダでCASを構成する方法の詳細は、次のリンクを使用してください。
http://www.jasig.org/cas/server-deployment/authentication-handler
この項は、管理者の認可プロセスに関心のある開発者を対象としています。REST認可は、アプリケーションのリソース(WebCenter Sites内のオブジェクトにマップされる)に対してRESTの各操作を実行するための権限を付与するプロセスです。REST認可は、「デフォルトではすべてを拒否」するモデルを使用します。権限が特定のグループに対して明確に付与されていない場合、その権限は拒否されます。
この項の内容は、次のとおりです。
WEMセキュリティ・モデルはオブジェクト、グループおよびアクションに基づいています。セキュリティは、WebCenter Sites Adminインタフェースでオブジェクト・タイプごとに構成する必要があります。
オブジェクトは、サイト、ユーザー、アセットなど、WEMフレームワーク内のエンティティを示す総称です。保護オブジェクトには次のタイプがあります。
アセット・タイプ
アセット
索引
サイト
ロール
ユーザー
ユーザー・ロケール
ACL
アプリケーション
セキュリティ・グループは、ユーザーを集約して、ユーザーの(オブジェクトへの操作)権限を同時に管理するために使用します。
アクションは、LIST、READ
、UPDATE
、CREATE
、DELETE
の各セキュリティ権限です。LIST
はオブジェクトをリストするサービス(/types
など)に対するGET
権限を提供し、READ
は個々のオブジェクトの詳細を取得するサービス(/types/{assettype}
など)に対するGET
権限を提供します。
権限は、許可されたオブジェクトを操作するためにグループに割り当てられます。ACLなど一部のオブジェクトは読取り専用です(WebCenter Sitesで直接作成できますが、RESTを介して作成できません)。
前述のように、セキュリティ構成とは1つの配列です。セキュリティ構成では次を指定します。
保護されているオブジェクト・タイプおよびオブジェクト
オブジェクトにアクセス可能なグループ
グループ(およびそのメンバー)がオブジェクトに実行できるアクション
可能なセキュリティ構成およびWebエクスペリエンス管理フレームワークの詳細は、『Oracle Fusion Middleware WebCenter Sites管理者ガイド』を参照してください。
WebCenter Sites内のオブジェクト・タイプとオブジェクトは、WEMフレームワーク内のRESTリソースにマップされます。たとえば、Asset Type
オブジェクトは次のリソースにマップされます。
<BaseURI>/types/
リソース(システム内のすべてのアセット・タイプを一覧表示します)
<BaseURI>/types/<assettype>
リソース(選択されたアセット・タイプに関する情報を表示します)など。
WebCenter Sitesのアクションは、WEMフレームワークのRESTメソッドにマップされます。たとえば、アセット・タイプContent_C
を操作するためのREAD
権限をグループEditor
に付与すると、Editor
グループのユーザーには、RESTリソース/types/Content_C
に対してGET
およびHEAD
メソッドを使用する権限が付与されます。
LIST
アクションでは、グループ・メンバーがRESTリソースに対してGET
メソッドを使用できます。
READ
アクションでは、グループ・メンバーがRESTリソースに対してGET
およびHEAD
メソッドを使用できます。
UPDATE
アクションでは、グループ・メンバーがRESTリソースに対してPOST
メソッドを使用できます。
CREATE
アクションでは、グループ・メンバーがRESTリソースに対してPUT
メソッドを使用できます。
DELETE
アクションでは、グループ・メンバーがRESTリソースに対してDELETE
メソッドを使用できます。
総合的な情報については、『Oracle Fusion Middleware WebCenter Sites REST APIリソース・リファレンス』を参照してください。
RESTセキュリティ構成およびWebエクスペリエンス管理フレームワークの詳細は、『Oracle Fusion Middleware WebCenter Sites管理者ガイド』を参照してください。
セキュリティ権限を構成する際に、特定のタイプのすべてのオブジェクトまたは特定のタイプの単一のオブジェクトに権限が適用されるように指定できます。たとえば、UPDATE
(POST)
への権限を任意のサイトに付与すると、グループ内のユーザーはすべてのサイトの詳細をWEMフレームワークで変更できるようになります。UPDATE
(POST)
への権限をFirstSiteIIサンプル・サイトに付与すると、グループ内のユーザーはこのサイトの詳細をWEMで変更できるようになります。
Asset
オブジェクト・タイプでは、セキュリティ設定の適用先サイトを指定する必要があります。アセットは、常に特定のサイトからアクセスされるからです。AssetType
オブジェクトはサブタイプを指定することで拡張でき、セキュリティ構成をより詳細に設定するために使用されます。たとえば、アセット・タイプContent_C
にDELETE
権限を設定すると、RESTリソース/types/Content_C
でのDELETE
リクエストの実行(つまり、システムからContent_C
アセット・タイプを削除するための)が許可されます。
権限はグループにのみ付与できるため、ユーザーの全体的な権限は、そのユーザーの全グループを通じて権限が算出されるまで明確になりません。WEMフレームワークには、権限解決アルゴリズムが用意されています。その基本的な手順を次に示します。
WebCenter Sites REST APIを介したアセットの管理を示すサンプル・コードは、WebCenter Sitesのインストール・ディレクトリの次のパスにあります。
Misc/Samples/WEM Samples/REST API samples/Basic Assets/com/fatwire/rest/samples/basic/ Misc/Samples/WEM Samples/REST API samples/Basic Assets/com/fatwire/rest/samples/flex/
サブフォルダbasic
およびflex
には、それぞれ次のファイルが含まれます。
CreateAsset.java
DeleteAsset.java
ReadAsset.java
UpdateAsset.java
コードは、段階を追った説明によって詳細に文書化されています。ベーシック・アセット管理の例では、HelloAssetWorldサンプル・サイトを使用します。フレックス・アセット管理の例では、FirstSiteIIサンプル・サイトを使用します。必要なアセット・タイプおよびアセットに関するすべての情報は、java
ファイルを参照してください。