特許第6574479号(P6574479)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ オラクル・インターナショナル・コーポレイションの特許一覧

<>
  • 特許6574479-リバースプロキシサーバ内のサービス 図000002
  • 特許6574479-リバースプロキシサーバ内のサービス 図000003
  • 特許6574479-リバースプロキシサーバ内のサービス 図000004
  • 特許6574479-リバースプロキシサーバ内のサービス 図000005
  • 特許6574479-リバースプロキシサーバ内のサービス 図000006
  • 特許6574479-リバースプロキシサーバ内のサービス 図000007
  • 特許6574479-リバースプロキシサーバ内のサービス 図000008
  • 特許6574479-リバースプロキシサーバ内のサービス 図000009
  • 特許6574479-リバースプロキシサーバ内のサービス 図000010
  • 特許6574479-リバースプロキシサーバ内のサービス 図000011
  • 特許6574479-リバースプロキシサーバ内のサービス 図000012
  • 特許6574479-リバースプロキシサーバ内のサービス 図000013
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6574479
(24)【登録日】2019年8月23日
(45)【発行日】2019年9月11日
(54)【発明の名称】リバースプロキシサーバ内のサービス
(51)【国際特許分類】
   G06F 13/00 20060101AFI20190902BHJP
   H04L 12/66 20060101ALI20190902BHJP
【FI】
   G06F13/00 520C
   G06F13/00 351Z
   H04L12/66 B
【請求項の数】11
【全頁数】46
(21)【出願番号】特願2017-514827(P2017-514827)
(86)(22)【出願日】2015年4月27日
(65)【公表番号】特表2017-538179(P2017-538179A)
(43)【公表日】2017年12月21日
(86)【国際出願番号】US2015027763
(87)【国際公開番号】WO2016048419
(87)【国際公開日】20160331
【審査請求日】2017年11月22日
(31)【優先権主張番号】62/054,613
(32)【優先日】2014年9月24日
(33)【優先権主張国】US
(31)【優先権主張番号】14/696,432
(32)【優先日】2015年4月25日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】502303739
【氏名又は名称】オラクル・インターナショナル・コーポレイション
(74)【代理人】
【識別番号】110001195
【氏名又は名称】特許業務法人深見特許事務所
(72)【発明者】
【氏名】ハンダ,ニティン
(72)【発明者】
【氏名】ヤムナ,プラカシュ
【審査官】 木村 雅也
(56)【参考文献】
【文献】 国際公開第2013/158514(WO,A1)
【文献】 特表2012−516112(JP,A)
【文献】 米国特許出願公開第2011/0161477(US,A1)
【文献】 米国特許出願公開第2012/0137213(US,A1)
【文献】 Membrane Service Proxy documentation - Open Source Reverse Proxy for SOAP & REST - Membrance,URL:https://web.archive.org/web/20131202035553/http://www.membrane-soa.org/service-proxy/,米国,2013年12月 2日,[検索日 2018.11.27],全文
(58)【調査した分野】(Int.Cl.,DB名)
G06F 13/00
H04L 12/66
(57)【特許請求の範囲】
【請求項1】
コンピュータネットワーク間でウェブサービス要求を送信する方法であって、前記方法は、
内部コンピュータネットワークと通信しているプロキシサーバで、前記内部コンピュータネットワークとは別の外部コンピュータネットワークにおけるクライアント装置からのウェブサービス要求を受信するステップと、
前記ウェブサービス要求内の第1のリソースを識別するステップと、
前記第1のリソースが前記プロキシサーバ内の第1のレプリゼンテーショナル・ステート・トランスファー(REST)ウェブサービスによって公開されると判断するステップと、
前記プロキシサーバ内の前記第1のRESTウェブサービスを呼び出すステップと、
前記プロキシサーバ内の前記第1のRESTウェブサービスの実行中、前記内部コンピュータネットワークにおけるコンピュータサーバ内の第2のウェブサービスを呼び出すステップとを含み、
前記プロキシサーバ内の前記第1のRESTウェブサービスを呼び出すステップは、
前記第1のRESTウェブサービスによって公開された前記第1のリソースが前記プロキシサーバ内に存在しないと判断するステップと、
前記第1のリソースを前記プロキシサーバ内に生成するステップとを含み、前記第1のリソースは、前記ウェブサービス要求が前記クライアント装置から受信された後に生成される、方法。
【請求項2】
コンピュータネットワーク間でウェブサービス要求を送信する方法であって、前記方法は、
内部コンピュータネットワークと通信しているプロキシサーバで、前記内部コンピュータネットワークとは別の外部コンピュータネットワークにおけるクライアント装置からのウェブサービス要求を受信するステップと、
前記ウェブサービス要求内の第1のリソースを識別するステップと、
前記第1のリソースが前記プロキシサーバ内の第1のレプリゼンテーショナル・ステート・トランスファー(REST)ウェブサービスによって公開されると判断するステップと、
前記プロキシサーバ内の前記第1のRESTウェブサービスを呼び出すステップと
記内部コンピュータネットワークにおけるコンピュータサーバ内の第2のウェブサービスによって提供される一組のリソースを記述するウェブアプリケーション記述言語(WADL)ファイルにアクセスするステップと、
前記第2のウェブサービスによって提供される前記一組のリソースの前記WADLファイルにおける記述を使用して、前記プロキシサーバ内の前記第1のRESTウェブサービスにおいて1つ以上のリソースを生成するステップと
前記プロキシサーバ内の前記第1のRESTウェブサービスの実行中、前記内部コンピュータネットワークにおける前記コンピュータサーバ内の前記第2のウェブサービスを呼び出すステップとを含む、方法。
【請求項3】
前記プロキシサーバ内の前記第1のRESTウェブサービスにおいて前記リソースを生成するステップは、
前記WADLファイル内の1つ以上のリソース記述を修正するステップと、
修正された前記リソース記述に基づいて1つ以上のRESTリソースを作成するステップと、
前記RESTリソースの各々を前記プロキシサーバ内の前記第1のRESTウェブサービスにデプロイメントするステップとを含む、請求項2に記載の方法。
【請求項4】
前記第2のウェブサービスは、前記内部コンピュータネットワークにおける前記コンピュータサーバ内のRESTウェブサービスである、請求項1〜3のいずれか1項に記載の方法。
【請求項5】
前記プロキシサーバ内の前記第1のRESTウェブサービスは、第2のRESTウェブサービスを呼び出すように構成された少なくとも1つのリソースを含み、かつ、前記内部コンピュータネットワークにおける異なるコンピュータサーバによって公開された第3のRESTウェブサービスを呼び出すように構成された少なくとも1つのリソースを含む、複数のリソースを公開する、請求項4に記載の方法。
【請求項6】
第2のRESTウェブサービスは複数のリソースを公開し、前記プロキシサーバ内の前記第1のRESTウェブサービスは、前記第2のRESTウェブサービスによって公開された前記複数のリソースの部分集合を公開する、請求項4に記載の方法。
【請求項7】
前記第2のウェブサービスは、前記内部コンピュータネットワークにおける前記コンピュータサーバ内の簡易オブジェクトアクセスプロトコル(SOAP)ウェブサービスである、請求項1または2に記載の方法。
【請求項8】
前記プロキシサーバ内の前記ウェブサービス要求のための予め定められた処理フローにおける現在点を判断するステップと、
前記ウェブサービス要求のための前記予め定められた処理フローにおける判断された前記現在点に基づいて、1つ以上のセキュリティポリシーを検索するステップと、
前記セキュリティポリシーに従って前記ウェブサービス要求を処理するステップとをさらに含み、
前記ウェブサービス要求は、前記内部コンピュータネットワークにおける前記コンピュータサーバによって公開された前記第2のウェブサービスを呼び出す前に処理される、請求項1〜7のいずれか1項に記載の方法。
【請求項9】
システムであって、
1つ以上のプロセッサを含む処理部と、
前記処理部と結合され、前記処理部によって読取可能であるメモリとを含み、前記メモリは、前記処理部によって実行されると前記処理部に以下のステップを行なわせる一組の命令を格納しており、前記以下のステップは、
外部コンピュータネットワークにおけるクライアント装置からウェブサービス要求を受信するステップを含み、前記システムは、前記外部コンピュータネットワークとは別の内部コンピュータネットワークのサブネットワーク内で動作するように構成されており、前記以下のステップはさらに、
前記ウェブサービス要求内の第1のリソースを識別するステップと、
前記第1のリソースが前記システム内の第1のレプリゼンテーショナル・ステート・トランスファー(REST)ウェブサービスによって公開されると判断するステップと、
前記システム内の前記第1のRESTウェブサービスを呼び出すステップと、
前記システム内の前記第1のRESTウェブサービスの実行中、前記内部コンピュータネットワークにおけるコンピュータサーバ内の第2のウェブサービスを呼び出すステップとを含み、
前記システム内の前記第1のRESTウェブサービスを呼び出すステップは、
前記第1のRESTウェブサービスによって公開された前記第1のリソースが前記システムの前記メモリ内に存在しないと判断するステップと、
前記第1のリソースを前記システムの前記メモリ内に生成するステップとを含み、前記第1のリソースは、前記ウェブサービス要求が前記クライアント装置から受信された後に生成される、システム。
【請求項10】
システムであって、
1つ以上のプロセッサを含む処理部と、
前記処理部と結合され、前記処理部によって読取可能であるメモリとを含み、前記メモリは、前記処理部によって実行されると前記処理部に以下のステップを行なわせる一組の命令を格納しており、前記以下のステップは、
外部コンピュータネットワークにおけるクライアント装置からウェブサービス要求を受信するステップを含み、前記システムは、前記外部コンピュータネットワークとは別の内部コンピュータネットワークのサブネットワーク内で動作するように構成されており、前記以下のステップはさらに、
前記ウェブサービス要求内の第1のリソースを識別するステップと、
前記第1のリソースが前記システム内の第1のレプリゼンテーショナル・ステート・トランスファー(REST)ウェブサービスによって公開されると判断するステップと、
前記システム内の前記第1のRESTウェブサービスを呼び出すステップと
記内部コンピュータネットワークにおけるコンピュータサーバ内の第2のウェブサービスによって提供される一組のリソースを記述するウェブアプリケーション記述言語(WADL)ファイルにアクセスするステップと、
前記第2のウェブサービスによって提供される前記一組のリソースの前記WADLファイルにおける記述を使用して、前記システム内の前記第1のRESTウェブサービスにおいて1つ以上のリソースを生成するステップと
前記システム内の前記第1のRESTウェブサービスの実行中、前記内部コンピュータネットワークにおける前記コンピュータサーバ内の前記第2のウェブサービスを呼び出すステップとを含む、システム。
【請求項11】
請求項1〜8のいずれかに記載の方法をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願
本願は、2015年4月25日に出願された、「リバースプロキシサーバ内のサービス」(SERVICES WITHIN REVERSE PROXY SERVERS)と題された米国非仮出願第14/696,432号の利益および優先権を主張し、当該非仮出願は、2014年9月24日に出願された、「モバイルセキュリティアクセスサーバ(MOBILE SECURITY ACCESS SERVER:MSAS)」と題された米国仮特許出願第62/054,613号の利益および優先権を主張する。上述の特許出願の内容全体は、あらゆる目的のために、ここに引用により援用される。
【背景技術】
【0002】
背景
この開示は一般に、コンピュータネットワークを通してセキュリティを提供するためのシステム、方法、およびコンピュータ読取可能媒体に関する。より特定的には、この開示は、クライアント装置とバックエンドウェブアプリケーションおよびサービスとの間に実装されたプロキシサーバで、セキュリティサービスおよび他の機能性を提供するためのシステム、方法、およびコンピュータ読取可能媒体に関する。そのようなセキュリティサービスは、とりわけ、認証、認可、監査、シングルサインオン、セキュリティポリシー実施、キー管理および分散、安全な通信、安全なデータ格納、および安全なデータ共有を含み得る。
【発明の概要】
【課題を解決するための手段】
【0003】
簡単な概要
ここに説明される局面は、コンピュータネットワーク間で送信されるメッセージを処理するためのさまざまな手法を提供する。いくつかの実施形態では、クライアント装置からの、バックエンドウェブサービス、アプリケーション、および他のウェブコンテンツに対する要求といったメッセージが、複数のコンピュータネットワーク間で送信されてもよい。物理的または論理的サブネットワーク内に実装されたプロキシサーバといった、1つ以上の中間装置またはアプリケーションが、通信エンドポイント間でメッセージを受信し、処理し、送信してもよい。いくつかの実施形態では、リバースプロキシサーバが、リバースプロキシサーバ内にレプリゼンテーショナル・ステート・トランスファー(Representational State Transfer:REST)サービスおよびRESTリソースを動的に生成するように構成されてもよい。リバースプロキシサーバ内のRESTサービスおよびRESTリソースは、クライアント装置からの着信要求を扱ってバックエンドウェブサービスを呼び出してもよく、それにより、リバースプロキシサーバ上のさまざまなセキュリティポリシーの設計抽象化および/または実施を可能にする。
【0004】
ここに説明されるある局面によれば、プロキシサーバは、プロキシサーバ内のRESTウェブサービスによって公開された特定のリソースに対するウェブサービス要求を受信してもよい。プロキシサーバにおけるRESTウェブサービス内の適切なリソースが呼び出されてもよく、次にバックエンドウェブサービスを呼び出してもよい。場合によっては、リバースプロキシサーバは、さまざまなバックエンドウェブサービスを仮想化して不明瞭にする一組のRESTウェブサービスを公開してもよい。たとえば、リバースプロキシサーバは、信頼できないネットワーク上のクライアント装置が基盤のバックエンドウェブサービスを読み取らないように、または当該バックエンドウェブサービスについての知識を持たないように、仮想ユニフォームリソースロケータ(uniform resource locator:URL)のみを公開してもよい。
【0005】
ここに説明される追加の局面によれば、クライアント装置から受信されたREST要求のうちのいくつかまたはすべてを扱うために、RESTサービスおよびRESTリソースがリバースプロキシサーバ内に生成されてもよい。これらのRESTサービス/リソースは、リバースプロキシサーバ内でREST要求を扱うように、および/またはバックエンドウェブサービスの対応する組を呼び出すように、動的に生成され構成されてもよい。RESTウェブサービス/リソースを動的に生成し管理するために、RESTインフラストラクチャおよび/またはRESTアプリケーションエンジンが、リバースプロキシサーバ内に実装されてもよい。加えて、いくつかの実施形態では、リバースプロキシサーバ内のRESTリソースは、バックエンドウェブサービスコールを生成して、さまざまなポリシーを実施するためのポリシー実施エンジンに提供してもよい。
【図面の簡単な説明】
【0006】
図1】この発明のさまざまな実施形態が実現され得る例示的な分散型システムのコンポーネントを示すブロック図である。
図2】この発明の実施形態によって提供されるサービスをクラウドサービスとして提供し得るシステム環境のコンポーネントを示すブロック図である。
図3】この発明の実施形態が実現され得る例示的なコンピュータシステムを示すブロック図である。
図4A】この発明の1つ以上の実施形態に従った、コンピューティング装置および/またはシステム間でメッセージを処理して送信するためのリバースプロキシサーバを含むコンピューティング環境の例を、高レベルで示すブロック図である。
図4B】この発明の1つ以上の実施形態に従った、コンピューティング装置および/またはシステム間でメッセージを処理して送信するためのリバースプロキシサーバを含むコンピューティング環境の例を、高レベルで示すブロック図である。
図5】この発明の1つ以上の実施形態に従った、REST要求を受信して処理するためのリバースプロキシサーバを、高レベルで示す別のブロック図である。
図6A】この発明の1つ以上の実施形態に従った、クライアント装置からREST要求を受信して処理し受信して処理し、バックエンドウェブサービスを判断して呼び出すプロセスを示すフローチャートの一部である。
図6B】この発明の1つ以上の実施形態に従った、クライアント装置からREST要求を受信して処理し受信して処理し、バックエンドウェブサービスを判断して呼び出すプロセスを示すフローチャートの一部である。
図7】この発明の1つ以上の実施形態に従った、RESTサービスおよびRESTリソースを動的に生成するためのリバースプロキシサーバを、高レベルで示す別のブロック図である。
図8】この発明の1つ以上の実施形態に従った、RESTサービスおよびRESTリソースをリバースプロキシサーバ上に生成し、構築し、デプロイメントするためのプロセスを示すフローチャートである。
図9】この発明の1つ以上の実施形態に従った、ポリシー実施エンジンを含むリバースプロキシサーバを、高レベルで示す別のブロック図である。
図10】この発明の1つ以上の実施形態に従った、判断されたメッセージ処理ポリシーを使用してメッセージを処理して送信するためのプロセスを示すフローチャートである。
【発明を実施するための形態】
【0007】
詳細な説明
以下の記載では、説明の目的のため、多くの特定の詳細が、この発明のさまざまな実施形態の完全な理解を提供するために述べられる。しかしながら、これらの特定の詳細のうちのいくつかがなくてもこの発明の実施形態は実践され得る、ということは、当業者には明らかであろう。他の例では、周知の構造および装置は、ブロック図の形で示される。
【0008】
以下の記載は例示的な実施形態のみを提供しており、この開示の範囲、利用可能性、または構成を限定するよう意図されてはいない。むしろ、例示的な実施形態の以下の記載は、例示的な実施形態を実現するための実施可能な説明を当業者に提供するであろう。添付された請求項で述べられるようなこの発明の精神および範囲から逸脱することなく、要素の機能および配置においてさまざまな変更が行なわれてもよい、ということが理解されるべきである。
【0009】
以下の記載では、実施形態の完全な理解を提供するために、特定の詳細が与えられる。しかしながら、これらの特定の詳細がなくても実施形態は実践され得る、ということは、当業者には理解されるであろう。たとえば、実施形態を必要以上に詳細に記して不明瞭にすることがないように、回路、システム、ネットワーク、プロセス、および他のコンポーネントは、ブロック図の形のコンポーネントとして示されてもよい。他の例では、実施形態を不明瞭にしないように、周知の回路、プロセス、アルゴリズム、構造、および手法は、不要な詳細なしで示されてもよい。
【0010】
また、個々の実施形態は、フローチャート、フロー図、データフロー図、構造図、またはブロック図として示されるプロセスとして説明され得ることに留意されたい。フローチャートは動作を順次プロセスとして説明し得るものの、動作の多くは並行してまたは同時に行なうことが可能である。加えて、動作の順序は並べ替えられてもよい。プロセスは、その動作が完了すると終了するが、図に含まれない追加のステップを有していてもよい。プロセスは、方法、機能、手順、サブルーチン、サブプログラムなどに対応していてもよい。プロセスがある機能に対応している場合、その終了は、その機能が呼出し元の機能または主機能に戻ることに対応可能である。
【0011】
「コンピュータ読取可能媒体」という用語は、命令および/またはデータを格納し、含み、または担持することができる、携帯型または固定式記憶装置、光学記憶装置、ならびにさまざまな他の媒体といった非一時的媒体を含むものの、それらに限定されない。コードセグメントまたはコンピュータ実行可能命令が、手順、機能、サブプログラム、プログラム、ルーチン、サブルーチン、モジュール、ソフトウェアパッケージ、クラス、もしくは、命令、データ構造またはプログラム文の任意の組合せを表わしてもよい。コードセグメントは、情報、データ、引数、パラメータ、またはメモリ内容を渡し、および/または受信することによって、別のコードセグメントまたはハードウェア回路に結合されてもよい。情報、引数、パラメータ、データなどは、メモリ共有、メッセージパッシング、トークンパッシング、ネットワーク送信などを含む任意の好適な手段を介して渡され、発送され、または送信されてもよい。
【0012】
さらに、実施形態は、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、ハードウェア記述言語、またはそれらの任意の組合せによって実現されてもよい。ソフトウェア、ファームウェア、ミドルウェアまたはマイクロコードで実現される場合、必要なタスクを行なうためのプログラムコードまたはコードセグメントが、マシン読取可能媒体に格納されてもよい。プロセッサが、必要なタスクを行なってもよい。
【0013】
コンピュータネットワーク間で送信されるメッセージを処理するために、さまざまな手法(たとえば、方法、システム、1つ以上のプロセッサによって実行可能な複数の命令を格納する非一時的なコンピュータ読取可能記憶メモリ、など)がここに説明される。いくつかの実施形態では、クライアント装置からの、バックエンドウェブサービス、アプリケーション、および他のウェブコンテンツに対する要求といったメッセージが、複数のコンピュータネットワーク間で送信されてもよい。物理的または論理的サブネットワーク内に実装されたプロキシサーバといった、1つ以上の中間装置またはアプリケーションが、通信エンドポイント間でメッセージを受信し、処理し、送信してもよい。いくつかの実施形態では、リバースプロキシサーバが、リバースプロキシサーバ内にレプリゼンテーショナル・ステート・トランスファー(REST)サービスおよびRESTリソースを動的に生成するように構成されてもよい。リバースプロキシサーバ内のRESTサービスおよびRESTリソースは、クライアント装置からの着信要求を扱ってバックエンドウェブサービスを呼び出してもよく、それにより、リバースプロキシサーバ上のさまざまなセキュリティポリシーの設計抽象化および/または実施を可能にする。
【0014】
いくつかの実施形態では、プロキシサーバは、プロキシサーバ内のRESTウェブサービスによって公開された特定のリソースに対するウェブサービス要求を受信してもよい。プロキシサーバにおけるRESTウェブサービス内の適切なリソースが呼び出されてもよく、次にバックエンドウェブサービスを呼び出してもよい。場合によっては、リバースプロキシサーバは、さまざまなバックエンドウェブサービスを仮想化して不明瞭にする一組のRESTウェブサービスを公開してもよい。たとえば、リバースプロキシサーバは、信頼できないネットワーク上のクライアント装置が基盤のバックエンドウェブサービスを読み取らないように、または当該バックエンドウェブサービスについての知識を持たないように、仮想ユニフォームリソースロケータ(URL)のみを公開してもよい。追加の局面によれば、クライアント装置から受信されたREST要求のうちのいくつかまたはすべてを扱うために、RESTサービスおよびRESTリソースがリバースプロキシサーバ内に生成されてもよい。これらのRESTサービス/リソースは、リバースプロキシサーバ内でREST要求を扱うように、および/またはバックエンドウェブサービスの対応する組を呼び出すように、動的に生成され構成されてもよい。RESTウェブサービス/リソースを動的に生成し管理するために、RESTインフラストラクチャおよび/またはRESTアプリケーションエンジンが、リバースプロキシサーバ内に実装されてもよい。加えて、ある実施形態では、リバースプロキシサーバ内のRESTリソースは、バックエンドウェブサービスコールを生成して、さまざまなポリシーを実施するためのポリシー実施エンジンに提供してもよい。
【0015】
図1は、この発明のさまざまな実施形態が実現され得る例示的な分散型システムのコンポーネントを示すブロック図である。図示された実施形態では、分散型システム100は1つ以上のクライアントコンピューティング装置102、104、106、および108を含み、それらは、1つ以上のネットワーク110を通して、ウェブブラウザ、専用クライアント(たとえば、オラクル・フォームズ(Oracle Forms))などのクライアントアプリケーションを実行し、動作させるように構成される。サーバ112は、ネットワーク110を介して、リモートクライアントコンピューティング装置102、104、106、および108と通信可能に結合されてもよい。
【0016】
さまざまな実施形態では、サーバ112は、システムのコンポーネントのうちの1つ以上によって提供される1つ以上のサービスまたはソフトウェアアプリケーションを実行するように適合されてもよい。いくつかの実施形態では、これらのサービスは、ウェブベースのサービスまたはクラウドサービスとして、もしくはソフトウェア・アズ・ア・サービス(Software as a Service:SaaS)モデルの下で、クライアントコンピューティング装置102、104、106、および/または108のユーザに提供されてもよい。クライアントコンピューティング装置102、104、106、および/または108を動作させるユーザは次に、これらのコンポーネントによって提供されるサービスを利用するためにサーバ112とやりとりするために、1つ以上のクライアントアプリケーションを利用してもよい。
【0017】
図に示す構成では、システム100のソフトウェアコンポーネント118、120および122は、サーバ112上で実現されるとして図示されている。他の実施形態では、システム100のコンポーネントおよび/またはこれらのコンポーネントによって提供されるサービスのうちの1つ以上も、クライアントコンピューティング装置102、104、106、および/または108のうちの1つ以上によって実現されてもよい。クライアントコンピューティング装置を動作させるユーザは次に、これらのコンポーネントによって提供されるサービスを使用するために、1つ以上のクライアントアプリケーションを利用してもよい。これらのコンポーネントは、ハードウェア、ファームウェア、ソフトウェア、またはそれらの組合せで実現されてもよい。分散型システム100とは異なり得るさまざまな異なるシステム構成が可能であることが理解されるべきである。図に示す実施形態はこのため、実施形態システムを実現するための分散型システムの一例であり、限定的であるよう意図されてはいない。
【0018】
クライアントコンピューティング装置102、104、106、および/または108は、携帯型ハンドヘルド装置(たとえば、iPhone(登録商標)、携帯電話、iPad(登録商標)、コンピューティングタブレット、携帯情報端末(PDA))、またはウェアラブル装置(たとえば、グーグル・グラス(Google Glass)(登録商標)頭部装着型ディスプレイ)であってもよく、マイクロソフト・ウィンドウズ・モバイル(Microsoft Windows Mobile)(登録商標)などのソフトウェア、および/または、iOS、ウィンドウズ(登録商標)フォン、アンドロイド(登録商標)、ブラックベリー(登録商標)10、パームOSなどのさまざまなモバイルオペレーティングシステムを実行し、インターネット、電子メール、ショートメッセージサービス(short message service:SMS)、ブラックベリー(登録商標)、または他の通信プロトコルに対応している。クライアントコンピューティング装置は、マイクロソフト・ウィンドウズ(登録商標)、アップル・マッキントッシュ(登録商標)、および/またはLinux(登録商標)オペレーティングシステムのさまざまなバージョンを実行するパーソナルコンピュータおよび/またはラップトップコンピュータを例として含む、汎用パーソナルコンピュータであり得る。クライアントコンピューティング装置は、たとえばグーグル・クロームOSなどのさまざまなGNU/Linuxオペレーティングシステムを何ら限定されることなく含む、商業的に入手可能なさまざまなUNIX(登録商標)またはUNIX様オペレーティングシステムのうちのいずれかを実行するワークステーションコンピュータであり得る。それに代えて、またはそれに加えて、クライアントコンピューティング装置102、104、106、および108は、ネットワーク110を通して通信可能である、シンクライアントコンピュータ、インターネット対応ゲーミングシステム(たとえば、Kinect(登録商標)ジェスチャー入力装置を有する、または有さない、マイクロソフトXboxゲーミングコンソール)、および/またはパーソナルメッセージング装置といった、任意の他の電子装置であってもよい。
【0019】
例示的な分散型システム100は4つのクライアントコンピューティング装置を有して図示されているが、任意の数のクライアントコンピューティング装置がサポートされてもよい。センサを有する装置などの他の装置が、サーバ112とやりとりしてもよい。
【0020】
分散型システム100におけるネットワーク110は、TCP/IP(transmission control protocol/Internet protocol:伝送制御プロトコル/インターネットプロトコル)、SNA(systems network architecture:システムネットワークアーキテクチャ)、IPX(Internet packet exchange:インターネットパケット交換)、アップル・トーク(Apple Talk)などを何ら限定されることなく含む、商業的に入手可能なさまざまなプロトコルのうちのいずれかを使用してデータ通信をサポートできる、当業者にはよく知られた任意のタイプのネットワークであってもよい。単なる例として、ネットワーク110は、イーサネット(登録商標)、トークンリング(Token-Ring)などに基づくものといった、ローカルエリアネットワーク(local area network:LAN)であり得る。ネットワーク110は、ワイドエリアネットワークおよびインターネットであり得る。それは、仮想プライベートネットワーク(virtual private network:VPN)を何ら限定されることなく含む仮想ネットワーク、イントラネット、エクストラネット、公衆交換電話網(public switched telephone network:PSTN)、赤外線ネットワーク、無線ネットワーク(たとえば、電気電子技術者協会(the Institute of Electrical and Electronics:IEEE)802.11プロトコルスイート、Bluetooth(登録商標)、および/または任意の他の無線プロトコルのうちのいずれかの下で動作するネットワーク)、ならびに/もしくは、これらのおよび/または他のネットワークの任意の組合せを含み得る。
【0021】
サーバ112は、1つ以上の汎用コンピュータ、専用サーバコンピュータ(PC(パーソナルコンピュータ)サーバ、UNIX(登録商標)サーバ、ミッドレンジサーバ、メインフレームコンピュータ、ラックマウントサーバなどを例として含む)、サーバファーム、サーバクラスタ、もしくは任意の他の適切な構成および/または組合せで構成されてもよい。さまざまな実施形態では、サーバ112は、前述の開示で説明された1つ以上のサービスまたはソフトウェアアプリケーションを実行するように適合されてもよい。たとえば、サーバ112は、この開示の一実施形態に従った上述の処理を行なうためのサーバに対応していてもよい。
【0022】
サーバ112は、上述のもののうちのいずれかを含むオペレーティングシステム、および商業的に入手可能な任意のサーバオペレーティングシステムを実行してもよい。サーバ112はまた、さまざまな追加のサーバアプリケーションおよび/または中間層アプリケーションのうちのいずれかを実行してもよく、HTTP(hypertext transport protocol:ハイパーテキスト伝送プロトコル)サーバ、FTP(file transfer protocol:ファイル転送プロトコル)サーバ、CGI(common gateway interface:コモンゲートウェイインターフェイス)サーバ、JAVA(登録商標)サーバ、データベースサーバなどを含む。例示的なデータベースサーバは、オラクル、マイクロソフト、サイベース(Sybase)、IBM(International Business Machines:インターナショナル・ビジネス・マシーンズ)などから商業的に入手可能なものを何ら限定されることなく含む。
【0023】
いくつかの実現化例では、サーバ112は、クライアントコンピューティング装置102、104、106、および108のユーザから受信されたデータフィードおよび/またはイベント更新を分析して統合するための1つ以上のアプリケーションを含んでいてもよい。一例として、データフィードおよび/またはイベント更新は、センサデータアプリケーション、金融ティッカー、ネットワーク性能測定ツール(たとえば、ネットワーク監視およびトラフィック管理アプリケーション)、クリックストリーム分析ツール、自動車交通監視などに関連するリアルタイムイベントを含み得る、1つ以上の第三者情報源および連続データストリームから受信されたツイッター(登録商標)フィード、フェースブック(登録商標)更新またはリアルタイム更新を含んでいてもよいが、それらに限定されない。サーバ112はまた、クライアントコンピューティング装置102、104、106、および108の1つ以上の表示装置を介してデータフィードおよび/またはリアルタイムイベントを表示するための1つ以上のアプリケーションを含んでいてもよい。
【0024】
分散型システム100はまた、1つ以上のデータベース114および116を含んでいてもよい。データベース114および116は、さまざまな位置に存在していてもよい。例として、データベース114および116のうちの1つ以上は、サーバ112に対してローカルな(および/または、サーバ112内にある)非一時的記憶媒体上に存在していてもよい。それに代えて、データベース114および116は、サーバ112からリモートであってもよく、ネットワークベースの接続または専用接続を介してサーバ112と通信してもよい。一組の実施形態では、データベース114および116は、ストレージエリアネットワーク(storage-area network:SAN)に存在していてもよい。同様に、サーバ112に帰する機能を行なうための任意の必要なファイルが適宜、サーバ112上にローカルに格納されてもよく、および/またはリモートに格納されてもよい。一組の実施形態では、データベース114および116は、SQLフォーマットのコマンドに応答してデータを格納し、更新し、検索するように適合された、オラクルによって提供されるデータベースなどのリレーショナルデータベースを含んでいてもよい。
【0025】
図2は、この発明の実施形態によって提供されるサービスをクラウドサービスとして提供し得るシステム環境のコンポーネントを示すブロック図である。図示された実施形態では、システム環境200は、クラウドサービスを提供するクラウドインフラストラクチャシステム202とやりとりするためにユーザによって使用され得る1つ以上のクライアントコンピューティング装置204、206、および208を含む。クライアントコンピューティング装置は、クラウドインフラストラクチャシステム202によって提供されるサービスを使用するためにクラウドインフラストラクチャシステム202とやりとりするためにクライアントコンピューティング装置のユーザによって使用され得る、ウェブブラウザ、専用クライアントアプリケーション(たとえば、オラクル・フォームズ)、または何らかの他のアプリケーションといったクライアントアプリケーションを動作させるように構成されてもよい。
【0026】
図に示すクラウドインフラストラクチャシステム202は、図示されたもの以外のコンポーネントを有していてもよい、ということが理解されるべきである。また、図に示す実施形態は、この発明の一実施形態を取入れ得るクラウドインフラストラクチャシステムの単なる一例である。いくつかの他の実施形態では、クラウドインフラストラクチャシステム202は、図に示すものよりも多い、または少ないコンポーネントを有していてもよく、2つ以上のコンポーネントを組合せてもよく、もしくは、異なる構成または配置のコンポーネントを有していてもよい。
【0027】
クライアントコンピューティング装置204、206、および208は、102、104、106、および108について上述したものと同様の装置であってもよい。
【0028】
例示的なシステム環境200は3つのクライアントコンピューティング装置を有して図示されているが、任意の数のクライアントコンピューティング装置がサポートされてもよい。センサを有する装置などの他の装置が、クラウドインフラストラクチャシステム202とやりとりしてもよい。
【0029】
ネットワーク210は、クライアント204、206、および208とクラウドインフラストラクチャシステム202との間のデータの通信および交換を容易にしてもよい。各ネットワークは、ネットワーク110について上述したものを含む、商業的に入手可能なさまざまなプロトコルのうちのいずれかを使用してデータ通信をサポートできる、当業者にはよく知られた任意のタイプのネットワークであってもよい。
【0030】
クラウドインフラストラクチャシステム202は、サーバ112について上述したものを含み得る1つ以上のコンピュータおよび/またはサーバを含んでいてもよい。
【0031】
ある実施形態では、クラウドインフラストラクチャシステムによって提供されるサービスは、オンラインデータストレージおよびバックアップソリューション、ウェブベースの電子メールサービス、ホスト型オフィススイートおよび文書コラボレーションサービス、データベース処理、管理された技術サポートサービスといった、クラウドインフラストラクチャシステムのユーザにとってオンデマンドで利用可能にされる多数のサービスを含んでいてもよい。クラウドインフラストラクチャシステムによって提供されるサービスは、そのユーザの必要性を満たすために動的にスケール変更され得る。クラウドインフラストラクチャシステムによって提供されるサービスの特定のインスタンス化は、ここに「サービスインスタンス」と呼ばれる。一般に、クラウドサービスプロバイダのシステムから、インターネットなどの通信ネットワークを介してユーザに利用可能とされる任意のサービスは、「クラウドサービス」と呼ばれる。典型的には、パブリッククラウド環境では、クラウドサービスプロバイダのシステムを作り上げるサーバおよびシステムは、顧客自身の業務用サーバおよびシステムとは異なっている。たとえば、クラウドサービスプロバイダのシステムは、アプリケーションをホストしてもよく、ユーザは、インターネットなどの通信ネットワークを介してオンデマンドでアプリケーションをオーダーし、使用してもよい。
【0032】
いくつかの例では、コンピュータネットワーククラウドインフラストラクチャにおけるサービスは、クラウドベンダーによってユーザに提供されるかまたは当該技術分野において他の態様で公知であるようなストレージ、ホスト型データベース、ホスト型ウェブサーバ、ソフトウェアアプリケーション、もしくは他のサービスへの、保護されたコンピュータネットワークアクセスを含んでいてもよい。たとえば、サービスは、インターネットを通した、クラウド上のリモートストレージへの、パスワードで保護されたアクセスを含み得る。別の例として、サービスは、ネットワーク化された開発者による私的使用のための、ウェブサービスベースのホスト型リレーショナルデータベースおよびスクリプト言語ミドルウェアエンジンを含み得る。別の例として、サービスは、クラウドベンダーのウェブサイト上でホストされる電子メールソフトウェアアプリケーションへのアクセスを含み得る。
【0033】
ある実施形態では、クラウドインフラストラクチャシステム202は、セルフサービスで、サブスクリプションベースで、弾力的にスケーラブルで、信頼でき、高可用性で、かつ安全な態様で顧客に配信される、アプリケーション、ミドルウェアおよびデータベースサービス提供物一式を含んでいてもよい。そのようなクラウドインフラストラクチャシステムの一例は、本譲受人によって提供されるオラクル・パブリック・クラウド(Oracle Public Cloud)である。
【0034】
さまざまな実施形態では、クラウドインフラストラクチャシステム202は、クラウドインフラストラクチャシステム202によって提供されるサービスに顧客のサブスクリプションを自動的にプロビジョニングし、管理し、追跡するように適合されてもよい。クラウドインフラストラクチャシステム202は、異なるデプロイメントモデルを介してクラウドサービスを提供してもよい。たとえば、サービスは、クラウドインフラストラクチャシステム202がクラウドサービスを販売する組織によって所有され(たとえば、オラクルによって所有され)、サービスが一般大衆または異なる産業企業にとって利用可能とされる、パブリッククラウドモデルの下で提供されてもよい。別の例として、サービスは、クラウドインフラストラクチャシステム202が単一の組織のためにのみ動作され、その組織内の1つ以上のエンティティのためのサービスを提供し得る、プライベートクラウドモデルの下で提供されてもよい。クラウドサービスはまた、クラウドインフラストラクチャシステム202、およびクラウドインフラストラクチャシステム202によって提供されるサービスが、関連するコミュニティにおけるいくつかの組織によって共有される、コミュニティクラウドモデルの下で提供されてもよい。クラウドサービスはまた、2つ以上の異なるモデルの組合せであるハイブリッドクラウドモデルの下で提供されてもよい。
【0035】
いくつかの実施形態では、クラウドインフラストラクチャシステム202によって提供されるサービスは、ソフトウェア・アズ・ア・サービス(SaaS)カテゴリー、プラットフォーム・アズ・ア・サービス(Platform as a Service:PaaS)カテゴリー、インフラストラクチャ・アズ・ア・サービス(Infrastructure as a Service:IaaS)カテゴリー、または、ハイブリッドサービスを含むサービスの他のカテゴリーの下で提供される、1つ以上のサービスを含んでいてもよい。顧客は、クラウドインフラストラクチャシステム202によって提供される1つ以上のサービスを、サブスクリプションオーダーを介してオーダーしてもよい。クラウドインフラストラクチャシステム202は次に、顧客のサブスクリプションオーダーにおけるサービスを提供するために処理を行なう。
【0036】
いくつかの実施形態では、クラウドインフラストラクチャシステム202によって提供されるサービスは、アプリケーションサービス、プラットフォームサービス、およびインフラストラクチャサービスを、何ら限定されることなく含んでいてもよい。いくつかの例では、アプリケーションサービスは、SaaSプラットフォームを介して、クラウドインフラストラクチャシステムによって提供されてもよい。SaaSプラットフォームは、SaaSカテゴリーに該当するクラウドサービスを提供するように構成されてもよい。たとえば、SaaSプラットフォームは、統合された開発およびデプロイメントプラットフォーム上にオンデマンドアプリケーション一式を構築し、配信するための能力を提供してもよい。SaaSプラットフォームは、SaaSサービスを提供するための基本ソフトウェアおよびインフラストラクチャを管理し、制御してもよい。SaaSプラットフォームによって提供されるサービスを利用することにより、顧客は、クラウドインフラストラクチャシステム上で実行されるアプリケーションを利用できる。顧客は、顧客が別々のライセンスおよびサポートを購入する必要なく、アプリケーションサービスを取得できる。さまざまな異なるSaaSサービスが提供されてもよい。例は、大型組織のための販売実績管理、企業統合、およびビジネス柔軟性についてのソリューションを提供するサービスを、何ら限定されることなく含む。
【0037】
いくつかの実施形態では、プラットフォームサービスは、PaaSプラットフォームを介して、クラウドインフラストラクチャシステムによって提供されてもよい。PaaSプラットフォームは、PaaSカテゴリーに該当するクラウドサービスを提供するように構成されてもよい。プラットフォームサービスの例は、(オラクルなどの)組織が共有の共通アーキテクチャ上で既存のアプリケーションを統合できるようにするサービスと、プラットフォームによって提供される共有のサービスを活用する新しいアプリケーションを構築するための能力とを、何ら限定されることなく含んでいてもよい。PaaSプラットフォームは、PaaSサービスを提供するための基本ソフトウェアおよびインフラストラクチャを管理し、制御してもよい。顧客は、顧客が別々のライセンスおよびサポートを購入する必要なく、クラウドインフラストラクチャシステムによって提供されるPaaSサービスを取得できる。プラットフォームサービスの例は、オラクルJava(登録商標)クラウドサービス(Java Cloud Service:JCS)、オラクル・データベース・クラウド・サービス(Database Cloud Service:DBCS)などを、何ら限定されることなく含む。
【0038】
PaaSプラットフォームによって提供されるサービスを利用することにより、顧客は、クラウドインフラストラクチャシステムによってサポートされるプログラミング言語およびツールを採用するとともに、デプロイメントされたサービスを制御することができる。いくつかの実施形態では、クラウドインフラストラクチャシステムによって提供されるプラットフォームサービスは、データベースクラウドサービス、ミドルウェアクラウドサービス(たとえば、オラクル・フュージョン・ミドルウェア(Oracle Fusion Middleware)サービス)、およびJavaクラウドサービスを含んでいてもよい。一実施形態では、データベースクラウドサービスは、組織がデータベースリソースをプールし、データベースクラウドの形をしたデータベース・アズ・ア・サービスを顧客に提供することを可能にする共有のサービスデプロイメントモデルをサポートしてもよい。ミドルウェアクラウドサービスは、顧客がさまざまなビジネスアプリケーションを開発してデプロイメントするためのプラットフォームを提供してもよく、Javaクラウドサービスは、顧客がクラウドインフラストラクチャシステムにおいてJavaアプリケーションをデプロイメントするためのプラットフォームを提供してもよい。
【0039】
クラウドインフラストラクチャシステムにおいて、さまざまな異なるインフラストラクチャサービスが、IaaSプラットフォームによって提供されてもよい。これらのインフラストラクチャサービスは、SaaSプラットフォームおよびPaaSプラットフォームによって提供されるサービスを利用する顧客のための、ストレージ、ネットワーク、ならびに他の基礎的コンピューティングリソースなどの基本コンピューティングリソースの管理および制御を容易にする。
【0040】
ある実施形態では、クラウドインフラストラクチャシステム202はまた、クラウドインフラストラクチャシステムの顧客にさまざまなサービスを提供するために使用されるリソースを提供するためのインフラストラクチャリソース230を含んでいてもよい。一実施形態では、インフラストラクチャリソース230は、PaaSプラットフォームおよびSaaSプラットフォームによって提供されるサービスを実行するために、サーバ、ストレージ、およびネットワーキングリソースなどのハードウェアの予め統合され最適化された組合せを含んでいてもよい。
【0041】
いくつかの実施形態では、クラウドインフラストラクチャシステム202におけるリソースは、複数のユーザによって共有され、要望ごとに動的に再割当てされてもよい。加えて、リソースは、異なる時間帯におけるユーザに割当てられてもよい。たとえば、クラウドインフラストラクチャシステム230は、第1の時間帯における第1の一組のユーザが、特定数の時間、クラウドインフラストラクチャシステムのリソースを利用することを可能にし、次に、異なる時間帯に位置する別の一組のユーザへの同じリソースの再割当てを可能にして、それによりリソースの利用を最大化してもよい。
【0042】
ある実施形態では、クラウドインフラストラクチャシステム202の異なるコンポーネントまたはモジュールによって、およびクラウドインフラストラクチャシステム202によって提供されるサービスによって共有される、多くの内部共有サービス232が提供されてもよい。これらの内部共有サービスは、セキュリティおよびアイデンティティサービス、統合サービス、企業リポジトリサービス、企業マネージャサービス、ウィルススキャニングおよびホワイトリストサービス、高可用性、バックアップおよび復元サービス、クラウドサポートを可能にするためのサービス、電子メールサービス、通知サービス、ファイル転送サービスなどを、何ら限定されることなく含んでいてもよい。
【0043】
ある実施形態では、クラウドインフラストラクチャシステム202は、クラウドインフラストラクチャシステムにおけるクラウドサービス(たとえば、SaaS、PaaS、およびIaaSサービス)の包括的管理を提供してもよい。一実施形態では、クラウド管理機能性は、クラウドインフラストラクチャシステム202によって受信された顧客のサブスクリプションをプロビジョニングし、管理し、追跡するための能力などを含んでいてもよい。
【0044】
一実施形態では、図に示すように、クラウド管理機能性は、オーダー管理モジュール220、オーダーオーケストレーションモジュール222、オーダープロビジョニングモジュール224、オーダー管理および監視モジュール226、ならびにアイデンティティ管理モジュール228などの1つ以上のモジュールによって提供されてもよい。これらのモジュールは、汎用コンピュータ、専用サーバコンピュータ、サーバファーム、サーバクラスタ、もしくは任意の他の適切な構成および/または組合せであり得る、1つ以上のコンピュータおよび/またはサーバを含んでいてもよく、もしくはそれらを使用して提供されてもよい。
【0045】
例示的な動作234では、クライアント装置204、206または208などのクライアント装置を使用する顧客は、クラウドインフラストラクチャシステム202によって提供される1つ以上のサービスを要求し、クラウドインフラストラクチャシステム202によって提供される1つ以上のサービスについてサブスクリプションオーダーを出すことにより、クラウドインフラストラクチャシステム202とやりとりしてもよい。ある実施形態では、顧客は、クラウドユーザインターフェイス(User Interface:UI)であるクラウドUI212、クラウドUI214および/またはクラウドUI216にアクセスし、これらのUIを介してサブスクリプションオーダーを出してもよい。顧客がオーダーを出したことに応答してクラウドインフラストラクチャシステム202が受信したオーダー情報は、顧客と、顧客が申し込むつもりである、クラウドインフラストラクチャシステム202によって提供される1つ以上のサービスとを識別する情報を含んでいてもよい。
【0046】
顧客によってオーダーが出された後で、オーダー情報がクラウドUI212、214および/または216を介して受信される。
【0047】
動作236で、オーダーがオーダーデータベース218に格納される。オーダーデータベース218は、クラウドインフラストラクチャシステム218によって動作され、他のシステム要素とともに動作される、いくつかのデータベースのうちの1つであり得る。
【0048】
動作238で、オーダー情報はオーダー管理モジュール220に発送される。場合によっては、オーダー管理モジュール220は、オーダーを検証し、検証後にオーダーを予約するといった、オーダーに関連する請求および課金機能を行なうように構成されてもよい。
【0049】
動作240で、オーダーに関する情報がオーダーオーケストレーションモジュール222に通信される。オーダーオーケストレーションモジュール222は、顧客によって出されたオーダーのためのサービスおよびリソースのプロビジョニングをオーケストレーションするために、オーダー情報を利用してもよい。場合によっては、オーダーオーケストレーションモジュール222は、オーダープロビジョニングモジュール224のサービスを使用して、申し込まれたサービスをサポートするようにリソースのプロビジョニングをオーケストレーションしてもよい。
【0050】
ある実施形態では、オーダーオーケストレーションモジュール222は、各オーダーに関連付けられたビジネスプロセスの管理を可能にし、オーダーがプロビジョニングに進むべきか否かを判断するためにビジネス論理を適用する。動作242で、新規サブスクリプションのオーダーを受信すると、オーダーオーケストレーションモジュール222は、リソースを割当ててサブスクリプションオーダーを遂行するために必要とされるリソースを構成するようにという要求を、オーダープロビジョニングモジュール224に送信する。オーダープロビジョニングモジュール224は、顧客によってオーダーされたサービスのためのリソースの割当てを可能にする。オーダープロビジョニングモジュール224は、クラウドインフラストラクチャシステム200によって提供されるクラウドサービスと、要求されたサービスを提供するためのリソースをプロビジョニングするために使用される物理的実装層との間の抽象化のレベルを提供する。オーダーオーケストレーションモジュール222はこのため、サービスおよびリソースが実際にオンザフライでプロビジョニングされるか否か、または予めプロビジョニングされて要求時にのみ割当てられるか否かといった実装詳細から切り離されてもよい。
【0051】
動作244で、サービスおよびリソースが一旦プロビジョニングされると、提供されるサービスの通知が、クラウドインフラストラクチャシステム202のオーダープロビジョニングモジュール224によって、クライアント装置204、206および/または208上の顧客に送信されてもよい。
【0052】
動作246で、顧客のサブスクリプションオーダーが、オーダー管理および監視モジュール226によって管理され、追跡されてもよい。場合によっては、オーダー管理および監視モジュール226は、使用されるストレージの量、転送されるデータの量、ユーザの数、システムアップタイムおよびシステムダウンタイムの量といった、サブスクリプションオーダーにおけるサービスについての使用統計を収集するように構成されてもよい。
【0053】
ある実施形態では、クラウドインフラストラクチャシステム200は、アイデンティティ管理モジュール228を含んでいてもよい。アイデンティティ管理モジュール228は、クラウドインフラストラクチャシステム200においてアクセス管理および認証サービスなどのアイデンティティサービスを提供するように構成されてもよい。いくつかの実施形態では、アイデンティティ管理モジュール228は、クラウドインフラストラクチャシステム202によって提供されるサービスを利用したい顧客についての情報を制御してもよい。そのような情報は、そのような顧客のアイデンティティを認証する情報と、さまざまなシステムリソース(たとえば、ファイル、ディレクトリ、アプリケーション、通信ポート、メモリセグメントなど)に対してそれらの顧客がどのアクションを行なうことが認可されているかを記述する情報とを含み得る。アイデンティティ管理モジュール228はまた、各顧客についての記述的情報と、その記述的情報が誰によってどのようにアクセスされ、修正され得るかについての記述的情報との管理を含んでいてもよい。
【0054】
図3は、この発明の実施形態が実現され得る例示的なコンピュータシステムを示すブロック図である。システム300は、上述のコンピュータシステムのうちのいずれかを実現するために使用されてもよい。図に示すように、コンピュータシステム300は、バスサブシステム302を介して多くの周辺サブシステムと通信する処理部304を含む。これらの周辺サブシステムは、処理加速部306と、I/Oサブシステム308と、記憶サブシステム318と、通信サブシステム324とを含んでいてもよい。記憶サブシステム318は、有形のコンピュータ読取可能記憶媒体322と、システムメモリ310とを含む。
【0055】
バスサブシステム302は、コンピュータシステム300のさまざまなコンポーネントおよびサブシステムを意図されるように互いに通信させるためのメカニズムを提供する。バスサブシステム302は単一のバスとして概略的に図示されているが、バスサブシステムの代替的な実施形態は複数のバスを利用してもよい。バスサブシステム302は、さまざまなバスアーキテクチャのうちのいずれかを使用するメモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含む、いくつかのタイプのバス構造のうちのいずれかであってもよい。たとえば、そのようなアーキテクチャは、IEEE P1386.1規格で製造されるメザニンバスとして実現可能な、産業標準アーキテクチャ(Industry Standard Architecture:ISA)バス、マイクロチャネルアーキテクチャ(Micro Channel Architecture:MCA)バス、強化ISA(EISA)バス、ビデオエレクトロニクス標準組織(Video Electronics Standards Association:VESA)ローカルバス、および周辺コンポーネント相互接続(Peripheral Component Interconnect:PCI)バスを含んでいてもよい。
【0056】
1つ以上の集積回路(たとえば、従来のマイクロプロセッサまたはマイクロコントローラ)として実現され得る処理部304は、コンピュータシステム300の動作を制御する。処理部304には、1つ以上のプロセッサが含まれていてもよい。これらのプロセッサは、シングルコアまたはマルチコアプロセッサを含んでいてもよい。ある実施形態では、処理部304は、各処理部にシングルまたはマルチコアプロセッサが含まれた、1つ以上の独立した処理部332および/または334として実現されてもよい。他の実施形態では、処理部304はまた、2つのデュアルコアプロセッサをシングルチップへと集積することによって形成されるクアッドコア処理部として実現されてもよい。
【0057】
さまざまな実施形態では、処理部304は、プログラムコードに応答してさまざまなプログラムを実行でき、同時に実行される複数のプログラムまたはプロセスを維持できる。任意の所与の時間において、実行されるべきプログラムコードのうちのいくつかまたはすべては、プロセッサ304に、および/または記憶サブシステム318にあり得る。好適なプログラミングを通して、プロセッサ304は、上述のさまざまな機能性を提供できる。コンピュータシステム300は加えて処理加速部306を含んでいてもよく、それは、デジタル信号プロセッサ(digital signal processor:DSP)、専用プロセッサなどを含み得る。
【0058】
I/Oサブシステム308は、ユーザインターフェイス入力装置と、ユーザインターフェイス出力装置とを含んでいてもよい。ユーザインターフェイス入力装置は、キーボード、マウスまたはトラックボールなどのポインティング装置、ディスプレイに組込まれたタッチパッドまたはタッチスクリーン、スクロールホイール、クリックホイール、ダイヤル、ボタン、スイッチ、キーパッド、音声コマンド認識システム付き音声入力装置、マイクロホン、および他のタイプの入力装置を含んでいてもよい。ユーザインターフェイス入力装置は、たとえば、ジェスチャーおよび口頭コマンドを使用したナチュラルユーザインターフェイスを通して、マイクロソフトXbox(登録商標)360ゲームコントローラなどの入力装置をユーザが制御し、それとやりとりすることを可能にする、マイクロソフトKinect(登録商標)運動センサなどの運動感知および/またはジェスチャー認識装置を含んでいてもよい。ユーザインターフェイス入力装置はまた、ユーザから目の活動(たとえば、写真撮影中および/またはメニュー選択中の「まばたき」)を検出し、アイジェスチャーを入力装置(たとえば、グーグル・グラス(登録商標))への入力として変換する、グーグル・グラス(登録商標)まばたき検出器などのアイジェスチャー認識装置を含んでいてもよい。加えて、ユーザインターフェイス入力装置は、ユーザが音声コマンドを通して音声認識システム(たとえば、Siri(登録商標)ナビゲータ)とやりとりできるようにする音声認識感知装置を含んでいてもよい。
【0059】
ユーザインターフェイス入力装置はまた、3次元(3D)マウス、ジョイスティックまたはポインティングスティック、ゲームパッドおよびグラフィックタブレット、ならびに、スピーカ、デジタルカメラ、デジタルビデオカメラ、携帯型メディアプレイヤー、ウェブカメラ、画像スキャナ、指紋スキャナ、バーコードリーダ3Dスキャナ、3Dプリンタ、レーザー測距器、および視線追跡装置などの音声/視覚装置を、何ら限定されることなく含んでいてもよい。加えて、ユーザインターフェイス入力装置は、たとえば、コンピュータ断層撮影装置、磁気共鳴撮像装置、ポジトロン放出断層撮影装置、医療用超音波検査装置などの医療用撮像入力装置を含んでいてもよい。ユーザインターフェイス入力装置はまた、たとえば、MIDIキーボード、デジタル楽器などの音声入力装置を含んでいてもよい。
【0060】
ユーザインターフェイス出力装置は、表示サブシステム、表示灯、または、音声出力装置などの非視覚的ディスプレイを含んでいてもよい。表示サブシステムは、陰極線管(cathode ray tube:CRT)、液晶ディスプレイ(liquid crystal display:LCD)またはプラズマディスプレイを使用するものなどのフラットパネル装置、投影装置、タッチスクリーンなどであってもよい。一般に、「出力装置」という用語の使用は、コンピュータシステム300からユーザまたは他のコンピュータに情報を出力するためのあらゆる可能なタイプの装置およびメカニズムを含むよう意図されている。たとえば、ユーザインターフェイス出力装置は、モニタ、プリンタ、スピーカ、ヘッドホン、自動車ナビゲーションシステム、プロッタ、音声出力装置、およびモデムといった、テキスト、グラフィックスおよび音声/映像情報を視覚的に伝えるさまざまな表示装置を、何ら限定されることなく含んでいてもよい。
【0061】
コンピュータシステム300は、現在システムメモリ310内に位置するとして図示されたソフトウェア要素を含む記憶サブシステム318を含んでいてもよい。システムメモリ310は、処理部304上でロード可能および実行可能なプログラム命令と、これらのプログラムの実行中に生成されたデータとを格納してもよい。
【0062】
コンピュータシステム300の構成およびタイプに依存して、システムメモリ310は揮発性(ランダムアクセスメモリ(random access memory:RAM)など)であってもよく、および/または不揮発性(読出専用メモリ(read-only memory:ROM)、フラッシュメモリなど)であってもよい。RAMは典型的には、処理部304に直ちにアクセス可能であり、および/または処理部304によって現在動作および実行中のデータおよび/またはプログラムモジュールを含む。いくつかの実現化例では、システムメモリ310は、スタティックランダムアクセスメモリ(static random access memory:SRAM)またはダイナミックランダムアクセスメモリ(dynamic random access memory:DRAM)などの複数の異なるタイプのメモリを含んでいてもよい。いくつかの実現化例では、起動中などにコンピュータシステム300内の要素間で情報を転送するのに役立つ基本ルーチンを含む基本入力/出力システム(basic input/output system:BIOS)が、典型的にはROMに格納されていてもよい。限定のためではなく例として、システムメモリ310はまた、クライアントアプリケーション、ウェブブラウザ、中央層アプリケーション、リレーショナルデータベース管理システム(relational database management system:RDBMS)などを含み得るアプリケーションプログラム312と、プログラムデータ314と、オペレーティングシステム316とを示す。例として、オペレーティングシステム316は、マイクロソフト・ウィンドウズ(登録商標)、アップル・マッキントッシュ(登録商標)、および/またはLinuxオペレーティングシステムのさまざまなバージョン、商業的に入手可能なさまざまなUNIX(登録商標)またはUNIX様オペレーティングシステム(さまざまなGNU/Linuxオペレーティングシステム、グーグル・クローム(登録商標)OSなどを何ら限定されることなく含む)、および/または、iOS、ウィンドウズ(登録商標)フォン、アンドロイド(登録商標)OS、ブラックベリー(登録商標)10OS、パーム(登録商標)OSオペレーティングシステムなどのモバイルオペレーティングシステムを含んでいてもよい。
【0063】
記憶サブシステム318はまた、いくつかの実施形態の機能性を提供する基本プログラミングおよびデータ構造を格納するための有形のコンピュータ読取可能記憶媒体を提供してもよい。プロセッサによって実行されると上述の機能性を提供するソフトウェア(プログラム、コードモジュール、命令)が、記憶サブシステム318に格納されてもよい。これらのソフトウェアモジュールまたは命令は、処理部304によって実行されてもよい。記憶サブシステム318はまた、この発明に従って使用されるデータを格納するためのリポジトリを提供してもよい。
【0064】
記憶サブシステム300はまた、コンピュータ読取可能記憶媒体322にさらに接続され得るコンピュータ読取可能記憶媒体リーダ320を含んでいてもよい。システムメモリ310とともに、およびオプションでシステムメモリ310と組合わされて、コンピュータ読取可能記憶媒体322は、リモート、ローカル、固定および/またはリムーバブルの記憶装置に加えて、コンピュータ読取可能情報を一時的におよび/またはより永続的に含み、格納し、送信し、検索するための記憶媒体を包括的に表わしてもよい。
【0065】
コードまたはコードの一部を含むコンピュータ読取可能記憶媒体322はまた、情報の格納および/または送信のためのあらゆる方法または技術で実現される揮発性および不揮発性でリムーバブルおよび非リムーバブルの媒体を含むがそれらに限定されない記憶媒体および通信媒体を含む、当該技術分野において公知であるかまたは使用されるあらゆる適切な媒体を含み得る。これは、RAM、ROM、電子的消去可能プログラマブルROM(electronically erasable programmable ROM:EEPROM)、フラッシュメモリまたは他のメモリ技術、CD−ROM、デジタル多用途ディスク(digital versatile disk:DVD)または他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気記憶装置、もしくは他の有形のコンピュータ読取可能媒体といった、非一時的で有形のコンピュータ読取可能記憶媒体を含み得る。これは、所望の情報を送信するために使用可能であり、コンピューティングシステム300によってアクセスされ得るデータ信号、データ送信、または任意の他の媒体といった、非有形のコンピュータ読取可能媒体も含み得る。
【0066】
例として、コンピュータ読取可能記憶媒体322は、非リムーバブルで不揮発性の磁気媒体から読出し、またはそれに書込むハードディスクドライブ、リムーバブルで不揮発性の磁気ディスクから読出し、またはそれに書込む磁気ディスクドライブ、ならびに、CD ROM、DVD、およびBlu−Ray(登録商標)ディスク、または他の光学媒体といった、リムーバブルで不揮発性の光ディスクから読出し、またはそれに書込む光ディスクドライブを含んでいてもよい。コンピュータ読取可能記憶媒体322は、Zip(登録商標)ドライブ、フラッシュメモリカード、ユニバーサルシリアルバス(universal serial bus:USB)フラッシュドライブ、セキュアデジタル(secure digitalSD)カード、DVDディスク、デジタルビデオテープなどを含んでいてもよいが、それらに限定されない。コンピュータ読取可能記憶媒体322はまた、フラッシュメモリベースのソリッドステートドライブ(solid-state drive:SSD)、企業フラッシュドライブ、ソリッドステートROMといった、不揮発性メモリに基づいたSSD、ソリッドステートRAM、ダイナミックRAM、スタティックRAM、DRAMベースのSSD、磁気抵抗RAM(MRAM)SSDといった、揮発性メモリに基づいたSSD、および、DRAMベースのSSDとフラッシュメモリベースのSSDとの組合せを使用するハイブリッドSSDを含んでいてもよい。ディスクドライブおよびそれらの関連付けられたコンピュータ読取可能媒体は、コンピュータ読取可能命令、データ構造、プログラムモジュールおよび他のデータの不揮発性ストレージをコンピュータシステム300に提供してもよい。
【0067】
通信サブシステム324は、他のコンピュータシステムおよびネットワークへのインターフェイスを提供する。通信サブシステム324は、コンピュータシステム300とは別のシステムからデータを受信し、別のシステムにデータを送信するためのインターフェイスとして機能する。たとえば、通信サブシステム324は、コンピュータシステム300がインターネットを介して1つ以上の装置に接続できるようにしてもよい。いくつかの実施形態では、通信サブシステム324は、(たとえば、3G、4G、またはEDGE(enhanced data rates for global evolution:エンハンスト・データレート・フォー・グローバル・エボリューション)、WiFi(IEEE802.11ファミリー規格)、または他の移動通信技術、またはそれらの任意の組合せといった携帯電話技術、高度なデータネットワーク技術を使用した)無線音声および/またはデータネットワークにアクセスするための無線周波数(radio frequency:RF)トランシーバコンポーネント、全地球測位システム(global positioning system:GPS)受信機コンポーネント、および/または他のコンポーネントを含み得る。いくつかの実施形態では、通信サブシステム324は、無線インターフェイスに加えて、またはその代わりに、有線ネットワーク接続(たとえば、イーサネット)を提供できる。
【0068】
いくつかの実施形態では、通信サブシステム324はまた、コンピュータシステム300を使用し得る1人以上のユーザのために、構造化および/または非構造化データフィード326、イベントストリーム328、イベント更新330などの形をした入力通信を受信してもよい。
【0069】
例として、通信サブシステム324は、ツイッター(登録商標)フィード、フェースブック(登録商標)更新、リッチ・サイト・サマリー(Rich Site Summary:RSS)フィードなどのウェブフィード、および/または1つ以上の第三者情報源からのリアルタイム更新といった、ソーシャルネットワークおよび/または他の通信サービスのユーザからのデータフィード326をリアルタイムで受信するように構成されてもよい。
【0070】
加えて、通信サブシステム324はまた、リアルタイムイベントのイベントストリーム328および/またはイベント更新330を含み得る、明確な終わりがなく本質的に連続的または無限であり得る連続データストリームの形をしたデータを受信するように構成されてもよい。連続データを生成するアプリケーションの例は、たとえば、センサデータアプリケーション、金融ティッカー、ネットワーク性能測定ツール(たとえば、ネットワーク監視およびトラフィック管理アプリケーション)、クリックストリーム分析ツール、自動車交通監視などを含んでいてもよい。
【0071】
通信サブシステム324はまた、構造化および/または非構造化データフィード326、イベントストリーム328、イベント更新330などを、コンピュータシステム300に結合された1つ以上のストリーミングデータソースコンピュータと通信し得る1つ以上のデータベースに出力するように構成されてもよい。
【0072】
コンピュータシステム300は、ハンドヘルド携帯装置(たとえば、iPhone(登録商標)携帯電話、iPad(登録商標)コンピューティングタブレット、PDA)、ウェアラブル装置(たとえば、グーグル・グラス(登録商標)頭部装着型ディスプレイ)、PC、ワークステーション、メインフレーム、キオスク、サーバラック、または任意の他のデータ処理システムを含む、さまざまなタイプのうちの1つであり得る。
【0073】
コンピュータおよびネットワークの絶えず変化する性質により、図に示すコンピュータシステム300の説明は、単に特定の一例として意図される。図に示すシステムよりも多い、または少ないコンポーネントを有する多くの他の構成が可能である。たとえば、カスタマイズされたハードウェアも使用されてもよく、および/または、特定の要素が、ハードウェア、ファームウェア、ソフトウェア(アプレットを含む)、または組合せで実現されてもよい。また、ネットワーク入力/出力装置などの他のコンピューティング装置への接続が採用されてもよい。ここに提供される開示および教示に基づいて、当業者であれば、さまざまな実施形態を実現するための他のやり方および/または方法を理解するであろう。
【0074】
上に紹介されたように、この発明の実施形態は、コンピュータネットワーク間で送信されるメッセージを処理するための手法を提供する。より特定的には、物理的または論理的サブネットワーク内に実装されたプロキシサーバといった、中間ネットワーク装置またはアプリケーションが、通信エンドポイント間でメッセージを受信し、処理し、送信してもよい。いくつかの実施形態では、リバースプロキシサーバが、リバースプロキシサーバ内にレプリゼンテーショナル・ステート・トランスファー(REST)サービスおよびRESTリソースを動的に生成するように構成されてもよい。リバースプロキシサーバ内のRESTサービスおよびRESTリソースは、クライアント装置からの着信要求を扱ってバックエンドウェブサービスを呼び出してもよく、それにより、リバースプロキシサーバ上のさまざまなセキュリティポリシーの設計抽象化および/または実施を可能にする。
【0075】
さまざまな実施形態では、プロキシサーバは、プロキシサーバ内のRESTウェブサービスによって公開された特定のリソースに対するウェブサービス要求を受信してもよい。プロキシサーバにおけるRESTウェブサービス内の適切なリソースが呼び出されてもよく、次にバックエンドウェブサービスを呼び出してもよい。場合によっては、リバースプロキシサーバは、さまざまなバックエンドウェブサービスを仮想化して不明瞭にする一組のRESTウェブサービスを公開してもよい。たとえば、リバースプロキシサーバは、信頼できないネットワーク上のクライアント装置が基盤のバックエンドウェブサービスを読み取らないように、または当該バックエンドウェブサービスについての知識を持たないように、仮想ユニフォームリソースロケータ(URL)のみを公開してもよい。追加の局面によれば、クライアント装置から受信されたREST要求のうちのいくつかまたはすべてを扱うために、RESTサービスおよびRESTリソースがリバースプロキシサーバ内に生成されてもよい。これらのRESTサービス/リソースは、リバースプロキシサーバ内でREST要求を扱うように、および/またはバックエンドウェブサービスの対応する組を呼び出すように、動的に生成され構成されてもよい。RESTウェブサービス/リソースを動的に生成し管理するために、RESTインフラストラクチャおよび/またはRESTアプリケーションエンジンが、リバースプロキシサーバ内に実装されてもよい。加えて、ある実施形態では、リバースプロキシサーバ内のRESTリソースは、バックエンドウェブサービスコールを生成して、さまざまなポリシーを実施するためのポリシー実施エンジンに提供してもよい。
【0076】
図4Aおよび図4Bは、さまざまなコンピュータネットワークにおけるコンピューティング装置および/またはシステム間でメッセージを処理して送信するためのリバースプロキシサーバ420を含むコンピューティング環境400aおよび400bのコンポーネントを示すブロック図である。この例に示すコンピューティング環境400aおよび400b(総称して400)は、ウェブアプリケーションおよびウェブサービス430といったバックエンドコンピューティングリソースへのアクセスをさまざまなクライアント装置410に提供するように設計された高レベルコンピュータアーキテクチャに対応していてもよい。さまざまな実施形態では、コンピューティング環境400は、小さく単純なコンピューティングシステムから、大きく非常に複雑なシステムに及ぶ場合があり、当該システムは、さまざまな組織のコンピューティング需要をサポートするために他のそのようなシステムと統合するように設計されたハードウェア、ソフトウェア、およびネットワークコンポーネントを含む。コンピューティング環境400は、多層コンピュータアーキテクチャとして実現されてもよく、それはウェブベースの、および/またはクラウドベースの実装を含んでいてもよく、そこでは、さまざまなエンドポイント装置(たとえば、ユーザ装置410、ウェブサービスプロバイダ430など)が、1つ以上の中間層システムを介してやりとりする。加えて、コンピューティング環境400に示す各コンポーネントは、ハードウェア、ソフトウェア、および/またはネットワークコンポーネントのさまざまな組合せを含む、個々のコンピュータシステムとして実装されてもよい。他の場合、コンピューティング環境400に示す複数のコンポーネントは、組合わせたコンピュータシステム内で動作する論理的サブコンポーネント(たとえば、コンピュータ読取可能媒体上で具現化されたソフトウェアアプリケーションなど)として実装されてもよい。
【0077】
図4Aおよび図4Bに示すように、そのようなコンピューティング環境400は、クライアント装置410が、1つ以上のコンピュータネットワーク415、1つ以上のファイアウォール435、リバースプロキシサーバ420、および/または他の中間ネットワーク装置を介して、1つ以上のバックエンドウェブサービス430に要求を送信し得る、クライアント−サーバシステムに対応していてもよい。ウェブサービス430は、簡易オブジェクトアクセスプロトコル(Simple Object Access protocol:SOAP)ウェブサービスまたはAPI、レプリゼンテーショナル・ステート・トランスファー(REST)ウェブサービスまたはAPI、および/または、ハイパーテキスト転送プロトコル(HTTP)またはHTTPセキュアプロトコルを介して公開されたウェブコンテンツを何ら限定されることなく含む、さまざまなシステム430によって公開された任意のアプリケーションプログラムインターフェイス(application programming interface:API)、サービス、アプリケーション、および任意の他の情報資産を含んでいてもよい。そのような場合、リバースプロキシサーバ420は、クライアント装置410とバックエンドウェブサービス430との間にセキュリティ層を提供してもよい。たとえば、プロキシサーバ420は、バックエンドウェブサービス430のための中央アクセスポイントを、バックエンドウェブサービス430に関連付けられたさまざまなセキュリティおよび管理ポリシーのサービス仮想化および実施とともに提供してもよい。リバースプロキシサーバ420はまた、これらのサービス430を仮想化して不明瞭にしながら、バックエンドウェブサービス430を公開してもよい。たとえば、リバースプロキシサーバ420は、信頼できないネットワーク上のクライアント装置410が基盤のバックエンドウェブサービス430を読み取らないように、またはバックエンドウェブサービス430についての知識を持たないように、仮想ユニフォームリソースロケータ(URL)のみを公開してもよい。
【0078】
それに加えて、またはそれに代えて、コンピューティング環境400は、要求−応答を逆方向に処理して送信するためのクライアント−サーバシステムとして構成されてもよい。たとえば、いくつかの実施形態では、内部コンピュータネットワーク460内で動作する1つ以上のクライアント装置(図示せず)が、プロキシサーバ420およびファイアウォール435aを超えて、さまざまな外部コンピュータシステムおよびネットワーク480上で動作するウェブサービスまたはアプリケーション(図示せず)に要求を送信してもよい。このため、サーバ420はここにリバースプロキシサーバ420と呼ばれるものの、それはフォワードプロキシサーバとしても作用してもよく、内部クライアント装置440と外部バックエンドウェブサービスまたはアプリケーションとの間にセキュリティ層を提供してもよい、ということが理解されるべきである。リバースプロキシの機能性(すなわちリバースプロキシモード)またはフォワードプロキシの機能性(すなわちフォワードプロキシーモード)のいずれかを行なう場合、リバースプロキシサーバ420は、SOAPウェブサービス、RESTウェブサービス、HTTP/HTTPSウェブコンテンツなどへのネットワーク要求、およびそれらからの応答を扱ってもよい。プロキシサーバ420がフォワードプロキシサーバとして動作している場合、内部クライアント装置は、外部バックエンドウェブサービス/アプリケーションについてすでに知っているかもしれず、それらのバックエンドサービス/アプリケーションは、クライアント側に構成されたプロキシサーバ420から直接送信を受信するかもしれない。そのような場合、プロキシサーバ420は、任意のセキュリティまたは通信管理ポリシーを使用して、フォワードプロキシユニフォームリソース識別子(uniform resource identifier:URI)エンドポイントのためのセキュリティを提供してもよい。フォワードプロキシモードまたはリバースプロキシモードのいずれであっても、プロキシサーバ420は、Kerberos Kinitベースの認証、Kerberos Pkinitベースの認証、オープン・スタンダード・フォー・オーソライゼーション・プロトコル・バージョン2.0(open standard for authorization protocol version 2.0:OAuth2)ベースの認証、TLPベースの認証といったさまざまなセキュリティおよび認証特徴をサポートし、単純で保護されたGSSAPIネゴシエーションメカニズム(Simple and Protected GSSAPI Negotiation Mechanism:SPNEGO)トークン、WINDOWS(登録商標)NT LANマネージャ(WINDOWS NT LAN Manager:NTLM)トークン、セキュリティアサーションマークアップ言語(Security Assertion Markup Language:SAML)トークンなどを使用してバックエンドサービスのセッショントークンおよび/またはチャレンジベースの認証を作成する。
【0079】
クライアント装置410は、図1〜3の例示的なコンピューティングシステムにおける上述のハードウェア、ソフトウェア、およびネットワーキングコンポーネントのうちのいくつかまたはすべてを含む、デスクトップまたはラップトップコンピュータ、モバイル装置、および他のさまざまなコンピューティング装置/システムを含んでいてもよい。いくつかの実施形態では、クライアント装置410は、バックエンドウェブサービス430からデータを要求して受信するように構成された1つ以上のクライアントソフトウェアアプリケーション(たとえばウェブブラウザ)を含んでいてもよい。クライアント装置410はまた、ネットワークインターフェイス、セキュリティおよび認証能力、ならびに、ライブコンテンツを受信してそれをユーザにリアルタイムで(またはほぼリアルタイムで)提供するコンテンツキャッシング能力を確立するために、必要なハードウェアおよびソフトウェアコンポーネントを含んでいてもよい。
【0080】
通信ネットワーク415は、ここに説明されるコンピュータネットワークおよび他の通信ネットワークの任意の組合せを含んでいてもよい。たとえば、ネットワーク415は、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(wide area network:WAN)(たとえばインターネット)、およびさまざまな無線通信ネットワークといった、TCP/IP(伝送制御プロトコル/インターネットプロトコル)ネットワークを含んでいてもよい。加えて、通信ネットワーク415は、バックエンドウェブサービス430からクライアント装置410を分離する多くの異なる物理的および論理的ネットワークの組合せを表わしてもよい、ということが理解されるべきである。1つ以上のファイアウォール435に加えて、ウェブサーバ、認証サーバなどのさまざまなサーバ、および/または、ファイアウォール、ルータ、ゲートウェイ、ロードバランサなどの特殊なネットワーキングコンポーネントが、クライアント装置410とバックエンドウェブサービス430との通信を容易にしてもよい。
【0081】
いくつかの実施形態では、リバースプロキシサーバ420は、隔てられたコンピュータシステム(たとえばプロキシコンピュータサーバ)として、または、図4Bに示すように、隔てられたDMZ470内に特殊なハードウェア、ソフトウェア、およびネットワークコンポーネントを含む、コンピュータが複数のコンピューティングシステムの組合せとして実装されてもよい。それに代えて、またはそれに加えて、リバースプロキシサーバ420は、信頼できるネットワーク460内のネットワーク装置(たとえば、ウェブサーバまたはファイアウォール435b)またはコンピュータサーバ内で実行されるプロキシサーバソフトウェアアプリケーションであってもよい。このため、リバースプロキシサーバ420は、図4Aに示すように、内部コンピュータネットワーク460の物理的または論理的サブネットワーク465に存在していてもよい。いずれの場合も、リバースプロキシサーバ420は、信頼できる内部ネットワーク460上のクライアント/サーバと、信頼できない外部ネットワーク480上のクライアント/サーバとの間の仲介主体として作用してもよい。加えて、リバースプロキシサーバ420内のコンポーネント421〜423の各々(ならびに、図5図7および図9を参照して説明される他のプロキシサーバコンポーネント)は、リバースプロキシサーバ420と通信するように構成された別個のコンピューティングシステムとして実装されてもよく、または、リバースプロキシサーバ420と同じコンピュータサーバ内に統合された論理的サブコンポーネントとして動作してもよい。いずれの場合も、各コンポーネント421〜423(ならびに、図5図7および図9を参照して説明される他のプロキシサーバコンポーネント)は、ここに説明される手法を行なうために、特殊なハードウェア、ソフトウェア、ネットワーク、およびメモリサブシステムを使用して実装されてもよい。
【0082】
この例では、リバースプロキシサーバ420は、クライアント装置410から通信ネットワーク415および/またはファイアウォール435aを介してメッセージを受信するように構成されたメッセージハンドラ421を含む。いくつかの実施形態では、メッセージハンドラ421は、任意の外部ネットワークからバックエンドウェブサービス430へのすべてのTCP、UDP、HTTP、およびHTTPSトラフィックのためのエントリポイントであってもよい。メッセージハンドラ421はまた、バックエンドウェブサービス430から応答を受信し、その応答をクライアント装置410に送信するように構成されてもよい。いくつかの例では、メッセージハンドラ421は、1つ以上の特殊なハードウェア、ソフトウェア、およびネットワークコンポーネント、たとえばロードバランサ、キャッシュ、および/またはメッセージスロットラーを含んでいてもよい。
【0083】
メッセージを受信して構文解析した後で、メッセージハンドラ421は、(たとえば、Javaネーティブインターフェイス(Java Native Interface:JNI)または.NETプログラミングフレームワークなどを介して)メッセージを適切なウェブサービスフレームワークに送信してもよい。たとえば、リバースプロキシサーバ420で受信されたSOAP要求は、SOAPウェブサービスフレームワーク(図示せず)に送信されてもよく、一方、REST要求は、RESTウェブサービスフレームワーク(たとえば、RESTインフラストラクチャ422)に送信されてもよい。ウェブコンテンツ要求は、メッセージハンドラ421により、たとえば、要求を構文解析し、URL仮想化コンポーネントまたはサービスといったさまざまなコンポーネントに送信することによって同様に扱われてもよい。場合によっては、メッセージハンドラ421はまた、SOAPからRESTへの、およびRESTからSOAPへの、ならびに、JavaScript(登録商標)オブジェクト表記法(JavaScript Object Notation:JSON)からXMLへの、またはJSONからSOAPへの、およびその逆のメッセージ変換といったプロトコル変換を行なうように構成されてもよい。
【0084】
プロキシサーバ420はまた、レプリゼンテーショナル・ステート・トランスファー(REST)インフラストラクチャ422と、1つ以上のRESTウェブサービス(またはREST API)423とを含んでいてもよい。図4に示すように、RESTインフラストラクチャ422は、要求ハンドラ421から、RESTウェブサービスに対する要求を受信してもよい。以下により詳細に説明されるように、RESTインフラストラクチャ422は、REST要求を分析して処理してから、要求を扱うための適切なRESTサービス423にそれらを発送してもよい。各RESTサービス423は、要求を扱い、要求に基づいて対応するバックエンドウェブサービス430を呼び出すように構成されたRESTリソースを含んでいてもよい。加えて、いくつかの実施形態では、RESTインフラストラクチャ422は、要求を扱うためのRESTサービス423および個々のRESTリソースを動的に生成してもよい。
【0085】
RESTインフラストラクチャ422は、RESTウェブサービス(RESTフルウェブサービス、RESTフルAPIなどとも呼ばれる)を開発して実行するためのウェブサービスフレームワークを含んでいてもよい。いくつかの実施形態では、RESTインフラストラクチャ422は、JAX−RS(Java API for RESTful Web Services)仕様の実装、たとえばJAX−RSのJERSEYリファレンス実装であってもよい。JAX−RSおよびJERSEYウェブサービス/APIインフラストラクチャに関して以下の多くの例が説明されるが、他の例では他のフレームワークおよび手法が使用されてもよい。たとえば、SCALA、BOWLING FINCH/FINAGLEフレームワークといった他のRESTウェブフレームワーク/APIサーバが、JERSEYおよびJAX−RSの代わりに、またはそれらに加えて使用されてもよい。
【0086】
さまざまな実施形態では、RESTインフラストラクチャ422は、(たとえば、JERSEY JAVAサーブレットコンテナ内に)RESTウェブサービスを実装するためのライブラリを含んでいてもよく、また、RESTリソースを識別するために予め定義されたクラスをスキャンするように構成されたアプリケーション(たとえば、JERSEY JAVAサーブレット)を提供してもよい。RESTインフラストラクチャ422はまた、RESTウェブサービス423および/または430と通信するためのクライアントライブラリを提供してもよい。クライアント装置から要求を受信すると、RESTインフラストラクチャ内のアプリケーション(たとえば、JERSEY JAVAサーブレット)は、着信HTTP要求を分析し、その要求に応答するために正しいリソースおよび方法を選択してもよい。あるタイプのウェブサービスとは異なり、RESTウェブサービスは、XMLまたは任意の他の特定のデータフォーマットで通信しなくてもよい。したがって、RESTインフラストラクチャ422は、XML、JavaScriptオブジェクト表記法(JSON)、コンマ区切り形式(comma-separated values:CSV)、またはさまざまな他のデータフォーマットでのデータの作成をサポートしてもよい。
【0087】
図4Aおよび図4Bに示すように、リバースプロキシサーバ420は、2つ以上のコンピュータネットワーク間、たとえば、ウェブサービス430を提供する信頼できる内部ネットワーク460と、信頼できないさまざまなクライアント装置410が内部ウェブサービス430にアクセスし得る信頼できない外部ネットワーク480(たとえばインターネット)との間の、中間ネットワーク装置内に実装されてもよい。図4Aに示すように、リバースプロキシサーバ420は、内部コンピュータネットワーク460のためのセキュリティおよび通信管理の初期層を提供するために、内部コンピュータネットワーク460のサブネットワーク465内で動作してもよい。たとえば、安全な内部ネットワーク460は、複数のウェブサービスおよびアプリケーション430を、さまざまな他のサーバおよび/またはクライアント装置とともに含んでいてもよい。リバースプロキシサーバ420および/または追加のネットワークまたはコンピューティング装置は、同じ内部ネットワーク460の一部であってもよいが、1つ以上のゲートウェイ、ファイアウォール435bなどによって内部コンピュータネットワークから分離された、内部コンピュータネットワークの物理的サブネットワーク465内で動作してもよい。いくつかの例では、リバースプロキシサーバ420は、内部コンピュータネットワーク460の(物理的サブネットワークではなく)論理的サブネットワーク465内で実行されるプロキシサーバアプリケーションとして実装されてもよい。このため、リバースプロキシサーバ420は、内部コンピュータネットワーク460内のバックエンドウェブサービス430または他のコンピュータシステムのうちの1つ以上と同じコンピューティングシステム上に存在していてもよい。
【0088】
加えて、いくつかの実施形態では、リバースプロキシサーバ420は、信頼できる内部ネットワーク460と信頼できない外部ネットワーク480との間の非武装ゾーン(demilitarized zone:DMZ)ネットワーク470内で動作してもよい。図4Bに示すように、DMZネットワーク470は、専用のハードウェア、ソフトウェア、およびネットワークコンポーネントを有し、内部ネットワーク460および外部ネットワーク480双方から隔てられた、全く別個のコンピューティングシステムとして実装されてもよい。それに代えて、図4Aに示すように、DMZは、信頼できる内部ネットワーク460の物理的または論理的サブネットワーク465として実装されてもよく、それにより、DMZは、クライアント装置410および/またはバックエンドウェブサービス430で提供されるエンドポイントセキュリティとは別の、セキュリティおよび通信管理の第1の層を提供する。いずれの場合も、DMZネットワークは、2つのファイアウォール435aと435bとの間に実装されてもよく、もしくは、単一のファイアウォールを使用して、または、信頼できる内部ネットワーク460および信頼できない外部ネットワーク415双方からDMZネットワーク470またはサブネットワーク465を物理的にまたは論理的に分離するネットワーク装置の他のさまざまな構成を使用して、実装されてもよい。リバースプロキシサーバ420など、DMZ内のすべてのコンピュータサーバおよび他の装置は、内部ネットワーク460内の装置のある特定の部分集合(たとえば、ウェブサービス430をホストする特定のサーバ)への限定された接続性を有していてもよい。そのような接続性は、特定のホスト、ポート、プロトコルなどに基づいて限定されてもよい。同様に、信頼できない任意の外部ネットワーク(たとえば、ネットワーク415およびクライアント装置410)と通信する際、限定された接続性のポリシーがDMZ内の装置に対して実施されてもよい。DMZ内でリバースプロキシサーバ420を動作させることに加えて、ある実施形態では、DMZ内でバックエンドウェブサービス430のうちの1つ以上が動作してもよい。たとえば、外部システムからの攻撃をより受けやすいあるコンピュータサーバ/サービス(たとえば、ウェブサーバ、電子メールサーバ、ドメイン名システム(Domain Name System:DNS)サーバなど)を、プロキシサーバ420とともにDMZ内に移動させてもよい。
【0089】
図5は、1つ以上の実施形態に従ったリバースプロキシサーバのある要素およびシステムを示すブロック図である。この例のリバースプロキシサーバ520はリバースプロキシ420に対応していてもよく、リバースプロキシサーバ520のさまざまなサブコンポーネント521〜523は、上述の対応するサブコンポーネント421〜423と同様または同一であってもよい。加えて、リバースプロキシサーバ520は、コンピューティング環境400または他の同様の環境内で動作してもよく、クライアントコンピューティング装置とバックエンドウェブサービスとの間でメッセージを処理して送信するように構成されてもよい。したがって、リバースプロキシサーバ520は、図4Aおよび図4Bを参照して上述されたハードウェア、ソフトウェア、およびネットワーキングコンポーネントならびに機能性のうちのいくつかまたはすべてを含んでいてもよい。
【0090】
RESTインフラストラクチャ522は、RESTサービスおよびリソースを開発し、デプロイメントし、実行し、それらにアクセスするためのさまざまなコンポーネント(たとえば、アプリケーションおよびライブラリ)を有する1つ以上のRESTウェブサービスフレームワークを含んでいてもよい。さまざまな実施形態では、RESTインフラストラクチャ522は、JAX−RS仕様のJERSEY実装、および/または他のRESTウェブサービスフレームワーク実装を含んでいてもよい。RESTインフラストラクチャ522は、RESTウェブサービスを実装するための1つ以上のライブラリ、RESTリソースを識別するために予め定義されたクラスをスキャンするためのアプリケーション、RESTウェブサービスと通信するためのクライアントライブラリなどを提供してもよい。
【0091】
上述のように、要求ハンドラ521はREST要求をRESTインフラストラクチャ522に発送してもよく、RESTインフラストラクチャ522はそれらの要求を分析し処理してから、リバースプロキシサーバ520内の1つ以上のRESTサービスにそれらを発送してもよい。この例では、RESTインフラストラクチャ522は、RESTスタック524と、静的RESTアプリケーション525(たとえば、構築時間中に生成されたJERSEYアプリケーション)と、RESTプロバイダリソース526とを含む。以下により詳細に説明されるように、リバースプロキシサーバ520は、RESTスタック524を動的に(すなわち実行時間中に)初期化し、静的RESTアプリケーション525を登録してもよい。静的RESTアプリケーション525は、要求を扱うための適切なRESTサービス523のルートリソースを識別することを担当し得るRESTプロバイダリソース526に戻してもよい。
【0092】
図5に示すように、RESTプロバイダリソース526は、リバースプロキシサーバ520内の任意のRESTサービス523に要求を発送してもよい。この例では、要求はRESTサービス523bに発送され、そのRESTサービスにおけるルートリソース527によって受信されている。この例に示すように、RESTサービス523はリソース階層構造として設計され実装されてもよく、そこでは、ルートリソース527はサービス523内で最高レベルのリソースであり(たとえば、サービスの「/」パスにマッピングされる)、異なる要求を扱うであろうサブリソース528(または子リソース)を識別することを担当する。以下により詳細に説明されるように、ルートリソース527および/またはすべての子リソース528は双方とも、動的RESTリソース(たとえば、実行時間中に作成されたリソース)として作成されてもよい。加えて、この例では単純な2レベルの階層構造が示されているが、他の例では、多くの異なるレベル(たとえば、3レベル、4レベル、5レベルなど)の複雑な階層構造が実装されてもよい。
【0093】
ここで図6A図6B(総称して「図6」)を参照して、リバースプロキシサーバを介してRESTウェブサービス要求を受信して処理するためのプロセスを示すフローチャートが示される。以下に説明されるように、このプロセスにおけるステップは、コンピューティング環境400における1つ以上のコンポーネント、たとえば、リバースプロキシサーバ420(および/またはリバースプロキシサーバ520、720、および920)、ならびに、そこに実装されたさまざまなサブシステムおよびサブコンポーネントによって行なわれてもよい。加えて、いくつかの実施形態では、このプロセスにおけるあるステップは、クライアント装置410、バックエンドウェブサービス430内で、および/または他のさまざまな中間装置によって行なわれてもよい。メッセージを受信して分析すること、メッセージ処理ポリシーを選択すること、およびメッセージを処理することを含む、ここに説明される手法は、上述の特定のシステムおよびハードウェア実装に限定されなくてもよく、ハードウェア、ソフトウェア、およびネットワークコンポーネントの他の組合せを含む他のハードウェアおよびシステム環境内で行なわれてもよい、ということがさらに理解されるべきである。
【0094】
ステップ601で、ウェブサービス要求が、リバースプロキシサーバ420といった中間コンピューティングシステムまたはアプリケーションによって受信されてもよい。上述のように、リバースプロキシサーバ420は、信頼できる内部ネットワーク460と1つ以上の信頼できない外部ネットワークとの間の中間サーバ装置および/またはアプリケーションとして実装されてもよい。したがって、リバースプロキシサーバ420は、クライアントエンドポイント(たとえば、クライアント装置410)によって送信され、サーバエンドポイント装置(たとえば、バックエンドウェブサービスおよび/またはアプリケーション430をホストするコンピュータサーバ)に向けられた、またはその逆のメッセージを遮ってもよい。
【0095】
いくつかの実施形態では、内部ネットワーク460に出入りするすべてのネットワークトラフィックは、リバースプロキシサーバ420を通してルーティングされてもよい。他の場合、リバースプロキシサーバ420は、特定のタイプまたはプロトコルのネットワークメッセージ、たとえば、クライアント装置410からのSOAP、REST、またはURLリソースに対するHTTP要求、および、SOAP、REST、またはURLウェブサービス/アプリケーション430からクライアント装置に戻るHTTP応答を遮るように構成されてもよい。したがって、ステップ601で受信されたウェブサービス要求は、たとえば、および何ら限定されることなく、TCPメッセージ、HTTPまたはHTTPSメッセージ、簡易メール転送プロトコル(Simple Mail Transport Protocol:SMTP)、ユーザデータグラムプロトコル(User Datagram Protocol:UDP)メッセージ、および/またはJavaメッセージサービス(Java Message Service:JMS)メッセージであってもよい。場合によっては、ウェブサービス要求は、クライアント装置410からバックエンドウェブサービス430へのSOAP、REST、またはウェブコンテンツ要求に対応していてもよく、もしくは、クライアント装置410からのSOAP、REST、またはウェブコンテンツ要求に対するバックエンドウェブサービス430による応答に対応していてもよい。
【0096】
ステップ602で、リバースプロキシサーバ420は、ステップ601で受信された要求を分析して、要求が、リバースプロキシサーバ420内のRESTサービス423/523によって公開されたRESTリソース528に向けられているか否かを判断してもよい。ここに使用されるように、プログラミングオブジェクトまたはデータオブジェクトといったリソースを「公開する」とは、リソースへのアクセスを提供するインターフェイスを提供することを指してもよい。たとえば、ウェブサービスおよびAPIは、クライアントアプリケーションがオブジェクトにアクセスすることおよび/またはオブジェクトを操作することを可能にする方法および動作を提供することによって、リソースを公開してもよい。
【0097】
上述のように、ステップ601で受信されたRESTウェブサービス要求は、バックエンドウェブサービス430に向けられてもよい(および/または、最終的に発送されてもよい)。しかしながら、さまざまな実施形態では、クライアント装置410から受信されたREST要求のうちのいくつかまたはすべてを扱うために、RESTサービスおよびリソースがリバースプロキシサーバ420内に生成されてもよい。たとえば、図4Aおよび図4Bに示すように、REST要求を扱うために、一組のRESTサービス423が、リバースプロキシサーバ420内に生成されてもよく、場合によっては対応する一組のバックエンドウェブサービス430を呼び出してもよい。このため、リバースプロキシサーバ420内の一組のRESTサービス423/523は、バックエンドウェブサービス430によって公開された同じリソースのうちのいくつかまたはすべてを公開してもよい。場合によっては、リバースプロキシサーバ420内のこれらのRESTサービス423は、「仮想サービス」と呼ばれてもよい。以下により詳細に説明されるように、これらのRESTサービス423は、ちょうどバックエンドウェブサービス430に対応していてもいなくてもよい。たとえば、単一のRESTサービス423が、複数の異なるバックエンドサービス430を呼び出すRESTリソース528を公開してもよく、または逆に、複数の異なるRESTサービス423が、同じバックエンドサービス430を呼び出してもよい。加えて、リバースプロキシサーバ420内のRESTサービス423は、バックエンドウェブサービス430によってサポートされない新規のもしくは異なる動作または方法、パラメータ、データタイプなどのためのサポートを含んでいてもよく、その逆もまた同様である。
【0098】
また、いくつかの実施形態では、あるRESTウェブサービス423および/またはRESTリソース527〜528は、リバースプロキシサーバ420内に動的に作成されてもよい。たとえば、リバースプロキシサーバ420内のRESTインフラストラクチャ422(および/または522、722、ならびに922)および/または他のコンポーネントは、実行時間中にさまざまなRESTサービスおよび/またはRESTリソースを生成、削除、置換、または更新してもよい。そのような場合、たとえあるRESTリソース528がある時間にリバースプロキシサーバ420上に存在しなかったとしても、それにもかかわらず、それらのリソースは依然として、同じ時間にリバースプロキシサーバ420によって公開されてもよい。たとえば、RESTウェブサービス423/523によって公開されたリソースのすべてを記述するために、ウェブアプリケーション記述言語(Web Application Description Language:WADL)ファイルが生成されてもよい。たとえRESTリソース528のうちのいくつかがまだ作成されていなかったとしても、WADLファイルは、どのRESTリソース528がRESTサービス423によって公開されるかを判断するために使用されてもよい。リバースプロキシサーバ420内でさまざまなRESTサービス423/523およびRESTリソース528を動的に生成し更新するための手法は、図7および図8を参照して以下により詳細に説明される。
【0099】
ステップ602で要求がリバースプロキシサーバ420内のRESTサービス423/523によって公開されたRESTリソース528に向けられているか否かを判断するために、要求は、要求宛先ならびにメッセージヘッダおよび/または本文の関連部分を識別するために、構文解析され、分析されてもよい。たとえば、要求が、RESTサービス423のためのWADLファイル(または他のウェブサービス記述データ)内のRESTリソースに対応するURLに向けられたHTTP要求である場合、要求ハンドラ421は、要求が、リバースプロキシサーバ420によって公開されたRESTリソース528に向けられていると判断してもよい(602:はい)。それに代えて、要求が、無効の要求、SOAP要求、通常のウェブコンテンツに対する要求、または、リバースプロキシサーバ420を介してアクセス可能ではないRESTリソースに向けられた要求である場合、要求ハンドラ421は、要求が、リバースプロキシサーバ420によって公開されたRESTリソース528に向けられていないと判断してもよい(602:いいえ)。
【0100】
ステップ603で、ステップ601で受信されたRESTウェブサービス要求は、リバースプロキシサーバ420内のRESTインフラストラクチャ422に発送されてもよい。たとえば、ステップ602でウェブサービス要求がリバースプロキシサーバ420によって公開されたRESTリソースに対する要求であると判断した後で、要求ハンドラ421は、RESTインフラストラクチャ422内のRESTスタック524に要求を発送してもよく、RESTスタック524は次に、静的RESTアプリケーション525に要求を発送してもよい。上述のように、いくつかの実施形態では、RESTスタック524はJAX−RSスタックであってもよく、静的RESTアプリケーションは、構築時間中に生成されたJERSEYアプリケーションであってもよい。場合によっては、リバースプロキシサーバ520内のコンポーネントは、JAX−RSスタック524を動的に初期化し、静的JERSEYアプリケーション525を登録するように構成されてもよい。
【0101】
ステップ604で、リバースプロキシサーバ420(および/またはリバースプロキシサーバ520、720、ならびに920)内のさまざまなコンポーネントは、要求されたRESTリソースが現在、リバースプロキシサーバ420上に存在するか否かを判断してもよい。上述のように、いくつかの実施形態では、RESTウェブサービス423は、リバースプロキシサーバ420内のRESTインフラストラクチャ422(および/または522、722、ならびに922)および/または他のコンポーネントによって、動的に作成されてもよく、すなわち、実行時間中に生成されてもよい。したがって、ステップ604で、RESTインフラストラクチャ422および/またはRESTサービス423は、要求されたRESTリソースが現在、リバースプロキシサーバ420上に存在するか否かを判断してもよい。場合によっては、REST要求を受信すると(602:はい)、RESTスタック524(たとえばJAX−RXスタック)は要求を受信し、静的RESTアプリケーション525(たとえばJERSEYアプリケーション)を呼び出してもよく、静的RESTアプリケーション525は、登録されたRESTプロバイダリソース526を呼び出してもよい。RESTプロバイダリソース526は、適切なRESTサービス423に、および/または仮想RESTサービス423内の適切なRESTリソース428に要求を委任してもよい。RESTプロバイダリソース526および/または呼び出されたRESTサービスのルートリソース527が、要求されたリソースが以前に生成されたと判断した場合(604:はい)、要求は、ステップ606でRESTサービス523のルートリソース527に発送され、次にステップ607で要求を扱うために適切なRESTリソース528に発送されてもよい。いくつかの実施形態では、プロバイダリソース526は、要求のURIを使用して適切なRESTルートリソース527を判断してもよく、RESTルートリソース527は、リソースの「/」パスにマッピングされてもよい。RESTルートリソース527は次に、要求を扱うために、サブリソースロケータを使用してリバースプロキシサーバ420内の実際のRESTリソース528を突きとめてもよい。
【0102】
それに代えて、RESTインフラストラクチャ526および/または呼び出されたRESTサービス523内の1つ以上のコンポーネントが、要求されたRESTリソースがまだ生成されていない(または、生成し直す必要がある)と判断した場合(604:いいえ)、ステップ605で、要求を扱うための要求された適切なRESTリソースが生成されてもよい。リバースプロキシサーバ420内での仮想RESTウェブサービス423の生成については、図7〜8を参照して以下により詳細に説明される。ステップ605で要求を扱うための適切なRESTリソースが生成された後で、要求は次に、ステップ606でRESTサービス523のルートリソース527に発送され、次にステップ607で新たに作成されたRESTリソース528に発送されてもよい。
【0103】
ステップ608で、要求を扱う間に、たとえば、リバースプロキシサーバ420内でRESTリソース528を実行する間に、1つ以上のバックエンドウェブサービスコールが判断されてもよい。いくつかの実施形態では、リソースが作成されると、ソフトウェアフックおよび/または他のカスタマイズされたソフトウェアコードが、RESTリソース528に挿入されてもよい。そのようなソフトウェアフックおよび/またはカスタマイズされたソフトウェアコードは、バックエンドRESTサービス430およびリソース、ならびに、バックエンドウェブサービス430へのコールで送信され得る個々の動作(または方法)、パラメータ、および他のデータを識別してもよい。要求を扱うためにリバースプロキシサーバ420上のRESTリソース528が呼び出されると、ソフトウェアフックおよび/またはカスタマイズされたソフトウェアコードが実行されてもよく、バックエンドウェブサービス430へのコールが生成されてもよい。
【0104】
場合によっては、ステップ608で判断されたバックエンドウェブサービスコールは、リバースプロキシサーバ420上のRESTリソース528によって扱われたREST要求と同様または同一であってもよい。たとえば、以下により詳細に説明されるように、リバースプロキシサーバ420内のRESTサービス423は、(たとえば、ウェブアプリケーション記述言語(WADL)ファイルに基づいて)同じリソース定義を有し、方法、パラメータなどをサポートする、バックエンドRESTサービス430のコピーとして作成されてもよい。そのような場合、リバースプロキシサーバ420上のRESTリソース528は、対応するバックエンドRESTウェブサービス430内で、同じRESTリソースを呼び出し、パラメータおよび/または本文コンテンツなどを有する同じ方法をコールするように構成された、単純なソフトウェアフックを含んでいてもよい。
【0105】
さまざまな他の場合、ステップ608で判断されたバックエンドウェブサービスコールは、リバースプロキシサーバ420上のRESTリソース528によって最初に扱われたREST要求とは異なっていてもよい。そのような場合、リバースプロキシサーバ420によってクライアント装置410に公開されたRESTサービス423/523およびリソース528は、バックエンドRESTサービス430によって公開されたRESTリソースに全く対応していなくてもよい。たとえば、図4Aおよび図4Bを簡潔に参照して、仮想RESTサービス423aおよびその対応するバックエンドRESTサービス430aは、場合によっては同様に実装されてもよく(たとえば、同様の(または同じ)WADLファイルを有する、同じリソースを含む、同じ方法、パラメータ、データタイプをサポートするなど)、一方、他の場合、仮想RESTサービス423および対応するバックエンドサービス430は、かなり異なって実装されてもよい。例示すると、ステップ601でクライアント装置410から受信されたREST要求は、RESTリソース528へのURLパス、HTTP方法、1つ以上のURLパラメータおよび/または追加のパラメータ、もしくはメッセージヘッダまたは本文内のデータを含んでいてもよい。しかしながら、メッセージを扱うためにRESTリソース528が実行されると、それは、異なるURLパス(たとえば、異なるサブリソースパスまたはリソース名)、異なるHTTP方法、異なるURLパラメータ、および/または異なるヘッダまたは本文データを有するバックエンドウェブサービスコールを生成してもよい。加えて、いくつかの実施形態では、バックエンドウェブサービス430はRESTサービスでなくてもよく、SOAPサービス、URL、もしくは他のタイプのウェブサービス、ウェブアプリケーション、またはウェブコンテンツであってもよい。そのような場合、リバースプロキシサーバ420内のRESTリソース528は、SOAPおよびURLコールを生成するように、および/または、さまざまな異なるタイプのバックエンドウェブサービス、アプリケーション、ウェブコンテンツなどを呼び出すように構成されてもよい。このため、クライアント装置410は、リバースプロキシサーバ420内のRESTサービス423/523によって公開されたRESTリソース528についての知識のみを有するかもしれず、基盤のバックエンドウェブサービス430の設計または構造についての認識をまったく持たないかもしれない。いくつかの実施形態では、仮想RESTサービス423およびそれらの対応するバックエンドサービス430のための異なるウェブサービス/リソース設計および実装の使用は、たとえば、信頼できないクライアント装置410からバックエンドサービス430の根本的設計を不明瞭にするために、ならびに、バックエンドウェブサービス430間のより容易な統合、互換性、およびスケーラビリティを提供するために、有利であり得る。
【0106】
ステップ609で、バックエンドウェブサービスコールが生成された後で、リバースプロキシサーバ420は、バックエンドウェブサービスコールに関連付けられたさまざまなセキュリティポリシー(および/または他の通信管理ポリシー)を実施してもよい。次に、ステップ610で、信頼できる内部ネットワーク460内の1つ以上のバックエンドウェブサービス430を呼び出すために、コールがリバースプロキシサーバ420内で実行されてもよい。図9〜10を参照してより詳細に説明されるように、リバースプロキシサーバ420内のRESTリソース428は、バックエンドウェブサービスコールを、コールを処理してさまざまなポリシーを実施し得るポリシー実施エンジン960に提供してもよい。ある実施形態では、セキュリティポリシー(および/または他の通信管理ポリシー)は、クライアント410からバックエンドウェブサービス430に送信されてクライアント410に戻る要求−応答のエンドツーエンド処理フロー内のさまざまな異なる添付点(たとえば、OnRequest、OnInvoke、OnResponse、MessageTransformation、OnErrorなど)で実施されてもよい。
【0107】
図7は、1つ以上の実施形態に従ったリバースプロキシサーバのある要素およびシステムを示すブロック図である。この例のリバースプロキシサーバ720はリバースプロキシ420および/またはリバースプロキシサーバ520に対応していてもよく、リバースプロキシサーバ720のさまざまなサブコンポーネント722〜723は、上述の対応するサブコンポーネントと同様または同一であってもよい。加えて、リバースプロキシサーバ520は、コンピューティング環境400または他の同様の環境内で動作してもよく、クライアントコンピューティング装置とバックエンドウェブサービスとの間でメッセージを処理して送信するように構成されてもよい。したがって、リバースプロキシサーバ720は、図4A図4Bおよび/または図5を参照して上述されたハードウェア、ソフトウェア、およびネットワーキングコンポーネントならびに機能性のうちのいくつかまたはすべてを含んでいてもよい。
【0108】
図7に示すあるコンポーネントは、リバースプロキシサーバ720内にRESTウェブサービス723を生成するように構成されてもよい。上述のように、いくつかの実施形態では、RESTサービス723は、RESTサービス723に含まれるかまたはRESTサービス723によって公開されたRESTリソース728とともに、リバースプロキシサーバ720内に動的に作成されてもよい。そのような実施形態では、リバースプロキシサーバ720内のRESTインフラストラクチャ722、RESTアプリケーションエンジン740、ゲートウェイ管理システム750、および/または他のコンポーネントは、実行時間中にリバースプロキシサーバ内でさまざまなRESTサービス723および/またはRESTリソース728を生成、削除、置換、または更新するように構成されてもよい。
【0109】
この例では、RESTインフラストラクチャ722は、RESTスタック724と、静的RESTアプリケーション725(たとえば、構築時間中に生成されたJERSEYアプリケーション)と、RESTプロバイダリソース726とを含む。リバースプロキシサーバ720は、実行時間中にRESTスタック724を動的に初期化してもよく、静的RESTアプリケーション725を登録してもよく、静的RESTアプリケーション725は、RESTプロバイダリソース726に戻してもよい。RESTアプリケーション725および/またはプロバイダリソース726は、リバースプロキシサーバ720によって公開されたどのRESTサービス723およびリソース728がリバースプロキシサーバ72上に生成されたかを判断するように構成されてもよい。この例では、RESTアプリケーション725は、たとえば、クライアント装置410からのREST要求を扱うために、RESTウェブサービス723またはRESTリソース728をいつ作成すべきかを判断してもよい。RESTアプリケーション725は次に、RESTアプリケーションエンジン740に、新規のRESTサービス723および/またはリソース728を生成するよう命令してもよい。
【0110】
図7は、リバースプロキシサーバ720内のRESTアプリケーションエンジン740と、リバースプロキシサーバ720と通信するように構成された(たとえば内部ネットワーク460内の)ゲートウェイ管理サーバ750とを含む。RESTアプリケーションエンジン740は、リバースプロキシサーバ720内にRESTサービス723および/またはリソース728を生成するように構成された1つ以上のソフトウェアツールまたはプラットフォームを含んでいてもよい。以下に説明されるように、RESTアプリケーションエンジン740は、たとえば、ゲートウェイ管理サーバ750から受信されたWADLファイルを介して、RESTサービスおよび/またはリソース記述データを受信してもよい。RESTアプリケーションエンジン740は次に、リバースプロキシサーバ720内にRESTサービス723およびリソース728を生成し、構築し、デプロイメントしてもよい。
【0111】
ここで図8を参照して、リバースプロキシサーバ内にRESTサービスおよび/またはリソースを動的に生成するためのプロセスを示すフローチャートが示される。以下に説明されるように、このプロセスにおけるステップは、上述の1つ以上のコンポーネント、たとえば、リバースプロキシサーバ420(および/またはリバースプロキシサーバ520、720、および920)、RESTアプリケーションエンジン740、ゲートウェイ管理サーバ750、および/または、そこに実装されたさまざまなサブシステムおよびサブコンポーネントによって行なわれてもよい。加えて、いくつかの実施形態では、このプロセスにおけるあるステップは、クライアント装置410、バックエンドウェブサービス430内で、および/または他のさまざまな中間装置によって行なわれてもよい。ウェブサービス記述データを送受信すること、ならびに、RESTサービスおよびリソースを動的に生成することを含む、ここに説明される手法は、上述の特定のシステムおよびハードウェア実装に限定されなくてもよく、ハードウェア、ソフトウェア、およびネットワークコンポーネントの他の組合せを含む他のハードウェアおよびシステム環境内で行なわれてもよい、ということがさらに理解されるべきである。
【0112】
上述のように、ステップ801〜804は、プロキシサーバ内にRESTサービスおよびリソースを動的に生成するためのプロセスに関して行なわれてもよい。たとえば、RESTサービス723およびRESTリソース728は、構築時間中ではなく実行時間中に、リバースプロキシサーバ720内に作成されてもよい。RESTサービスまたはリソースの動的な生成は、実行時間中にリバースプロキシサーバ720によって受信されたさまざまな情報に基づいて起動され(またはトリガされ)てもよい。たとえば、要求されたRESTリソースがまだリバースプロキシサーバ720内に作成されていない場合、クライアント装置410から受信されたREST要求が、リバースプロキシサーバ720内での動的なRESTサービス/リソース生成プロセスを起動してもよい。別の例として、リバースプロキシサーバ720におけるRESTサービス723をバックエンドウェブサービス730と同期させるために、新規のバックエンドウェブサービス730のデプロイメント、または既存のバックエンドウェブサービス730への修正が、リバースプロキシサーバ720内での動的なRESTサービス/リソース生成プロセスを起動してもよい。
【0113】
ステップ801で、1つ以上のバックエンドウェブサービス730を記述する(および/または定義する)データが、リバースプロキシサーバ720内で受信されてもよい。いくつかの実施形態では、ステップ801で受信された記述データは、バックエンドウェブサービス730および/または信頼できるゲートウェイ管理サーバ750によって生成された1つ以上のウェブアプリケーション記述言語(WADL)ファイルを含んでいてもよい。RESTサービス730のためのWADLファイルは、リソースURL、サポートされた方法、パラメータ、データタイプなどを含む、RESTサービスによって公開されたリソースのすべてを記述してもよい。上述のように、バックエンドウェブサービス730は、RESTウェブリソース730、ならびに、他のタイプのウェブサービス730、たとえばSOAPウェブサービス、および他のタイプのバックエンドウェブサービス、アプリケーション、ウェブコンテンツなどを含んでいてもよい。このため、SOAPウェブサービス730については、WADLの代わりにウェブサービス記述言語(Web Service Description Language:WSDL)が使用されてもよく、他の例では、バックエンドウェブサービス730のタイプに依存して、さまざまな他のデータフォーマットが使用されてもよい。
【0114】
受信された記述データのタイプまたはフォーマットにかかわらず、データは、バックエンドウェブリソース730の構造およびサポートされた動作を判断するために受信側装置によって構文解析され得るマシン読取可能フォーマットで送信されてもよい。いくつかの実施形態では、記述データ(たとえばWADLファイル)は、個々のバックエンドウェブサービス730によって生成され、ゲートウェイ管理サーバ750に提供され、次にRESTアプリケーションエンジン740に送信されてもよい。たとえば、ゲートウェイ管理サーバ750は、新規のバックエンドウェブサービス730のデプロイメント、または既存のバックエンドウェブサービス730への修正に応答して、更新された記述データをRESTアプリケーションエンジン740に自動的に送信してもよい。他の場合、RESTアプリケーションエンジン740は、周期的に、またはリバースプロキシサーバ720内でイベントが起こるのに応答して、ゲートウェイ管理サーバ750から(またはバックエンドウェブサービス730から直接)記述データを検索してもよい。
【0115】
ステップ802〜804で、リバースプロキシサーバ720内のRESTアプリケーションエンジン740および/または他のコンポーネントは、リバースプロキシサーバ720内にRESTサービス723および/またはRESTリソース728を生成し、構築し、デプロイメントしてもよい。この例では、ステップ802で、RESTアプリケーションエンジン740は、バックエンドウェブサービス730によって公開されたリソースに基づいて、RESTサービス記述データを修正および/またはカスタマイズしてもよい。ステップ803で、RESTアプリケーションエンジン740は、ステップ802で修正/カスタマイズされたRESTサービス記述データを使用して、リバースプロキシサーバ720内に1つ以上のダミーrestリソースを作成してもよい。最後に、ステップ804で、RESTアプリケーションエンジン740および/またはRESTインフラストラクチャ722は、ステップ803で生成されたRESTサービス723および/またはリソース728を、リバースプロキシサーバ720内にデプロイメントしてもよい。
【0116】
いくつかの実施形態では、RESTサービスを生成し、構築するステップは、たとえば、RESTアプリケーションエンジン740および/またはRESTインフラストラクチャ722によって、リバースプロキシサーバ720内で行なわれてもよい。しかしながら、他の例では、RESTサービス723およびRESTリソース728は、リバースプロキシサーバ720から遠隔で(たとえば内部ネットワーク460内に)設計され、生成され、および/または構築されてから、リバースプロキシサーバ720に提供され、リバースプロキシサーバ720上にデプロイメントされてもよい。
【0117】
RESTリソース728への修正および/またはカスタマイゼーションは、1つ以上のバックエンドウェブサービス730を呼び出すためにダミーRESTリソースに挿入されたソフトウェアフックおよび/または他のカスタマイズされたソフトウェアコードの形をとってもよい。そのようなソフトウェア修正/カスタマイゼーションは、たとえば、バックエンドRESTサービス730およびリソース、ならびに、バックエンドウェブサービス730へのコールで送信され得る個々の動作(または方法)、パラメータ、および他のデータを識別してもよい。RESTリソース728がリバースプロキシサーバ720上に構築され、デプロイメントされた後で、バックエンドウェブサービス730を呼び出すために、ソフトウェアフックおよび/またはカスタマイズされたソフトウェアコードが実行されてもよい。上述のように、場合によっては、ステップ803でRESTリソース728に挿入されたソフトウェアコードは、対応するバックエンドRESTウェブサービス730内で、同じRESTリソースを呼び出し、パラメータおよび/または本文コンテンツなどを有する同じ方法をコールするように構成された、単純なソフトウェアフックを含んでいてもよい。他の場合、ステップ803で修正/カスタマイズされたコードは、異なるURLパス(たとえば、異なるサブリソースパスまたはリソース名)、異なるHTTP方法、異なるURLパラメータ、および/または異なるヘッダまたは本文データを使用して、1つ以上の異なるバックエンドウェブサービス730を呼び出すように設計されてもよい。加えて、上述のように、バックエンドウェブサービス730はRESTサービスでなくてもよく、SOAPサービス、URL、もしくは他のタイプのウェブサービス、ウェブアプリケーション、またはウェブコンテンツであってもよい。そのような場合、ステップ803におけるソフトウェアカスタマイゼーション/修正は、SOAPおよびURLコールを生成するための、および/または、さまざまな異なるタイプのバックエンドウェブサービス、アプリケーション、ウェブコンテンツなどを呼び出すためのカスタムコードを含んでいてもよい。
【0118】
ステップ804でリバースプロキシサーバ720内にRESTリソース728をデプロイメントする場合、各リソース728は、リソース728のURLに従って、RESTサービス723内に階層的にデプロイメントされてもよい。上述のように、RESTサービスは、サービス723内で最高レベルのリソースであり(たとえば、サービスの「/」パスにマッピングされる)、異なる要求を扱うであろうサブリソース728(または子リソース)を識別することを担当するルートリソースを有していてもよい。
【0119】
図9は、ポリシー実施エンジン960を含むリバースプロキシサーバ920の要素およびシステムを示すブロック図である。この例のリバースプロキシサーバ920はリバースプロキシ420(および/または520ならびに720)に対応していてもよく、リバースプロキシサーバ920のさまざまなサブコンポーネント921〜923は、上述の対応するサブコンポーネントと同様または同一であってもよい。加えて、リバースプロキシサーバ920は、コンピューティング環境400または他の同様の環境内で動作してもよく、クライアントコンピューティング装置とバックエンドウェブサービスとの間でメッセージを処理して送信するように構成されてもよい。したがって、リバースプロキシサーバ920は、図4A図4B図5、および/または図7を参照して上述されたハードウェア、ソフトウェア、およびネットワーキングコンポーネントならびに機能性のうちのいくつかまたはすべてを含んでいてもよい。
【0120】
要求ハンドラ921、REST実装922、およびRESTサービス923に加えて、この例は、リバースプロキシサーバ920内のポリシー実施エンジン960を示す。この例では、RESTサービス923およびそれらのそれぞれのRESTリソース428は、呼び出されるべき任意のバックエンドウェブサービスコールをポリシー実施エンジン960に提供してもよい。ポリシー実施エンジン960は、バックエンドウェブサービスコールを処理し、バックエンドウェブサービス930を呼び出す前および/または後にさまざまなセキュリティポリシーおよび他の通信管理ポリシーを実施してもよい。
【0121】
ポリシー実施エンジン960は、リバースプロキシサーバ920内でセキュリティポリシーおよび他の通信管理ポリシーを実現するように構成されたさまざまなセキュリティシステムまたはコンポーネントを含んでいてもよい。この例では、ポリシー実施エンジン960は、メッセージスロットリングシステム961と、認証および認可システム962と、キー管理システム963と、トークン仲介システム964とを含む。ポリシー実施エンジン960内のこれらのシステムおよびセキュリティコンポーネントは、クライアント装置410からのメッセージを認証する、セキュリティトークン仲介を提供する、APIキー管理を行なう、きめの細かい認可および/またはデータ改訂を行なう、機密性および完全性をサポートする、リスクベースの認証を行なう、モバイルクライアント装置410のための装置ベースのセキュリティを行なう、非武装ゾーン(DMZ)脅威保護をサポートする、プロトコルおよびペイロード仲介を行なう、などといったことをしてもよい。たとえば、認証/認可システム962は、サービス妨害(Denial of Service:DoS)攻撃を防止し、不正な形式のメッセージを検出してフィルタリングし、SQL、JavaScript、および/またはXPath/XQueryインジェクション攻撃を検出して防止し、悪意のあるコンテンツから保護するためにメッセージ確認を行なう(たとえば、メッセージ添付物内のウィルスを検出する、XMLおよびJSONデータ構造を確認する、形状およびクエリパラメータを確認するなど)ためのサブシステムを含んでいてもよい。トークン仲介システム964は、特定されたクライアント装置410とバックエンドウェブサービス930との間で認証トークンを変換するように構成されてもよい。セキュリティシステム961〜964はまた、たとえば、複数のバックエンドAPIまたはサービスを集め、自動仲介または合成を行なうことによって、動作のオーケストレーションおよび除去をサポートしてもよい。
【0122】
加えて、この例では、ポリシー実施エンジン960は、メッセージ処理ポリシー965のデータストアを含む。メッセージ処理ポリシーは、XML、JavaScript、または他のタイプの実行可能ソフトウェアコンポーネントといったさまざまな形のコンピュータ読取可能媒体に格納されてもよい。以下により詳細に説明されるように、メッセージ処理ポリシー965は、リバースプロキシサーバ920内でセキュリティポリシーおよび他の通信管理ポリシーを実施するために使用されてもよい。データストア965は、個々のメッセージのためのエンドツーエンド処理フロー中のさまざまな段階で検索され、個々のメッセージに適用され得る、個々のメッセージ処理ポリシーを含んでいてもよい。メッセージ処理ポリシーデータストア965は、この例に示すようにリバースプロキシサーバ920に存在していてもよく、もしくは、信頼できる内部コンピュータネットワーク460のバックエンドサーバ、または安全な第三者サーバなどの内部に存在していてもよい。
【0123】
ここで図10を参照して、メッセージ処理ポリシーを判断し、REST要求および他のバックエンドウェブサービスコールといったメッセージを処理するためのプロセスを示すフローチャートが示される。以下に説明されるように、メッセージ処理ポリシーの判断および実施は、リバースプロキシサーバ920(および/または420、520、ならびに72)における1つ以上のコンポーネントによって、そこに実装されたさまざまなサブシステムおよびサブコンポーネントとともに行なわれてもよい。加えて、いくつかの実施形態では、このプロセスにおけるあるステップは、クライアント装置410、バックエンドウェブサービス930内で、および/または他のさまざまな中間装置によって行なわれてもよい。エンドツーエンドメッセージ処理フローを監視すること、メッセージ処理ポリシーを判断すること、およびメッセージ処理ポリシーを実施することを含む、ここに説明される手法は、上述の特定のシステムおよびハードウェア実装に限定されなくてもよく、ハードウェア、ソフトウェア、およびネットワークコンポーネントの他の組合せを含む他のハードウェアおよびシステム環境内で行なわれてもよい、ということがさらに理解されるべきである。
【0124】
ステップ1001で、ポリシー実施エンジン960は、RESTサービス923から受信されたメッセージを分析して、メッセージの宛先バックエンドサービス930、およびメッセージを起動したクライアント装置410を判断してもよい。メッセージの宛先は、RESTサービス923によって生成されたバックエンドウェブサービスコール(たとえば、REST要求、SOAP要求、またはウェブコンテンツ要求)を構文解析し、分析することによって判断されてもよい。たとえば、RESTまたはSOAP要求のユニフォームリソース識別子(URI)、もしくは、ウェブサービスまたはアプリケーションの識別子、および/またはメッセージ本文内の動作識別子が、内部ネットワーク460によって提供されるバックエンドウェブサービス/アプリケーション930またはウェブコンテンツに対応していてもよい。この例では、プロキシサーバ920は、メッセージヘッダおよびコンテンツに基づいて、メッセージは内部ネットワーク460内のウェブサービス930をホストする特定のコンピュータサーバに向けられていると判断してもよい。ソースIPアドレスまたはホスト名識別子といった、メッセージの送信元を識別するメッセージ内の情報も、メッセージの意図された宛先を判断するために使用されてもよい。メッセージの意図された宛先を判断することに加え、プロキシサーバ420は、メッセージを起動したクライアント装置410を判断してもよい。
【0125】
ステップ1002で、ポリシー実施エンジン960は、バックエンドウェブサービス930に送信されるべきメッセージのための予め定められた処理フローにおける現在点を判断してもよい。メッセージ処理フローとは、プロキシサーバ920によるクライアント装置410からのメッセージの受信で始まり、プロキシサーバ920によるクライアント装置410への応答の送信で終わる、プロキシサーバ920によって実行されるべきエンドツーエンドメッセージ処理フローを指してもよい。以下に説明されるように、メッセージのための予め定められた処理フローにおける現在点を判断することは、メッセージに関連付けられたポリシーモデルを識別し、処理モデル内の現在の処理位置を判断することを含んでいてもよい。
【0126】
いくつかの実施形態では、メッセージのための予め定められたメッセージ処理フローは、ポリシーモデルによって定義されてもよい。ポリシーモデルは、メッセージのエンドツーエンドメッセージ処理フロー中のさまざまな点でメッセージを処理するためにポリシー実施エンジン960によって適用され得る一組のポリシー(たとえば、セキュリティポリシー、通信管理ポリシーなど)を定義するデータを含んでいてもよい。メッセージのエンドツーエンド処理フローを定義するポリシーモデル、および個々のメッセージ処理ポリシーは双方とも、XML、JavaScript、または他のタイプの実行可能ソフトウェアコンポーネントといったさまざまな形のコンピュータ読取可能媒体であってもよい。ポリシーモデルおよび/またはメッセージ処理ポリシーは、ポリシー実施エンジン960内に、たとえばデータストア965に、または内部ネットワーク460内の他のところに格納されてもよい。
【0127】
上述のように、ポリシーモデルは、ポリシー実施エンジン960がメッセージのエンドツーエンド処理フローにおけるさまざまな点でメッセージに適用し得る一組のメッセージ処理ポリシーを定義してもよい。いくつかの実施形態では、ステップ1002で、ポリシー実施エンジン960は、RESTサービス923から受信されたメッセージの特性に依存して、異なるポリシーモデルを適用してもよい。たとえば、ポリシー実施エンジン960によって検索され適用される特定のポリシーモデルは、メッセージの意図された宛先、および/または、要求を起動したクライアント装置410に依存していてもよい。加えて、ポリシー実施エンジン960によって検索され適用されるポリシーモデルは、メッセージを送信するために使用されるネットワークプロトコル、および/または、メッセージの要求タイプまたはクライアントタイプに依存していてもよい。たとえば、REST要求、SOAP要求、ウェブコンテンツ(URL)要求などのために、異なるポリシーモデルが使用されてもよい。
【0128】
いくつかの例では、ポリシーモデルは、XMLまたは他のマシン読取可能フォーマットで実装されてもよい。ポリシーモデルは、処理フロー内のさまざまな点(「アサーション」とも呼ばれ得る)のタグまたは識別子、および、処理点/アサーションの各々についての1つ以上のポリシー識別子を含んでいてもよい。たとえば、ポリシーモデルは、要求が受信されると行なわれるべきポリシー(「on-request」タグ内)、メッセージ変換を行なうポリシー(「message-transformation」タグ内)、および、バックエンドウェブサービスが呼び出されると行なわれるべきポリシー(「on-invoke」タグ内)を識別してもよい。
【0129】
いくつかの実施形態では、ポリシー実施エンジン960は、サービスレベル(またはURLレベル)で、および/または動作レベル(または方法レベル)でポリシーを適用してもよい。したがって、バックエンドウェブサービス930を呼び出す場合、ポリシー実施エンジン960はまず、動作(SOAPについて)または方法(RESTおよびURLについて)を判断してから、ポリシーモデル内で識別されたポリシーを実施できるようになっていてもよい。
【0130】
RESTサービス923から受信されたメッセージに関連付けられたポリシーモデル(または処理フローを定義する他のデータ)を識別した後で、ポリシー実施エンジン960は、ポリシーまたは処理フローに従って、メッセージ処理における現在点を判断してもよい。メッセージ処理フローにおける現在点は、メッセージ自体の特性によって、および、メッセージの以前の処理に関する以前に格納されたデータに基づいて判断されてもよい。上述のように、予め定められた処理フローは、クライアント装置410による最初の要求から、クライアント装置410に返送された応答までの、メッセージのためのエンドツーエンド処理を適用してもよい。したがって、メッセージが、クライアント装置410からの最初の要求であるか、クライアント装置からの追加データ(たとえば、要求に関する認証クレデンシャルまたは追加データ)の送信であるか、バックエンドウェブサービス930からの応答であるか、もしくは、バックエンドサーバまたは装置からの追加データ(たとえば、シングルサインオンまたはトークン翻訳サービスからのデータ)の送信であるかを判断することは、ポリシー実施エンジン960が、エンドツーエンドメッセージ処理フロー内のメッセージ処理の現在点を判断することを可能にし得る。加えて、ポリシー実施エンジン960は、ポリシー実施エンジン960がメッセージに適用すべき次のメッセージ処理ポリシーを判断するために、以前のメッセージ変換、サービスの呼び出し、遭遇した処理エラーの結果といった、メッセージまたは他の関連するメッセージに対して行なわれた以前の処理に関連するデータを格納してもよい。
【0131】
以下の段落は、メッセージ処理ポリシーが適用され得る、ポリシーモデルまたは他のメッセージ処理フロー内の可能な点(「アサーション」とも呼ばれ得る)のいくつかの例を含む。これらの例は単なる例示であり、網羅的なリストでなくてもよい、ということが理解されるべきである。また、ここに説明されるアサーション名(たとえば、OnRequest、OnInvoke、OnResponse、OnError、MessageTransformationなど)、ならびに、アサーションおよびポリシーに使用されるXML構造およびタグ名は、さまざまな他の実施形態において変更されてもよい。
【0132】
ステップ1002でポリシーモデルまたは他の予め定められたメッセージ処理フロー内の現在点を判断する第1の例は、受信されたメッセージが外部コンピュータネットワークにおけるクライアント装置410からの要求に対応していると判断することを含んでいてもよい。メッセージのエンドツーエンド処理フローの初めにあるこの点は、「OnRequest」アサーションなどと呼ばれてもよい。以下により詳細に説明されるように、OnRequestアサーションは、仮想サービス、プロキシサービス、および/またはウェブアプリケーションを安全にするために適用され得るポリシーへの参照を含んでいてもよい。たとえば、OnRequestアサーションは、外部クライアント装置410から受信された新規のウェブサービス/アプリケーション/コンテンツ要求のためにポリシー実施エンジン960が実施すべきセキュリティポリシーを表わすURIまたは他の識別子を含んでいてもよい。OnRequestアサーションはまた、他のポリシーを参照してもよく、および/または、他のアサーションを含んでいてもよい。場合によっては、OnRequestアサーションは、リバースプロキシモードでのみ動作してもよく、すなわち、外部クライアント装置410からの内部ウェブサービス930に対する要求のみを扱ってもよい。
【0133】
ステップ1002で起こり得る現在のメッセージ処理点の別の判断は、クライアント装置410から要求を受信した後で、プロキシサーバ920はバックエンドウェブアプリケーションまたはウェブサービス930に要求を送信すべきであると判断することを含んでいてもよい。メッセージのエンドツーエンド処理フロー内のこの点は、「OnInvoke」アサーションなどと呼ばれてもよい。OnRequestアサーションと同様に、いくつかの実施形態では、OnInvokeアサーションは、内部ネットワーク460内のバックエンドウェブサービス/アプリケーション930を呼び出すために最初の要求がクライアント装置410から受信されたリバースプロキシ使用事例にのみ当てはまり得る。OnInvokeアサーションは、エンドツーエンド処理フローにおけるこの点でポリシー実施エンジン960が実施すべきポリシーを表わすURIまたは他の識別子を含んでいてもよい。たとえば、複数のXML「ポリシーURI」XML要素を使用することによって、複数のポリシー識別子(または参照)がOnInvokeアサーション内に含まれてもよい。加えて、OnInvokeアサーションは、クライアントのリソースパターンを使用することから、クライアント詳細を一意的に識別してもよい。OnInvokeアサーションに使用されるクライアントタイプ(たとえば、RESTクライアント、SOAPクライアント、URL/ウェブクライアントなど)は、OnInvokeアサーション内に構成された値に基づいて、実行時間にポリシー実施エンジン960によって判断されてもよい。OnInvokeアサーションはまた、他のポリシーを参照してもよく、および/または、他のアサーションを含んでいてもよい。
【0134】
現在のメッセージ処理点を判断する別の例は、クライアント装置410から要求を受信した後で、およびバックエンドウェブサービス430を呼び出した後で、プロキシサーバ920はクライアント装置410に応答を送信すべきであると判断することを含んでいてもよい。メッセージのエンドツーエンド処理フロー内のこの点は、「OnResponse」アサーションなどと呼ばれてもよい。OnRequestおよびOnInvokeアサーションと同様に、いくつかの実施形態では、OnResponseアサーションは、内部ネットワーク460内のバックエンドウェブサービス930を呼び出すために最初の要求がクライアント装置410から受信されたリバースプロキシ使用事例にのみ当てはまり得る。OnResponseアサーションは、エンドツーエンド処理フローにおけるこの点でポリシー実施エンジン960が実施すべきポリシーを表わすURIまたは他の識別子を含んでいてもよい。複数のポリシー識別子(または参照)がOnResponse内に含まれてもよく、OnResponseアサーションはまた、他のポリシーを参照してもよく、および/または、他のアサーションを含んでいてもよい。
【0135】
現在のメッセージ処理点を判断する別の例は、エンドツーエンド処理フロー中のいずれかの点で、プロキシサーバ920はあるメッセージタイプから別のメッセージタイプにメッセージを変換すべきであると判断することを含んでいてもよい。メッセージのエンドツーエンド処理フロー内のこの点は、「MessageTransformation」アサーションなどと呼ばれてもよい。たとえば、プロキシサーバ920は、第1のメッセージタイプ(たとえばREST要求)を有するメッセージを受信し、メッセージを分析して、メッセージは、第2のメッセージタイプ(たとえばバックSOAPサービス)のみを受け入れるバックエンドサービスまたはアプリケーションに向けられていると判断してもよい。そのような判断の後で、ポリシー実施エンジン960は、メッセージに対して適切なMessageTransformationアサーションを実行してから、変換されたメッセージを意図された宛先に送信してもよい。ポリシー実施エンジン960によってサポートされ得る変換ポリシーの例は、XMLからJavaScriptオブジェクト表記法(JSON)へのポリシー、およびJSONからXMLへのポリシー、XMLからSOAPへのポリシー、およびSOAPからXMLへのポリシー、ならびに、JSONからSOAPへのポリシー、およびSOAPからJSONへのポリシーを、何ら限定されることなく含んでいてもよい。他の周知の媒体タイプ間の変換が、さまざまな実施形態においてサポートされてもよい。ポリシー実施エンジン960は、バックエンドサービス仮想化の際に適切な変換ポリシーを自動的に添付してもよく、変換は、プロキシサーバ920に、またはコンピューティング環境における他のところにインストールされた1つ以上の翻訳フレームワークを使用して行なわれてもよい。
【0136】
現在のメッセージ処理点を判断するさらに別の例は、メッセージのためのエンドツーエンド処理フロー中のいずれかの点でエラーが起こったと判断することを含んでいてもよい。メッセージのエンドツーエンド処理フロー内のこの点は、「OnError」アサーションなどと呼ばれてもよい。メッセージのためのOnErrorアサーションをトリガしている(たとえば、メッセージに関連付けられたOnErrorアサーションで識別された1つ以上のポリシーの実行をトリガしている)エラーは、リバースプロキシサーバ920によって行なわれた処理内で起こったエラー、および/または、バックエンドコンピュータサーバまたは装置からリバースプロキシサーバ920によって受信されたエラーであってもよい。たとえば、リバースプロキシサーバ920は、認可サービス、トークン翻訳サービス、またはバックエンドウェブサービス930といったメッセージの処理フロー中に呼び出されたバックエンドコンピュータサーバからエラー表示を受信してもよい。加えて、リバースプロキシサーバ920は、メッセージ処理タスクを行ないながら、メッセージを構文解析または確認する際のエラー、もしくはメッセージ変換ポリシーを実行する際のエラー、といったエラーを識別または生成してもよい。このため、特定のメッセージ処理ポリシーが適用され得る処理フロー内の点(「アサーション」とも呼ばれる)の以前の例のうちのいくつかとは異なり、OnErrorアサーションは条件付きであってもよい。すなわち、メッセージのエンドツーエンド処理フロー中、ポリシー実施エンジン960は、処理中に起こり得るエラーの数およびタイプに依存して、OnErrorアサーションからポリシーを1回、複数回、適用してもよく、または全く適用しなくてもよい。
【0137】
ステップ1003で、ステップ501で受信されたメッセージを処理するための1つ以上の特定のポリシーが、ポリシー実施エンジン960によって判断されてもよい。上述のように、リバースプロキシサーバ920によって選択され、メッセージに適用される特定のポリシーは、セキュリティポリシーおよび任意の他のタイプの通信管理ポリシーを含んでいてもよい。たとえば、および何ら限定されることなく、そのようなポリシーは、とりわけ、認証、認可、監査、シングルサインオン、セキュリティポリシー実施、キー管理および分散、安全な通信、安全なデータ格納、および安全なデータ共有に関連する機能を行なってもよい。
【0138】
ステップ1003で、ポリシー実施エンジン960によって、まず、メッセージに関連付けられたエンドツーエンド処理フロー(たとえばポリシーモデル)を検索し、次に、ステップ1002で判断されたエンドツーエンド処理フロー内の現在点(たとえばアサーション)を使用して、エンドツーエンドフローにおける現在点でメッセージに適用されるであろう特定のポリシーを識別することにより、ポリシーが選択されてもよい。たとえば、メッセージが、クライアント装置410からのバックエンドウェブサービス430に対する要求である場合、ポリシー実施エンジン960は、メッセージのためのエンドツーエンド処理フローを支配するポリシーモデルの「on-request」タグ内で識別された任意のポリシーを検索してもよい。
【0139】
ステップ1004で、ポリシー実施エンジン960は、ステップ1003で選択されたポリシーを使用してメッセージを処理してもよい。上述のように、ポリシー実施エンジン960は、メッセージのための予め定められたエンドツーエンド処理フローからURIまたは他のポリシー識別子を識別することによって、メッセージに適用されるべき適切なポリシーを判断してもよい。いくつかの実施形態では、ポリシーモデルは、エンドツーエンド処理フローにおける現在点に対応するアサーションに依存して、適用されるべきポリシーのためのポリシーURI(または他の識別子)を含んでいてもよい。そのようなポリシーURIは、ポリシーの格納位置を参照してもよい。他の例では、ポリシー識別子はURIとして表わされなくてもよく、APIまたはサービス識別子、機能名、方法名、および/または動作名などといった他の識別データを含んでいてもよい。いずれにせよ、ポリシー識別子は、メッセージ処理ポリシーのための格納位置または他のアクセス情報を識別してもよい。ポリシー自体は、XML、JavaScript、または他のタイプの実行可能ソフトウェアコンポーネントといったさまざまな形のコンピュータ読取可能媒体に格納されてもよい。
【0140】
メッセージ処理ポリシーは、コンピューティング環境内のさまざまな異なるサーバまたは装置に位置する、データベースおよび/またはファイルベースの記憶システムといったデータストアに格納されてもよい。たとえば、比較的不変であるかもしれず、安全なデータを有さない、メッセージ変換ポリシー、メッセージスロットリングポリシー、ロードバランシングポリシー、および他のポリシー、といったあるポリシーは、プロキシサーバ920内に(たとえば、メッセージ処理ポリシーデータストア965内に)局所的に格納されてもよい。しばしば変わり得る、または安全なデータを含み得る、ユーザ認証/認可ポリシー、および他のポリシー、といった他のポリシーは、信頼できる内部コンピュータネットワーク460の安全なサーバまたは記憶システム内に格納されてもよい。他の場合、あるポリシーは、外部ネットワークにおける安全な第三者サーバまたはクライアント装置410上に格納されてもよい。ポリシー実施エンジン960は、ステップ1004でこれらのさまざまな位置のいずれかからポリシーを検索し、適用するように構成されてもよい。
【0141】
ステップ1004でさまざまなセキュリティポリシーおよび/または他の通信管理ポリシーを使用してメッセージを処理した後で、ステップ1005で、リバースプロキシサーバ920は、処理されたメッセージをその意図された宛先に送信してもよい。上述のように、意図された宛先は、ステップ1001でメッセージヘッダおよび/またはメッセージ本文の一部を構文解析し、分析することによって判断されてもよい。バックエンドウェブサービス930への要求といったメッセージの意図された宛先は、内部ネットワーク460内にあってもよい。それに代えて、外部ウェブサービスまたはアプリケーションへの要求、もしくはクライアント装置410への応答または他の送信といったメッセージの意図された宛先は、外部ネットワーク内にあってもよい。
【0142】
上述のように、プロキシサーバ920内でメッセージを処理するための特定のポリシーの選択および適用は、そのメッセージのための予め定められたエンドツーエンド処理フローによって、エンドツーエンドフロー内のメッセージのための現在の処理点の判断とともに判断されてもよい。上に紹介されたポリシーモデルは、ポリシー実施エンジン960がメッセージのエンドツーエンド処理フローにおけるさまざまな点でメッセージに適用し得る一組のメッセージ処理ポリシーを定義してもよい。いくつかの実施形態では、エンドツーエンド処理フローを定義するためのポリシーモデルおよび他の手法は、一組のポリシーテンプレートを使用して作成されてもよい。そのようなテンプレートは特定のアサーションに対応していてもよく、ポリシーモデルエンドツーエンド処理フローを作成するために使用されてもよい。たとえば、1つ以上のアサーションテンプレートがコピーされてもよく、適切なポリシーURIが各テンプレートコピーに挿入されてもよい。カスタマイズされたテンプレートは次に、エンドツーエンド処理フロー中に実行され得るポリシーを定義するために、適切なポリシーモデルに追加されてもよい。
【0143】
エンドツーエンド処理フロー中に実行されるべきアサーションおよびポリシーを定義することに加えて、ポリシー実施エンジン960によって実施されたポリシーモデル(および予め定められたエンドツーエンド処理フローの他の形)は、あるポリシーが行なわれ得る、または行なわれない条件も定義してもよい。いくつかの実施形態では、ポリシーモデルは、ポリシーモデルで参照されるポリシーの各々を行なうための条件を実現するための一組の論理命令を含んでいてもよい。たとえば、ポリシーモデルは、あるポリシーが、あるメッセージタイプ(たとえば、SOAP、REST、またはURLメッセージ)については実行されるべきであるものの、他のメッセージタイプについては実行されるべきではないことをプロキシサーバ920に命令する条件を含んでいてもよい。加えて、上述のように、ポリシーモデルは、場合によっては、サービス/アプリケーションレベルで、および/または動作/方法レベルでポリシーを選択的に適用してもよく、このため、特定のポリシーの適用は、呼び出されているバックエンドウェブサービス930にだけでなく、サービス930内でコールされている特定の動作または方法にも依存していてもよい。さまざまな追加の実施形態では、いくつかのポリシーモデルは、あるポリシーが、あるユーザについては実行されるべきであるものの、他のユーザについては実行されるべきではないこと、あるクライアント装置タイプについては実行されるべきであるものの、他のクライアント装置タイプについては実行されるべきではないこと、あるバックエンドウェブサービス/アプリケーションについては実行されるべきであるものの、他のバックエンドウェブサービス/アプリケーションについては実行されるべきではないこと、および/またはメッセージに関連する任意の他の特性をポリシー実施エンジン960に命令する条件を含んでいてもよい。
【0144】
上述の例が示すように、ここに説明されたさまざまな実施形態は、異なるセキュリティポリシーおよび他の通信管理ポリシーが、DMZもしくは他の論理的または物理的サブネットワーク内で、メッセージのエンドツーエンド処理フロー全体にわたるさまざまな異なる処理点で適用され得る、動的ポリシーモデルをサポートしてもよい。この動的ポリシーモデルフレームワークは、悪意のある外部コンピューティングシステムからの攻撃を防止するための追加のセキュリティを構築し実現するために使用されてもよく、ラストマイルセキュリティインフラストラクチャ内(たとえば、バックエンドウェブサービス/アプリケーション430内)では可能ではなかったかもしれない、または好ましくなかったかもしれない、追加のタイプのセキュリティポリシーを実現してもよい。加えて、ここに説明された動的ポリシーモデルを使用して、トークン翻訳および/またはシングルサインオンアクセス制御システムといった、頑強な認証および認可システムが実現されてもよい。たとえば、クライアント装置410は、ユーザ名/パスワードまたは他のユーザクレデンシャルを介して認証してもよく、予め定められたエンドツーエンド処理フローは、異なるタイプのさまざまな異なるアクセストークン(たとえば、Kerberosトークン、SPNEGOトークン、ユーザ名トークン、NTLMトークン、SAMLトークンなど)を検索または生成するために、内部ネットワーク460内の信頼できる認証/認可サービスからのトークン検索および確認を行なうプロキシサーバ420内で実行されてもよい。したがって、ユーザが一組の有効なクレデンシャルを提供し、順調に認証および認可された後で、プロキシサーバ420内のさまざまなポリシーモデルを使用して、ユーザが次にアクセスするさまざまな異なるバックエンドウェブサービス/アプリケーション430のための対応するトークンタイプを検索または生成することによって、シングルサインオンアクセス制御システムを実現してもよい。
【0145】
本願の一実施形態によれば、処理部と通信部とを含むシステムが提供される。そのようなシステムは、この発明の原理を実行するために、ハードウェア、ソフトウェア、またはハードウェアとソフトウェアとの組合わせによって実現されてもよい。処理部および通信部は、図3に示すコンポーネントといった上述のコンポーネントによって実現されてもよい、ということが当業者には理解される。一方、処理部および通信部は、上述されたようなこの発明の原理を実現するために、組合わされてもよく、またはサブユニットへと分離されてもよい、ということが当業者には理解される。したがって、ここでの説明は、ここに説明された機能部の任意の可能な組合せまたは分離またはさらなる定義をサポートしてもよい。
【0146】
上述の実施形態の例では、処理部および通信部は、以下の動作を行なうために協働することができ、動作は、外部コンピュータネットワークにおけるクライアント装置からウェブサービス要求を受信する動作を含み、システムは、外部コンピュータネットワークとは別の内部コンピュータネットワークのサブネットワーク内で動作するように構成されており、動作はさらに、ウェブサービス要求内の第1のリソースを識別する動作と、第1のリソースがシステム内の第1のレプリゼンテーショナル・ステート・トランスファー(REST)ウェブサービスによって公開されると判断する動作と、システム内の第1のRESTウェブサービスを呼び出す動作と、システム内の第1のRESTウェブサービスの実行中、内部コンピュータネットワークにおけるコンピュータサーバ内の第2のウェブサービスを呼び出す動作とを含む。
【0147】
別の例では、処理部および通信部は、以下の動作を行なうことにより、RESTウェブサービスを呼び出すように協働することができ、動作は、第1のRESTウェブサービスによって公開された第1のリソースが、処理部に関連付けられたメモリ内に存在しないと判断する動作と、第1のリソースをメモリ内に生成する動作とを含み、第1のリソースは、ウェブサービス要求がクライアント装置から受信された後に生成される。
【0148】
別の例では、処理部および通信部は、以下の動作をさらに行なうように協働することができ、動作は、内部コンピュータネットワークにおけるコンピュータサーバ内の第2のウェブサービスによって提供される一組のリソースを記述するウェブアプリケーション記述言語(WADL)ファイルにアクセスする動作と、第2のウェブサービスによって提供される一組のリソースのWADLファイルにおける記述を使用して、第1のRESTウェブサービスにおいて1つ以上のリソースを生成する動作とを含む。
【0149】
さらに別の例では、処理部および通信部は、以下の動作を行なうことにより、システム内の第1のRESTウェブサービスにおいてリソースを生成するように協働することができ、動作は、WADLファイル内の1つ以上のリソース記述を修正する動作と、修正されたリソース記述に基づいて1つ以上のRESTリソースを作成する動作と、RESTリソースの各々をシステム内の第1のRESTウェブサービスにデプロイメントする動作とを含む。
【0150】
前述の説明では、例示のために、方法は特定の順序で説明された。代替的な実施形態では、方法は、説明されたものとは異なる順序で行なわれてもよい、ということが理解されるべきである。上述の方法はハードウェアコンポーネントによって行なわれてもよく、もしくは、汎用または専用プロセッサ、もしくは命令でプログラミングされた論理回路といったマシンに方法を行なわせるために使用され得るマシン実行可能命令のシーケンスで具現化されてもよい、ということも理解されるべきである。これらのマシン実行可能命令は、1つ以上のマシン読取可能媒体またはメモリ装置、たとえば、CD−ROMまたは他のタイプの光ディスク、フロッピーディスケット、ROM、RAM、EPROM、EEPROM、磁気カードまたは光カード、フラッシュメモリ、もしくは、電子命令を格納するのに好適である他のタイプのマシン読取可能媒体またはメモリ装置上に格納されてもよい。それに代えて、方法は、ハードウェアとソフトウェアとの組合わせによって行なわれてもよい。
【0151】
この発明の例示的で現在好ましい実施形態がここに詳細に説明されてきたが、発明の概念は他のやり方でさまざまに具現化され採用されてもよいこと、および、添付された請求項は、先行技術によって限定される場合を除き、そのような変更を含むと解釈されるよう意図されていることが理解されるべきである。
図1
図2
図3
図4A
図4B
図5
図6A
図6B
図7
図8
図9
図10