サービスをセキュアにルーティングするシステム及び方法が説明される。以下の説明では、説明のために、実現形態の完全な理解を提供するために、多数の具体的な詳細が提供される。しかしながら、実現形態がこれら具体的な詳細なしに実施可能であることは当業者に明らかであろう。他の例では、実現形態を不明瞭にすることを回避するため、構造及びデバイスはブロック図形式で示される。
“一実現形態”又は“実現形態”という明細書における言及は、当該実現形態に関して説明される特定の特徴、構造又は特性が少なくとも1つの実現形態に含まれることを意味する。明細書の各所における“一実現形態では”というフレーズの出現は、必ずしも全てが同一の実現形態を参照しているとは限らない。
本実現形態はまた、ここでの処理を実行するための装置に関する。本装置は、特に必要とされる目的のために構成されてもよいし、あるいは、それはコンピュータに記憶されたコンピュータプログラムによって選択的に起動又は再構成される汎用コンピュータを含むものであってもよい。このようなコンピュータプログラムは、限定することなく、フロッピーディスク(登録商標)、光ディスク、CD−ROM及び磁気ディスクを含む何れかのタイプのディスク、ROM(Read−Only Memory)、RAM(Random Access Memory)、EPROM、EEPROM、磁気若しくは光カード、フラッシュメモリ又は電子命令を記憶するのに適した何れかのタイプの媒体を含むコンピュータ可読記憶媒体に記憶されてもよい。
実現形態は、完全なハードウェア実現形態、完全なソフトウェア実現形態又はハードウェアとソフトウェア要素との双方を含む実現形態の形態をとりうる。一例となる実現形態は、限定することなく、ファームウェア、常駐ソフトウェア、マイクロコードなどを含むソフトウェアにより実現される。
さらに、実現形態は、コンピュータ又は何れかの命令実行システムによる利用のため、又は関連してプログラムコードを提供する非一時的なコンピュータ利用可能又はコンピュータ可読媒体からアクセス可能なコンピュータプログラムプロダクトの形態をとりうる。本説明のため、コンピュータ利用可能又はコンピュータ可読媒体は、命令実行システム、装置又はデバイスによる利用のため、又は関連してプログラムを内蔵、記憶又は移転可能な何れかの装置とすることができる。
ここに開示される技術及びシステムは、改良されたアプリケーション配信コントローラに独自の特徴セットを提供することによって従来技術の欠点を解消する。特に、アプリケーション配信コントローラは、例えば、ネットワーク(例えば、図1を参照して説明されるネットワーク102)を介しサービス(例えば、図1を参照して説明されるウェブサービス130)と外部のクライアント計算デバイス(例えば、図1を参照して説明されるノード108、ハブ110など)との間のインタフェースを提供する。いくつかの実現形態では、改良されたアプリケーション配信コントローラは、ユーザの役割、セキュリティのゾーン、URL(Uniform Resource Locator)ベースのルーティング及び/又は冗長性のサポートを用いて、方法又はAPI(Application Programming Interface)のレベルでのアクセスを提供するよう構成される。いくつかの実現形態では、改良されたアプリケーション配信コントローラはまた、又はあるいは、HTTP to HTTPSプロトコルブリッジ、HTTPS to HTTPプロトコルブリッジ、エマージェンシサービス、トークンの検証及び割当て及び/又は他のセキュリティサービスを提供するよう構成されてもよい。上記及び他の実現形態及び特徴は、本開示を通じて更に詳細に説明される。
ここに説明される技術による改良されたアプリケーション配信コントローラ(以降、単にアプリケーション配信コントローラとして参照される)は、単一のインタフェースを介し外部の計算デバイスに特権サービスへのアクセスを提供しうるサービスルーティングフレームワークを提供する。アプリケーション配信コントローラを用いて入力パケットを適切なサービスにルーティングすることによって、ディープパケットインスペクションが、パケットがルーティングされる前に実行可能である。例えば、APIは様々なサービスに分離されうるため、アプリケーション配信コントローラは、サービスリクエストのURLを調べ、当該サービスを適切なサービスに転送し、いくつかの例では、これらのAPIによってサービスをルーティングする前にパケットを検査しうるサービスルーティングフレームワークを提供してもよい。ディープパケット分析は、更なるセキュリティを提供し(例えば、トークン及び/又はシグネチャのデハッシュ処理、階層化されたセキュリティの複数の階層の提供など)、ユーザ又はクライアントデバイスを(例えば、ユーザ及び/又はトークンの役割に基づき)認証し、リクエストされたサービスがチェック及びバランシングされることを可能にし、リクエストをルーティングするための単一のインタフェースを提供するなどであってもよい。
いくつかの実現形態では、ここに説明される技術によるユーザの認証は、アプリケーション配信コントローラが当該ユーザの役割に基づき特定のサービスへの具体的なアクセスレベルを提供することを可能にする。例えば、説明されるように、ファイルシステム上の特定のサービス及び/又はディレクトリへのアクセスは、ホワイトリストディレクトリを用いて提供可能である(例えば、リスとされた役割/ユーザのみがサービスへのアクセスが許可される)。従って、認証プリミティブはユーザ又は役割に関して構築されてもよい。
ここに説明される技術及びシステムは更に、状況が人工知能システム(例えば、エクスパートシステム又は知識ベースシステム)による良好な取扱いを導くケースにおいて、リモートの医師をバーチャルな医師に置き換えるインテリジェントトリアージを遠隔医療システムに提供しうる。遠隔医療システムは、ローカルな付添人とソフトウェアとを用いて、患者が人間の医師によって診てもらう必要があるか、あるいは、バーチャル医師AIシステムによるサービスで十分であるか判断する遠隔クリニックにおけるトリアージ手順を含んでもよい。遠隔医療システムは更に、知識ベース、推論エンジン、入力モジュール、出力モジュール、中央/モニタリングモジュール及び学習モジュールを含むAIシステム(例えば、エキスパート又は知識ベースシステム)を含んでもよい。いくつかの実現形態では、遠隔医療システムは、バーチャル医師の処理が必要に応じて介入することを選択可能な人間の医師群によって監視可能なリモートセンタ又は処理センタを含む。制御又は処理センタは、診察群が個々のダッシュボード上に示される/共有される各自の場所において運営される個々の医師を備えた大規模な制御/処理センタ又は分散センタとすることが可能である。
AIによるトリアージを利用したレバレッジの同じ原理が、看護師/医師のアシスタントなどの他のタイプの医療専門職に適用可能である(例えば、明確なワークフローを有するバーチャルヘルスケア専門職及び各種特殊ケアオプションへのバーチャル医師の拡張)。遠隔医療システムのいくつかの効果は、かなり低いコストにおいてケアのより高い可用性である。既存の遠隔医療システムに対する更なる効果は、ルーチンケースの大部分がバーチャル医師によって取扱い可能であるため、特に重要でないヘルスケア問題について診られる患者数の増加を含む。さらに、小さな医師のチームが、例外が指摘される場合(バーチャル医師又は監視中の医師によって)、介入する相対的に多数のバーチャル医師のセッションを監視してもよい。従って、ここに説明される技術及びシステムを適用して、サービスルーティング、パケット処理及びセキュリティマネージメントが既存のシステムより迅速且つ効率的に実行可能であるため、より多くの患者が既存の遠隔医療システムより少ないリソースで診てもらうことが可能である。
図1は、ここに説明される技術の一実現形態による一例となる先進的な遠隔医療システム100のブロック図を示す。図示されるシステム100は、1つ以上のノード108、1つ以上のハブ110、1つ以上のアプリケーション配信コントローラ(ADC)120及び複数のウェブサービスサーバ128を含む。図示される実現形態では、これらのエンティティはネットワーク128を介し通信結合される。システム100が遠隔医療システムに関してここで説明されるが、システムは他の観点で配置されてもよいことが理解されるべきである。
図1に明示的には示されていないが、いくつかの実現形態では、クライアントデバイスは、ノード108又はハブ110において計算デバイス114を含んでもよいことが留意されるべきであるが、クライアントデバイスはパーソナルコンピュータ、ラップトップ、デスクトップ、スマートフォン、タブレットなどの何れかのユーザアクセス可能な計算デバイスを含んでもよいことが留意されるべきである。
図1は3つのノード108及び3つのハブ110を示しているが、ここに紹介される技術は、何れかの数のノード108又はハブ110を有する何れかのシステムアーキテクチャ上で実現されてもよい。さらに、図1の具体例は、1つのみのネットワーク102がノード108、ハブ110及びアプリケーション配信コントローラ120に結合することを示しているが、実際には、任意数のネットワーク102がエンティティを接続するため利用可能である。
一実現形態では、ウェブサーバ128bは、認証モジュール126を有し、アプリケーション配信コントローラ120を介しネットワーク102に接続される。認証モジュール126は、ユーザを登録し、及び/又はユーザのためにトークンを生成するコード及び/又はルーチンである。一実現形態では、認証モジュール126は、プロセッサにより実行可能な命令セットである。他の実現形態では、認証モジュール126は、メモリに記憶され、プロセッサによりアクセス可能及び実行可能である。
認証モジュール126は、ウェブサービスサーバ128及びウェブサービス130へのユーザアクセスを管理するためのゲートキーパとして機能しうる。いくつかの実現形態では、認証モジュール126は、ウェブサービスサーバ128へのアクセスをセキュアにするため、ランダムなシークレット数をアプリケーション配信コントローラ120及びクライアントデバイス(例えば、計算デバイス114)と別々に交換する。さらに、認証モジュール126は、ここで更に詳細に説明されるように、トークンを割当て、当該トークンをクライアントデバイスと通信しうる。
一実現形態では、認証モジュール126は、医療サービスプロバイダ、ノードスタッフ及び患者の1つ以上を含むユーザを登録する。一実現形態では、医療サービスプロバイダの登録は、医療サービスプロバイダログインを受信することを含む。例えば、認証モジュール126は、認証モジュール126がハブ110から医療サービスプロバイダに関するログインリクエストを受信し、ログインを許可すると判断すると(例えば、ここの何れかに説明されるように、有効なトークンを割り当てることによって)、医療サービスプロバイダを登録してもよい。一実現形態では、医療サービスプロバイダを登録することは、医療サービスプロバイダの役割を含む医療サービスプロバイダアカウントを維持することを含む。一実現形態では、医療サービスプロバイダアカウントは、関連する医療サービスプロバイダの教育、経験、医療専門性及び役割の1つ以上に関する情報を含む。
一実現形態では、認証モジュール126は、ノードスタッフを登録する。一実現形態では、ノードスタッフの登録は、ノードスタッフログインを受信することを含む。例えば、一実現形態では、認証モジュール126は、認証モジュール126は、ノード108から(ここに説明されるように、アプリケーション配信コントローラを介し)技師に関するログインリクエストを受信し、ログインを許可すると判断すると(例えば、ここの何れかに説明されるように、有効なトークンを割り当てることによって)、ノード108に技師を登録する。一実現形態では、ノードスタッフの登録は、ノードスタッフの役割を含むノードスタッフアカウントを維持することを含む。
一実現形態では、認証モジュール126は患者を登録する。一実現形態では、患者の登録は、バーチャル医師モジュールを用いて、患者をトリアージ及び/又は処置することを含む。バーチャル医師モジュール(図示せず)は、ノード108に配置された患者をトリアージ及び/又は処置するためにプロセッサにより実行可能なコード及びルーチンであってもよい。例えば、診察を求める患者がノード108に到着したと仮定すると、一実現形態では、認証モジュール126は、患者チェックイン信号をバーチャル医師モジュールにわたすことによって患者を登録し、バーチャル医師モジュールは、当該患者の処置方法を判断する。一実現形態では、患者の登録は患者の取り込みを含む。例えば、診察を求める患者がノード108に到着したと仮定すると、一実現形態では、認証モジュール126は、ストレージ106における患者の電子医療記録を更新するようリクエストすることによって、又は(患者が新規である場合)ストレージ106において新たな電子医療記録を作成するようリクエストすることによって患者を登録する。さらに、患者の役割ベースのアクセスレベルが割り当てられて維持されてもよい。
一実現形態では、認証モジュール126は、ユーザを登録し、各ユーザにトークンを発行する。例えば、ノード108における看護師は、例えば、ログイン/パスワード又は認証された証明書を含む登録情報を提供し、認証モジュール126は、看護師にトークンを発行する。いくつかの実現形態では、ウェブサービスサーバ128nはトークンを生成し、認証モジュール126はトークンを利用して、ウェブサービス130nへのアクセスをユーザに提供する前にユーザの身元を検証する。トークンは、ユーザの身元を特定するのに利用される。認証処理は、サインオンプロセスとして(例えば、サービスとしてIDをサポートするプロセス)又はHTTPSを介し実現可能である。トークンを割り当てる認証モジュール126の処理は、例えば、図7及び8において、本明細書を通じて更に詳細に説明される。
図1は、ウェブサービスサーバ128bの一部として認証モジュール126を示す。他の実現形態では、認証モジュール126及びその機能は、システム100の1つ以上のコンポーネント上で動作する(例えば、ノード108、ハブ110及び/又はウェブサービスサーバ128にわたって)。異なるサーバに機能を分散させることは、ロードバランシング配置技術において有用でありうる。
アプリケーション配信コントローラ(ADC)120は、サービスをルーティングするためのハードウェア又はソフトウェア機構を有してもよい。図1の具体例において示されるように、アプリケーション配信コントローラ120は、サービスリクエストを受信し、ウェブサービス130を外部の計算デバイス(例えば、ノード108又はハブ110における計算デバイス114)にルーティングするため、ネットワーク102とウェブサービスサーバ128との間に配置される。いくつかの実現形態では、システム100は、ウェブサービスサーバ128とネットワーク102との間にファイアウォールを有してもよい。このような実現形態では、アプリケーション配信コントローラ120は、ファイアウォールとウェブサービスサーバ128との間に配置されてもよい。アプリケーション配信コントローラ120は、内部のサービスと外部の計算デバイスとの間のブリッジとして機能するため、1つ以上の内部のサービス(例えば、ウェブサービスサーバ128及び/又は他のサービスなどのファイアウォールの背後のサービス)とネットワーク102との間に単一のインタフェースを提供してもよい。
いくつかの実現形態では、アプリケーション配信コントローラ120は、ネットワーク102上のクライアントデバイスによるトランスポートレイヤセキュリティ(TLS)セッションを維持することによって、システム100を簡単化する。アプリケーション配信コントローラ120がない場合、クライアントデバイスは各サービスとのセッションを確立する必要があり、そのメンテナンスは困難なタスクとなる。従って、アプリケーション配信コントローラ120をサービスとクライアントデバイスとの間のインタフェースとして利用することによって、メンテナンス及び計算リソースの使用が実質的に低減される。
いくつかの実現形態では、複数のアプリケーション配信コントローラ120は、図8A及び8Bを参照して説明されるように、例えば、パラレルな階層に配置されてもよい。アプリケーション配信コントローラ120のこのような構成の利用は、ここで何れにおいて説明されるように、より高いセキュリティ粒度、ロードバランシングなどを提供しうる。
一実現形態では、ウェブサービス130は、ウェブサービスサーバ128によって提供される。一実現形態では、ウェブサービス130は、ウェブサービス130は、ここに説明される機能を実行するよう互いに連携する複数の分散されたモジュールを含む。サービスの具体例は、バーチャル医師モジュール、ビデオサービス、キューイングサービス、電子医療記録サービス及びここで述べられる他のサービスを含むが、他のサービスがここに説明される技術において可能であり、想到されることが理解されるべきである。さらに、いくつかのサービスは1つ以上のカテゴリをそれに関連付けたことが理解されるべきである。例えば、特定のサービスは、ストリーミングデータがアプリケーション配信コントローラ120によって当該特定のサービスから受信される限り、ソケット接続をオープンに維持するストリーミングカテゴリを有してもよい。同様に、いくつかのサービスは1つ以上のプロトコルをそれと関連付けていてもよい。例えば、特定のサービスは、HTTPを用いてアプリケーション配信コントローラ120と通信してもよいが、アプリケーション配信コントローラ120は、当該サービスへのクライアントデバイスによるHTTPSアクセスを提供する。
ネットワーク102は、ノード108、電子医療記録サーバ104、ハブ110及びアプリケーション配信コントローラ120との間の通信を可能にしうる。従って、ネットワーク102は、例えば、Wi−Fi、Wi−Max、UMTS(Universal Mobile Telecommunications System)、3G、イーサネット(登録商標)、802.11、ISDN(Integrated Services Digital Network)、DSL(Digital Subscriber Line)、ATM(Asynchronous Transfer Mode)、InfiniBand、PCI Express Advanced Switchingなどを含む技術を利用したリンクを含むことが可能である。同様に、ネットワーク102上で利用されるネットワーキングプロトコルは、TCP/IP(Transmission Control Protocol/Internet Protocol)、MPLS(Multi−Protocol Label Switching)、UDP(User Datagram Protocol)、HTTP(Hypertext Transport Protocol)、SMTP(Simple Mail Transfer Protocol)、FTP(File Transfer Protocol)、LDPA(Lightweight Directory Access Protocol)、CDMA(Code Division Multiple Access)、WCDMA(登録商標)(Wideband Code Division Multiple Access)、GSM(登録商標)(Global System for Mobile communications)、HSDPA(High−Speed Downlink Packet Access)などを含むことができる。ネットワーク102上でやりとりされるデータは、HTML(Hypertext Markup Language)、XML(eXtensible Markup Language)などを含む技術及び/又はフォーマットを利用して表現できる。さらに、リンクの全て又は一部は、例えば、SSL(Secure Socket Layer)、Secure HTTP及び/又はVPN(Virtual Private Network)又はIPsec(Internet Protocol security)などの従来の暗号化技術を利用して暗号化可能である。他の実現形態では、エンティティは、上述したものの代わりに、あるいは追加してカスタム及び/又は専用データ通信を利用可能である。実現形態に依存して、ネットワーク102はまた他のネットワークとのリンクを含むことが可能である。
一実現形態では、ネットワーク102は、例えば、インターネットなどの部分的に公衆又は完全に公衆のネットワークである。ネットワーク102は、プライベートネットワークとすることが可能であり、あるいは、1つ以上の別個の又は論理的なプライベートネットワーク(例えば、バーチャルプライベートネットワーク、WAN(Wide Area Network)及び/又はLAN(Local Area Network))を含むことができる。さらに、ネットワーク102との間の通信リンクは、有線又は無線(すなわち、地上又は衛星ベースの送受信機)とすることができる。一実現形態では、ネットワーク102はIPベースのワイド又はメトロポリタンエリアネットワークである。
一実現形態では、ウェブサービスサーバ128nは、任意的なストレージ106を含む。一実現形態では、ストレージ106は、システム100の患者の電子医療記録を含むデータベースである。一実現形態では、ノード108又はハブ110が患者に関する情報を送信する毎に、ストレージ106は当該患者の電子医療記録を更新する。
一実現形態では、ノード108は、患者が診察を受ける場所であり、計算デバイス114a及び各種医療デバイス112を含みうる。一実現形態では、ノード108は、ハブ110から遠隔に配置される。例えば、ノード108は、地方エリアに物理的に配置された施設であり、ハブ110は、都市又は他の都市エリアに物理的に配置される。他の具体例では、ノード108は患者の自宅であり、ハブ110は近所の病院である。上記はハブから遠隔に配置されるノード108の単なる具体例であり、他の具体例が存在することが認識されうる。一実現形態では、ノード108は可動的である。例えば、ノード108は、様々な場所に移動し、患者が車両において診察を受ける計算デバイス114a及び医療デバイス112を備えた車両である。医療サービス112の具体例は、限定することなく、聴診器、血圧メータ、パルスオキシメータ、温度計、検眼鏡、身長体重計、耳鏡、カメラ、遠隔心臓病デバイス(例えば、ECGマシーン)、遠隔病理デバイス(例えば、マイクロスコープ)、遠隔皮膚病デバイス(例えば、高解像度カメラ)、遠隔放射線デバイス(例えば、超音波マシーン)などを含む。
一実現形態では、医療デバイス112の1つ以上がノード108に統合される。一実現形態では、統合された医療デバイスは、格納及び転送機能を可能にするため、ノード108に通信結合される。例えば、一実現形態では、統合された医療デバイス112は、計算デバイス114aに統合された医療デバイス112の出力を自動送信するため、ノードの計算デバイス114aに通信結合される。統合された医療デバイスの出力は、一実現形態によると、ノードの計算デバイス114a上のソフトウェアによって取得され、電子医療記録サーバ104に転送される。このような実現形態は、ノードスタッフが医療デバイス112を読み間違うことからのエラーと、ノードスタッフが医療デバイス112の出力を記録ミスすることからの転記ミスとを効果的に減少させうる。
格納及び転送は、遠隔医療の非同期的な非インタラクティブな形態である。一実現形態では、格納及び転送は、患者及び医師が同時に利用可能でないときに適用される。例えば、一実現形態では、患者データは、ノード108によって収集又は取得され、ノード108における計算デバイス114a上に格納され、その後、ネットワーク102を介しハブ医師に転送される。ハブ医師は、以降において情報を確認し、診断、推奨、更なる情報に対するリクエストなどによって応答する。
いくつかの実現形態では、ノード108は、ノード108とハブ110との間に直接的な接続がないとき、格納及び転送を利用する。ノード108は、患者データのローカルコピーを格納し、ノード108がネットワーク102に接続されると、ハブ110と同期する。これは、ノード108が不良なネットワーク接続をしばしば受ける可能性があるため、特に有用である。例えば、患者を手助けする技師が遠隔地域に外出しているとき、技師は患者データを収集し、ノード108がより良好な接続を有するまで待機し、データを電子医療記録サーバ104に同期し、ケースを確認し、診断を実行するのに適した医師に通知が送信される。医師から診断を受信した後、技師は処方された薬を提供するか、あるいは、患者についてリクエストされた更なる検査を実行する。
ノード108は、計算デバイス114a及び医療デバイス112を操作するためスタッフが配置されてもよい。例えば、スタッフは、医療デバイス112を用いて患者の医療情報を取得し、計算デバイス114aを用いて診断のため患者を登録するよう訓練された看護師であってもよい。一実現形態では、ノード108におけるスタッフは、ハブ110における医療サービスプロバイダほどは高度な教育を受けず、及び/又は専門的でない。例えば、ノードは看護師、医療技師、ラボ技師、医師の助手の1人以上が配置され、医療サービスプロバイダは医師(例えば、一般開業医又は専門医)であると仮定する。
医療サービスプロバイダでないスタッフをノード108に配置することは、システム100における各医療サービスプロバイダの効果を効果的に増大させうる。例えば、地域に医師が不足している場合、各遠隔ノード108は、医師より迅速に訓練されうる医療技師を含む。一実現形態では、医療技師は、患者を登録し、患者のバイタルサインをとり、病気に基づき更なる医療デバイス112を利用する。さらに、ノードのスタッフは、医師による治療を必要としない状態の患者を処置してもよい。医師は、医療技師によって部分的に収集された患者の医療情報を受信し、患者を診察する。例えば、患者が発疹について訴えている場合、技師は高解像度カメラを用いて問題のあるエリアの写真を撮影し、医師はそれを確認し、患者と話し合いをしてもよい。従って、医療サービスプロバイダが患者を診察及び診断するのにより多くの時間を費やし、患者の様々な遠隔地に移動し、患者登録、基本的なバイタルサインの収集などの専門性の低いタスクを実行する時間を節約することを可能にすることによって、医師の有効性が増加する。
ノード108は、少なくとも1つの計算デバイス114aを有する。一実現形態では、計算デバイス114aは、診察のためハブ110における医療サービスプロバイダにアクセスするため、ノードにおける患者によって利用される。例えば、計算デバイス114aは、ラップトップコンピュータ、デスクトップコンピュータ、携帯電話、PDA(Personal Digital Assistant)、モバイル電子メールデバイス、埋め込み若しくは結合された1つ以上のプロセッサを備えたテレビ又はネットワーク102にアクセス可能な他の何れかの電子デバイスである。
一実現形態では、ノード108はテレビ会議ユニット116aを有する。一実現形態では、テレビ会議ユニット116aは、ハードウェアベースの手段である。他の実現形態では、テレビ会議ユニット116aは、ソフトウェアベースの手段である。一実現形態では、テレビ会議ユニット116aは、患者のビデオをキャプチャするウェブカメラ若しくは他のデバイスと、テレビ会議ソフトウェアとを含む計算デバイス116aである。実現形態に関係なく、患者のビデオは、ライブの医師との遠隔医療セッションが開始された後、ハブ110に送信されてもよい。診察のためハブ110における医療サービスプロバイダにアクセスするためノード108における患者によって利用されるテレビ会議ユニット116aは、ここでは診察デバイスとして参照されることがある。
各種実現形態では、ハブ110は、医師又は他の医療サービスプロバイダ(例えば、看護師、医師の助手など)が先進的な遠隔医療システムに接続する何れかの場所であってもよい。例えば、ハブ110は、医師のオフィス、病院、他のヘルスケア施設、医師の自宅などであってもよい。他の実現形態では、ハブ110は、医師のチームが遠隔医療システムに接続される1人以上の患者をモニタしうる遠隔オペレーションセンタであってもよい。一実現形態では、遠隔オペレーションセンタは、専門的訓練を受けた集中治療医がモニタし、ノード108において医師及び/又は患者と話し合い、重要なヘルスケア問題を有する患者を処置する集中治療医のハブであってもよい。ハブ110は、ノード108と接続し、医療サービスプロバイダが情報技術インフラストラクチャを利用して必要ベースでノード108における患者を遠隔診断及び診察することを可能にする。ハブ110の情報技術インフラストラクチャは、例えば、計算デバイス114b、テレビ会議ユニット116b、モニタリングモジュール118、デジタルクリップボード、モニタ、コラボレーションディスプレイ、プリンタなどを含む。モニタリングモジュール118は、医師又は他の医療サービスプロバイダがバーチャル医師モジュールの処置をモニタし、状況がライブの医師との遠隔医療セッションを保証すべきである場合、介入することを可能にする。
ハブ110は、少なくとも1つの計算デバイス114bを含む。一実現形態では、計算デバイス114bは、患者情報にアクセスし、ノード108において患者を診察するため、ハブ110において医療サービスプロバイダによって利用される。例えば、計算デバイス114bは、ラップトップコンピュータ、デスクトップコンピュータ、タブレットコンピュータ、携帯電話、PDA、モバイル電子メールデバイス、受け込み又は結合された1つ以上のプロセッサを備えたテレビ、又は医師がシステムにログインし、患者を検索し、患者をスケジューリングし、処方箋を注文し、ノートをとり、テレビ会議を実行し、レポートを生成して解析を実行し、バーチャル医師セッションをモニタすることを可能にするソフトウェアを含む。
一実現形態では、ハブ110はテレビ会議ユニット116bを有する。一実現形態では、テレビ会議ユニット116bはハードウェアベースの手段である。他の実現形態では、テレビ会議ユニット116bはソフトウェアベースの手段である。一実現形態では、テレビ会議ユニットは、医療サービスプロバイダのビデオをキャプチャするウェブカメラ若しくは他のデバイスと、テレビ会議ソフトウェアとを含む計算デバイス114bである。実現形態に関係なく、医療サービスプロバイダのビデオは、医療サービスプロバイダがノード108において患者を診察しているときにノード108に送信される。
ハブにおける医療サービスプロバイダによるノードにおける患者の遠隔診察を可能にすることによって、医療サービスプロバイダがより効果的に利用され、患者はより高い品質の医療ケアを受けうる。例えば、医療サービスプロバイダが、ハブ110が配置される大都市における心臓専門医であると仮定する。また、都市から遠く離れた地方にいる患者が心臓関連の問題を有していると仮定する。一実現形態では、ハブは心臓専門医が患者の所に移動することなく地方にいる患者を遠隔に診察及び診断することを可能にする。従って、心臓専門医は、患者に移動するのに費やす時間を利用して、更なる患者を診察及び診断し、これにより、心臓専門医の利用性を向上させることができる。さらに、地方の患者は、そうでない場合には患者の選択肢ではなかった専門家(例えば、心臓専門医)による診察及び診断を受けることが可能になり、これにより、患者が受ける医療ケアの品質を向上させることができる。上記はハブ110における医療サービスプロバイダによるノード108における患者の遠隔診察が医療サービスプロバイダの利用をどのように増大し、患者が受ける医療ケアの品質を増大させるかの単なる具体例であることが認識されるであろう。
図2は、ここに説明される技術のいくつかの実現形態によるアプリケーション配信コントローラ120のブロック図200である。アプリケーション配信コントローラ120は特殊なハードウェア計算デバイス/サーバであるとして示されているが、それはプロセッサ上で実行可能なソフトウェアモジュール又はハードウェアとソフトウェアとの組み合わせとして実現されてもよいことが留意されるべきである。図2に示されるように、アプリケーション配信コントローラ120は、バス202に結合されたプロセッサ204、メモリ206、通信ユニット208及びストレージ210を有する。一実現形態では、バス202の機能は相互接続するチップセットによって提供される。
通信ユニット208は、ノード108、ハブ110及び電子医療記録サーバ104からデータを受信する。通信ユニット208は、バス202に結合される。一実現形態では、通信ユニット208は、ネットワーク102との直接的な物理的接続又は他の通信チャネルのためのポートを有する。他の実現形態では、通信ユニット208は、1つ以上の無線通信方法を利用して、ネットワーク102又は他の通信チャネルとデータをやりとりする無線送受信機を有する。
プロセッサ204は、何れかの汎用プロセッサであってもよい。プロセッサ204は、算術論理ユニット、マイクロプロセッサ、汎用コントローラ又は計算を実行し、コード及びルーチンを実行する他のプロセッサアレイを有する。プロセッサ204は、ウェブサービスサーバ128の他のコンポーネントとの通信用のバス202に結合される。プロセッサ204は、データ信号を処理し、CISC(Complex Instruction Set Computer)アーキテクチャ、RISC(Reduced Instruction Set Computer)アーキテクチャ、又は命令セットの組み合わせを実現するアーキテクチャを含む各種計算アーキテクチャを有してもよい。図2には1つのみのプロセッサが示されているが、複数のプロセッサが含まれてもよい。他のプロセッサ、オペレーティングシステム、センサ、ディスプレイ及び物理的構成が可能であることが当業者に明らかであろう。
メモリ206は、非一時的な記憶媒体である。メモリ206は、プロセッサ204により実行可能な命令及び/又はデータを保持する。一実現形態では、メモリ206に記憶される命令及び/又はデータは、ここに説明される技術の何れか及び/又は全てを実行するためのコードを含む。メモリ206は、DRAM(Dynamic Random Access Memory)デバイス、SRAM(Static Random Access Memory)デバイス、フラッシュメモリ又は当該分野において知られる他のメモリデバイスであってもよい。一実現形態では、メモリ206はまた、例えば、ハードディスクドライブ、フロッピーディスク(登録商標)ドライブ、CD−ROMデバイス、DVD−ROMデバイス、DVD−RAMデバイス、DVD−RWデバイス、フラッシュメモリデバイス又はより永続的に情報を記憶するための当該分野において知られる他のマスストレージデバイスなど、不揮発性メモリ又は同様の永続的ストレージデバイス及び媒体を含む。メモリ206は、アプリケーション配信コントローラ120の他のコンポーネントとの通信用のバス202に結合される。一実現形態では、コントローラモジュール222は、メモリ206に格納され、プロセッサ204により実行可能である。
コントローラモジュール222は、アプリケーション配信コントローラ120の機能を提供するため、プロセッサ204により実行可能なコード及びルーチンである。一実現形態では、コントローラモジュール222は、プロセッサ204により実行可能な命令セットである。他の実現形態では、コントローラモジュール222はメモリ206に格納され、プロセッサ204によりアクセス及び実行可能である。本開示の目的のため、例えば、より多い、より少ない又は異なるコンポーネントが利用されるなど、他の実現形態が可能であるが、アプリケーション配信コントローラ120の機能は、コントローラモジュールなどのアプリケーション配信コントローラ120の1つ以上のコンポーネントによって実行されてもよい。
ストレージデバイス210は、例えば、ハードドライブ又はソリッドステートメモリデバイスなど、データを保持可能な何れかのデバイスである。ストレージデバイス210は、不揮発性メモリデバイス又は同様の永続的ストレージデバイス及び媒体である。一実現形態では、ストレージデバイス210は、アプリケーション配信コントローラ120のデータ及び情報を格納する。いくつかの実現形態では、ここに説明されるようなルーティング及びサービステーブルの1つ以上は、ストレージ210に格納されてもよい。
ここで用いられるように、モジュールという用語は指定された機能を提供するのに利用されるコンピュータプログラムロジックを参照する。従って、モジュールは、ハードウェア、ファームウェア及び/又はソフトウェアにより実現可能である。一実現形態では、プログラムモジュールは、ストレージデバイス210に格納され、メモリ206にロードされ、プロセッサ204により実行される。ここに説明されるエンティティの実現形態は、ここに説明されるもの以外及び/又は異なるモジュールを含むことができる。さらに、モジュールに付属される機能は、他の実現形態では他の又は異なるモジュールによって実行可能である。さらに、本説明は簡潔性及び便宜性のため、モジュールという用語を省略することもある。
アプリケーション配信コントローラ120を参照して説明されるコンポーネント202〜210はまた、ウェブサービス130、認証モジュール126及び/又はストレージ106を実行するのに利用されてもよいことが留意されるべきである。
図3A及び3Bはそれぞれ、アプリケーション配信コントローラ120を介しサービスを提供するための一例となるルーティングテーブル300a及び一例となるサービステーブル300bを示す。単一のモノリシックアプリケーションより、現代のシステムにおけるアプリケーションは、分散されたシステムを介しモジュール形式で提供されるサービスセットに緩く結合されうる。いくつかの実現形態では、アプリケーション配信コントローラ120は、クライアントデバイスがバックエンドサービス(例えば、ウェブサービス130)のアーキテクチャに類似したアプリケーション又はサービスセットに接続する単一の接触点又はインタフェースを提供する。
アプリケーション配信コントローラ120は、データ構造を維持することによって(例えば、ストレージ210に)サービスルーティングを実現してもよい。これらのデータ構造は、ルーティングテーブルと、いくつかの実現形態ではサービステーブルとを含むものであってもよい。ルーティングテーブルは、各種サービスのためのルーティング情報を取得し、サービステーブルは、これらのサービスのための情報を提供する。ルーティングテーブル及びサービステーブルは、サービス定義によってリンクされる。情報が2つのテーブル間で異なる具体例では、サービステーブルにおけるデータはルーティングテーブルにおいてデータを無効にしうる。
アプリケーション配信コントローラ120は、例えば、実行時若しくはアプリケーション配信コントローラ120に知られるリロードサービスに動的に応答して、ルーティングテーブル及びサービステーブルにおける情報をリロードするよう構成されてもよい。リロードサービスは、ルーティング又はサービステーブル全体をリロードしてもよい。例えば、所与のノード108においてエラーが発生した場合、又はサービス若しくはルーティングテーブルが更新される必要がある場合(例えば、新たなサービス又はサービスに関する情報への変更のため)、リロードされたサービスは、ルーティング及び/又はサービステーブルが更新された正確なルーティング情報を有するようリフレッシュされることを可能にする。
いくつかの実現形態では、ルーティング及び/又はサービステーブルは、図3A及び3Bに示されるような情報特定の順序及び有無を含むものであってもよいが、他の実現形態が可能であることが理解されるべきである。各種実施例では、ルーティング及びサービステーブルは特定のドメインに特有のものであってもよく、ユーザが各種ドメイン上で異なる特権を有することが可能であるか、あるいはドメインのホワイトリスト上に存在しないことを意味する。さらに、アプリケーション配信コントローラの1つの具体例は、複数のドメインに対するルーティング及びサービステーブルを含んでもよい。いくつかの実現形態では、異なるドメインに特有のルーティング及びサービステーブルは、異なるルーティングテーブル及びサービステーブルの名前によって区別される。さらに、いくつかの実現形態では、何れかのドメインに関連付けされず、多くのドメインに共通する汎用的なルーティング及びサービステーブルが、アプリケーション配信コントローラによって維持されてもよい。
図3Aは、ここに説明される技術のいくつかの実現形態によるアプリケーション配信コントローラ120を介しサービスを提供するための一例となるルーティングテーブル300aを示す。一例となるルーティングテーブルでは、各ラインは、単一のスペース、複数のスペース、タブなどによって分離されうる複数のデータタイプを含んでもよい。一例となるルーティングテーブル300aは、例えば、SERVICE302、DSTIP304、DSTPORT306、PROTOCOL308、STRP310、TYPE312、SRVCDEFINITION314、TOKENNEEDED316、WLROLES318及びSECURITYZONE320を含むサービスのためのエンティティを含む。SERVICE302は、クライアントによって求められたサービス(例えば、リクエストされたサービス)の名前を表す。DSTIP304は、サービスリクエストがルーティングされるべきデスティネーションIPアドレス、すなわち、サービスが運営されているIPアドレスを表す。DSTPORT306は、サービスが運営されているデスティネーションポートを表す。PROTOCOL308は、アプリケーション配信コントローラ120とサービスとの間に確立されるべき接続プロトコルのタイプを表す。STRP310は、アプリケーション配信コントローラ120に固有のものであり、例えば、図6A及び6Bを参照して説明されるように、コマンドにおいてプリフィックスを外すか否かを示す。TYPE312は、APIコールのカテゴリを示す。いくつかの実現形態では、カテゴリは、“normal”、“getstream”、“poststream”、“event”、“reset”、“secure”及び“token”の1つとして定義(及びいくつかの実現形態では制限)されてもよい。カテゴリの具体例は、ここの何れかにおいてさらに詳細に説明される。SRVCDEFINITION314は、サービスの定義を表し、ルーティングテーブル(例えば、ルーティングテーブル300a)とサービステーブル(例えば、サービステーブル300b)との間のリンクとして機能しうる。TOKENNEEDED316は、サービスへのアクセスがトークンを必要とするか否かを示す(例えば、ここの何れかにおいて説明されるように)。いくつかの実現形態では、TOKENNEEDED316が1の値を有する場合、トークンが必要とされ、TOKENNEEDED316が0の値を有する場合、トークンは必要とされず、サービスは、ここの何れかにおいて説明されるように、エマージェンシにおいて迅速なアクセスを提供するのに役立つトークン検証なしのフリーアクセス又は他の認証チェックを有する。WLROLES318は、サービスについてホワイトリストされた1つ以上の役割(例えば、コンマによって分離されうる)を示す。サービスについてホワイトリストされた役割又はユーザは、何れのユーザがサービスへのアクセスが付与されうるかを示す。SECURITYZONE320は、以下で更に詳細に説明されるように、サービス又はAPIコールが属するセキュリティゾーンを表す。
図3Bは、ここに説明された技術のいくつかの実現形態によるアプリケーション配信コントローラ120を介しサービスを提供するための一例となるサービステーブル300bを示す。一例となるサービステーブル300bは、SERVICENAME352、METHOD354、API356、TYPE360、TOKENNEEDED360、WLROLES362及びSECURITYZONE364を含むサービスのためのエンティティを含む。SERVICENAME352は、ルーティングテーブルのSRVCDEFINITION314に対応する。METHOD354は、get、post、put、head、delete、connect、trace、optionsなどの複数の可能な入力メソッド又はコマンドの1つを表す。API356は、レジスタからリクエストされたアプリケーションプログラミングインタフェースを表し、URLに含まれてもよい。
SECURITYZONE364は、ルーティングテーブルにリストされたSECURITYZONE320と同じであるが、異なる値を含んでもよい。サービステーブル300bにおけるSECURITYZONE364の値がルーティングテーブル320におけるSECURITYZONE320と異なる場合、ルーティングテーブルにおけるセキュリティゾーンが利用される。例えば、クライアントがStream3に対応するサービス(例えば、SERVICE320にリストされるような)にポストすることを試みている場合(例えば、METHOD354)、セキュリティゾーンは更なるセキュリティ検証をコールしてもよい。メソッド間を区別することによって、アプリケーション配信コントローラ120は、セキュリティに増大した粒度を提供する(例えば、特定の役割はサービス内の異なるメソッド又はAPIへのアクセスを有してもよい)。具体例では、技師(例えば、看護師)がライブストリームを取得するためのアクセスを有してもよいが、管理者はライブストリームをポストするためのアクセスを有してもよい。
具体例では、全てのサービスが例外(例えば、デフォルト値への修正)を有しうるAPIのセットを有してもよい。ストリーミングサーバ上のStream3と呼ばれるサービスでは、医師は第1のメソッド及びAPIに対するアクセスを有してもよく、管理者及び技師は第2のメソッド及びAPIに対するアクセスを有してもよく、管理者は第3のメソッド及びAPIに対するアクセスを有してもよい。例えば、メソッド及びAPIに基づき特定の例外が存在しうる(例えば、医師はサービスへの標準的なアクセスを有しうるが、管理者は当該サービスの特定のメソッドへのアクセスを有しうる)。一実現形態では、APIの処理はURLを解析することによって実行される。例えば、アプリケーション配信コントローラ120は、ドメイン名/サービス名/APIなどのURLを解析し、サービス及びAPIを決定してもよい。
アプリケーション配信コントローラ120によるルーティングテーブル及びサービステーブルのシナリオの具体的な利用シナリオとして、アプリケーション配信コントローラ120は、例えば、HTTPSポートを利用して、URLの形式によりサービスリクエストを受信する。アプリケーション配信コントローラ120は、URLにおけるサービス名を検出する(例えば、URLがwww.domain.com/stream3/livestreamである場合、サービス名はドメインの直後に現れてもよく、本例では、stream3がサービス名である)。アプリケーション配信コントローラ120はまた、URLにおけるAPIを検出してもよい(例えば、前の具体例では、ライブストリームがAPIである)。アプリケーション配信コントローラ120は、URLに提示される具体的なサービス名がルーティングテーブルに存在するか確認し、ルーティングを処理すべきか判断してもよい。アプリケーション配信コントローラ120がルーティングテーブル(例えば、ルーティングテーブル300a)におけるサービス名(例えば、SERVICE302フィールドにおける)のエントリを検出した場合、アプリケーション配信コントローラ120は、デスティネーションIP(例えば、DSTIP304フィールドにおける)、デスティネーションポート(例えば、DSTPORT306フィールドにおける)、プロトコル(例えば、PROTOCOL308フィールドにおける)、呼び出し対象のコマンドのカテゴリ(例えば、TYPE312フィールドにおける)などをロードしてもよい。
アプリケーション配信コントローラ120は、所与のAPI名(例えば、ライブストリーム)がサービステーブル(例えば、サービステーブル300b)に存在するかチェックしてもよい。いくつかの実現形態では、アプリケーション配信コントローラ120は、サービスのサービスデスティネーション(例えば、SRVCDEFINITION314フィールドにおける)に対応する1つ以上のサービステーブル(例えば、サービステーブル300b)エントリを検出してもよい。サービステーブル情報が存在する場合、アプリケーション配信コントローラ120は、URLにおけるメソッド(例えば、METHOD354フィールドにおける)とAPI(例えば、API356フィールドにおける)との組み合わせ、ホワイトリスト役割(例えば、WLROLES362フィールドにおける)、セキュリティのゾーン(例えば、SECURITYZONE364フィールドにおける)、トークンのニーズ(例えば、TOKENNEEDED360フィールドにおける)及びカテゴリ(例えば、TYPE358フィールドにおける)をチェックしてもよい。
いくつかの実現形態では、アプリケーション配信コントローラ120がルーティングテーブルにおいてサービス名を検出したが、サービステーブルにおいてリクエストされたメソッド/APIを検出しなかった場合、アプリケーション配信コントローラ120は、リクエストされたメソッドの粒度情報がなく、ルーティングテーブルにおけるデフォルト値が利用されると判断する。従って、サービステーブルにおける値は、存在する場合には、ルーティングテーブルにおける値を無効にしうるが、サービステーブルにおいてそのような値又はエントリがない場合、ルーティングテーブルにおけるデフォルト値が利用される。
図4は、ここに説明される技術のいくつかの実現形態によるアプリケーション配信コントローラ120を利用してサービスをルーティングするための一例となる方法400のフローチャートを示す。402において、アプリケーション配信コントローラ120は、クライアントデバイスからサービスリクエストを受信してもよい。いくつかの実現形態では、サービスリクエストは、ここで何れにおいて更に詳細に説明されるように、URLの形式で受信される。
404において、アプリケーション配信コントローラ120は、サービスリクエストのリクエストされたサービスに基づきルーティングパラメータを決定してもよい。いくつかの実現形態では、ルーティングパラメータは、例えば、図3A及び3Bを参照して説明されるように、ルーティング又はサービステーブルを用いて決定される。パラメータを決定するプロセスは、図5を参照して更に詳細に説明される。
404において、アプリケーション配信コントローラ120は、サービスリクエストのリクエストされたサービス、リクエストされたサービスのセキュリティゾーン及び/又は検証されたトークンに基づきクライアントデバイスによるアクセスを認証してもよい。セキュリティゾーン、トークンなどの何れが呼び出されているかの判定は、例えば、図3A及び3Bを参照して説明されるように、ルーティング及びサービステーブルに基づき決定可能である。アクセスを認証するプロセスは、図7〜8Bを参照して更に詳細に説明される。
406において、アプリケーション配信コントローラ120は、ルーティングパラメータ及び認証されたアクセスに基づきリクエストされたサービスをクライアントデバイスにルーティングしてもよい。
図5は、ここに説明される技術のいくつかの実現形態によるリクエストされたサービスのルーティングパラメータを決定する一例となる方法500のフローチャートを示す。一例となる方法500は、図4の404における処理を実行するための更なる詳細を表す。502において、アプリケーション配信コントローラ120は、サービスリクエストに基づきリクエストされたサービスを決定してもよい。いくつかの実現形態では、アプリケーション配信コントローラ120は、上述されたように、サービスリクエストのURLを用いてリクエストされたサービスを決定する。
504において、アプリケーション配信コントローラ120は、リクエストされたサービスをルーティングするためのプロトコルブリッジに利用されるリクエストされたサービスのプロトコルを決定してもよい。例えば、いくつかの実現形態では、アプリケーション配信コントローラ120は、ルーティングテーブルから(例えば、ルーティングテーブル300aのPROTOCOL308フィールドから)プロトコルを決定してもよい。例えば、プロトコルはHTTP又はHTTPSを含んでもよい。いくつかの実現形態では、アプリケーション配信コントローラ120がプロトコルブリッジを提供するとき、アプリケーション配信コントローラ120は、クライアントデバイスに単一のHTTPSインタフェースを提供してもよい(例えば、これらはネットワーク102を介しウェブサービス130にアクセスする)。従って、ウェブサービス130(又は電子医療記録サーバ104など)は、HTTPSセキュリティを必ずしも充たす必要なく(例えば、ウェブサービス130のそれぞれにおいて証明書を有する)、HTTPSの証明書管理を簡単化することなく、HTTPインタフェースを維持してもよい。
プロトコルがリクエストされたサービスとのHTTPを呼び出す具体例では、アプリケーション配信コントローラ120は、HTTPS to HTTPブリッジを提供してもよい。アプリケーション配信コントローラ120は、クライアントデバイスとリクエストされたサービスとの間のセキュアなブリッジとして機能しうる。例えば、当該ブリッジは、クライアントデバイスとアプリケーション配信コントローラ120との間のHTTPS OpenSSL接続と、信頼されたネットワーク内のウェブサービス130とのHTTP接続(例えば、アプリケーション配信コントローラ120とウェブサービスサーバ128との間の接続)とをセットアップすることによって実現されてもよい。
プロトコルがリクエストされたサービスとのHTTPSを呼び出す具体例では、アプリケーション配信コントローラ120は、信頼されたネットワーク内のアプリケーション配信コントローラ120からのセキュア接続(例えば、ウェブサービスサーバ128b上の認証モジュール126との接続と同様に)とのインタフェースを提供しうる。従って、アプリケーション配信コントローラ120は、外部デバイスと内部デバイスとの双方とのHTTPS接続を提供するよう構成されてもよい。
506において、アプリケーション配信コントローラ120は、リクエストされたサービスのカテゴリに基づきソケットハンドリングを決定してもよい。いくつかの実現形態では、アプリケーション配信コントローラ120は、ルーティングテーブルから(例えば、ルーティングテーブル300aにおけるTYPE312フィールドから)カテゴリを決定してもよい。サービスは変動する可能性があり、各サービスには、ソケットハンドリングが現在のシステムよりも細かく当該サービスに調製されることを可能にするカテゴリが割り当てられてもよい。各カテゴリに関するソケットハンドリングは、アプリケーション配信コントローラ120が、ノーマルカテゴリに対応するものなど、単一タイプのソケットハンドリングのみに従って通信を処理する既存のシステムよりはるかに万能なものになることを可能にする。
一例となるカテゴリは、ノーマル、ストリーミング、イベント、セキュア、リセット及びトークンを含んでもよい。ノーマルカテゴリでは、出力される接続パスはコンスタントにライブ状態であるが、リターンパスは、リターンパス上のソケット通信のエンドがコンテンツの長さに依存するようコンテンツの長さに基づきライブ状態に維持される。ストリーミングカテゴリでは、ストリーミングデータがアプリケーション配信コントローラ120を到達し続ける限り、ソケット接続がライブ状態となる。イベントカテゴリでは、ソケット通信は、データのエンド(例えば、\r\nによってマーク付けされる)が受信されるまでオープン状態に維持される。セキュアカテゴリでは、信頼されるネットワーク内のアプリケーション配信コントローラ120からの接続はHTTPSであってもよい。セキュアカテゴリは、複数のアプリケーション配信コントローラが存在する(例えば、図6A及び6Bを参照して説明されるように)、内部通信(例えば、ウェブサービスサーバ128とアプリケーション配信コントローラ120との間などの信頼されるネットワーク内のもの)がセキュアである必要があるなどの実現形態において利用されてもよい。リセットカテゴリは、自らを動的に再構成するためにアプリケーション配信コントローラ120によってサポートされる内部カテゴリである。トークンカテゴリは、後述されるように、例えば、認証モジュール126から入力されたトークンを処理するためにアプリケーション配信コントローラ120によってサポートされる内部カテゴリである。
いくつかの実現形態では、アプリケーション配信コントローラ120は、それがサポートするサービスの範囲のため、これらのカテゴリのそれぞれを処理するよう構成されてもよい。例えば、ストリーミングカテゴリにおけるサービスについて、ストリーミングオーディオ又はビデオは、ロードバランシングのため異なって処理されてもよく、アプリケーション配信コントローラ120は、データが送信に利用可能である限り、データを送信し続けてもよい。他の具体例では、イベントについて、ストリーミングソケットハンドラは、アプリケーション配信コントローラ120がエンドマーカ(例えば、\r\n)を検出するまで入力されたデータストリームを解析する必要があるため、不良な適合となる。従って、アプリケーション配信コントローラ120によって処理される各種サービスのため、カテゴリは各タイプのサービスを処理するソケットを示すため、ルーティング又はサービステーブルにおけるサービス属性であってもよい。
図5に戻って、508において、アプリケーション配信コントローラ120は、ストリップ通知(例えば、ルーティングテーブル300aにおけるSTRP310フィールドにおける)に基づきサービスリクエストのURLからサービス名を取り除く。ストリップ通知は、アプリケーション配信コントローラ120の内部の処理を表す。サービス名がコマンドの一部であって、下位レイヤサービスにわたされる特定のコマンド(例えば、サービスリクエスト)であって、サービス名が下位レイヤサービスにわたされる必要がない他のコマンドがある。例えば、ストリップ通知は、コマンドパケットにおけるサービス名を保持するか(例えば、STRP310における値が0である場合)、あるいは、コマンドパケットからサービス名を取り除く(例えば、STRP310における値が0である場合)。
いくつかの実現形態では、コマンドパケットのデスティネーションサービスがサービス名を用いて決定され、コマンドパケットが当該特定のサービスにルーティングされると、サービス名を再び利用する必要がないため、ストリップ処理が可能とされる(例えば、サービスの名前がコマンド/リクエストパケット/URLから取り除かれる)。しかしながら、いくつかの具体例では、ストリップ処理は不可とされ(例えば、サービスの名前がコマンドパケットから取り除かれない)、この結果、サービス名が再利用可能である。ストリップ処理が不可とされるこのような一例は、図6A及び6Bを参照して説明されるなど、複数のアプリケーション配信コントローラ120があるときであり(例えば、特に同じレベルの階層において)、この結果、適切なアプリケーション配信コントローラがコマンドパケットからサービス名を決定できる。
1つ以上のアプリケーション配信コントローラ120を介したサービスのルーティングは、複数の方法で実現されうる。図6Aにおいて、ブロック図600aは、ここに説明される技術のいくつかの実現形態による階層的又はカスケード化された構成における複数のアプリケーション配信コントローラ602,604,606の実現形態を示す。例えば、アプリケーション配信コントローラ602は612においてサービス1にルーティングし、アプリケーション配信コントローラ604は614においてサービス2及び616においてサービス3にルーティングし、アプリケーション配信コントローラ606は618においてサービス4にルーティングしてもよい。
いくつかの実現形態では、サービス名は階層として複数のサービスを含むことができる(例えば、コマンド又はURLは複数のサービス名を含む複合サービス名を含むことができる)。例えば、サービス名がADC1.ADC2.ADC3.service4である場合、コマンドパケットはアプリケーション配信コントローラの各レベル間で転送されてもよく、ストリップ処理が可能とされる場合、サービス名は各時点で取り除かれる。例えば、602におけるアプリケーション配信コントローラ1はサービス名からADC1を取り除き、604におけるアプリケーション配信コントローラ2はサービス名からADC2を取り除き、606におけるアプリケーション配信コントローラ3はADC3を取り除いてもよい。最終的に、コマンドパケットが606におけるアプリケーション配信コントローラ3に到達するためにカスケード化されたアプリケーション配信コントローラの各レベルを介し浸透する時点まで、サービス名は単にサービス4であってもよい。
図6Bにおいて、ブロック図600bは、ここに説明された技術のいくつかの実現形態によるパラレルな複数のアプリケーション配信コントローラの実現形態を示す。図600bの実現形態は、高い可用性、災害復元配置及びロードバランシングに特に有用である。例えば、パラレルな複数のアプリケーション配信コントローラは、故障又は高いシステム需要がある具体例に対してより良好な冗長性を提供する。ブロック図600bにおいて、アプリケーション配信コントローラ652及び654は同じレベルの階層にある。アプリケーション配信コントローラ652及び654は、2つのクライアントがロードバランシングを提供し、故障の場合には重複するパスを提供するため、同じ名前を有するが、異なるIPアドレスを有するアプリケーション配信コントローラに直面することを表しうる。IPアドレス1におけるアプリケーション配信コントローラ652は、662においてサービス1に、664においてサービス2に、及び/又は666においてサービス3にルーティングしてもよく、IPアドレス2におけるアプリケーション配信コントローラ654は、実現形態に依存して666においてサービス3又は他のサービスにルーティングしてもよい。図6Bの具体例では、サービスリクエストは、ADC1.service3のサービス名を有してもよい。“pass2”によって示されるように、コマンドパケットがアプリケーション配信コントローラ652から666におけるサービス3に直接わたされる場合、アプリケーション配信コントローラ652はストリップ処理を実行してもよい。例えば、“pass1”により示されるように、コマンドパケットがアプリケーション配信コントローラ652からアプリケーション配信コントローラ654及びその後に666におけるサービス3にわたされる場合、アプリケーション配信コントローラ652はストリップ処理を実行せず、アプリケーション配信コントローラ654がストリップ処理を実行する。アプリケーション配信コントローラ652が接続故障のために666におけるサービス3にアクセスできない具体例では、アプリケーション配信コントローラ652は、アプリケーション配信コントローラ654を介し666におけるサービス3と通信するか、あるいは、クライアントデバイスにアプリケーション配信コントローラ654にリダイレクトするよう依頼してもよい。
図7は、ここに説明される技術のいくつかの実現形態によるリクエストされたサービスのクライアントデバイスからのアクセスを認証する一例となる方法700のフローチャートを示す。702において、アプリケーション配信コントローラ120は、クライアントデバイスによるトークンを有効にするか、あるいは、トークンが必要とされるが(例えば、ルーティング又はサービステーブルに示されるように)、クライアントデバイス上に存在しない場合、トークンを割当て及び有効にしてもよい。いくつかのサービス(又はメソッド)はセキュリティ目的のためトークンを必要とするが、他のサービスは実行のためにトークンを必要としないかもしれない(例えば、セキュリティが重要でないサービス、エマージェンシサービスなど)。従って、アプリケーション配信コントローラ120は、トークンが必要とされるか、トークンがクライアントデバイス上に存在するか、及びトークンが有効であるか判断してもよい。クライアントデバイス上にトークンが存在しない場合、アプリケーション配信コントローラ120は、トークンをクライアントデバイスに割当て、当該トークンを有効にするよう認証モジュール126と連携してもよい。トークンの有効化又は割当て及び有効化は、特に図8A及び8Bを参照して、ここで何れかにおいて更に詳細に説明される。
704において、アプリケーション配信コントローラ120は、ユーザの役割に基づきクライアントデバイスによるユーザアクセスを提供してもよい。いくつかの実現形態では、ユーザの役割はホワイトリストを用いて規定されてもよい。ホワイトリストは、役割ベースのアクセスのためのAPIレベル及び各サービスにおいて定義されるコンマで分離された役割のリストであってもよい(例えば、これらリスとされた役割又はユーザにはこれらのサービス又はメソッドへのアクセスが提供される)。ホワイトリストは、特定のサービスがシステムのセキュリティを拡張するために特定の役割のセットにアクセス可能であることを保証する。誰もアクセスが許可されていないサービスがあってもよい。同様に、全てがアクセスすることが許可されているサービスがあってもよい(例えば、TOKENNEEDED316フィールドの値が0に設定されることにより示されるように)。
図3A及び3Bを参照して説明されるように、ホワイトリストはルーティングテーブル及びサービステーブルの双方のレベルにおいて存在してもよい。サービステーブルレベルにおけるホワイトリスト(例えば、API又はメソッドレベルのための)は、ルーティングテーブルレベルにおけるホワイトリストより詳細なユーザアクセスに対する制御を提供する。例えば、サービステーブルレベルのホワイトリストは、サービステーブルにおいて規定される特定のメソッド又はAPIへのユーザアクセスに対する詳細な制御を提供するため、ルーティングテーブルレベルのホワイトリストを無効にしてもよい。
706において、アプリケーション配信コントローラ120はリクエストされたサービスのセキュリティゾーンを決定してもよく、708において、アプリケーション配信コントローラ120はリクエストされたサービスのセキュリティゾーンに基づき1つ以上のシグネチャを解読及び有効にしてもよく、1つ以上のシグネチャはセキュリティゾーンに基づく順序により有効にされる。いくつかの実現形態では、アプリケーション配信コントローラ120は、各セキュリティゾーンがセキュリティが増加した階層を含む複数のセキュリティゾーンを提供する。例えば、いくつかのセキュリティレベルは極めて計算量が高いため、低いセキュリティアイテム又はサービスが、より高いセキュリティアイテム又はサービスと同程度に高い暗号化レベルを求めない。より高いセキュリティへのアクセス(例えば、役割に基づく)を有する人数が、より低いセキュリティへのアクセスを有する人数よりはるかに少ないため、最も高いレベルのセキュリティに対するアクセスリクエストの数は、より低いレベルのセキュリティに対するものよりはるかに少なくなる。例えば、より低い階層のセキュリティはSHA256(SHAは当該分野において知られるセキュアなハッシュアルゴリズムである)ベースのシグネチャを利用しうるが、より高いセキュリティ階層は、2042ビットRSA(RSAはメッセージを暗号化及び解読するため当該分野において知られるアルゴリズムである)に類似したセキュリティレベルであり得るシグネチャ方式に結合されるSHA512を利用してもよい。
いくつかの実現形態では、アプリケーション配信コントローラ120及び認証モジュール126のみに知られる乱数を利用してセキュリティが強化される。例えば、サービスリクエスト又はサービスルーティングとは別に、アプリケーション配信コントローラ120及び認証モジュール126は乱数をやりとりしてもよい。乱数があるため、より弱い暗号化が十分なデータセキュリティを維持しながら利用される計算リソースを減少させるのに利用されてもよい。乱数は図10を参照して更に詳細に説明される。
いくつかの実現形態では、各サービスはルーティング及び/又はサービステーブルにおけるセキュリティゾーンに基づき分類されてもよい。各セキュリティゾーンは、複雑さ及びセキュリティ強度の増加順にシグネチャのための異なる解読方式を有してもよい。例えば、セキュリティゾーン1は、アクセスが付与される前に、第1のシグネチャが解読及び検証される必要がありうる。セキュリティゾーン2は、アクセスが付与される前に、第1のシグネチャが解読及び検証され、その後に第2のより高いセキュリティレベルのシグネチャが解読及び検証される必要がありうる。セキュリティゾーン3は、アクセスが付与される前に、第1及び第2のシグネチャと共に、更により高いセキュリティレベルのシグネチャが解読及び検証される必要がありうる。例えば、各シグネチャは、第1のシグネチャについてSHA256、第2のシグネチャについてSHA512及び第3のシグネチャについてRSAなどの増加するセキュリティレベルを有してもよい。
セキュリティゾーンの解読が処理される方法は、より高いセキュリティゾーンにおいてより高いセキュリティのシグネチャを解読するのに利用される多くの計算リソースのため効率的である必要がある。いくつかの実現形態では、アプリケーション配信コントローラ120は、より高いレベルのより多くのリソースが必要なシグネチャに進む前に、より低いレベルのより少ないリソースで済むシグネチャを解読及び検証してもよい。パイプラインにおいて何れかのシグネチャが不調である場合、解読はより高いセキュリティのシグネチャが検証される前に中止され、このため、使用される計算リソースは攻撃について減少し、サービス及び/又はデータへのアクセスのため真正な認証について依然として利用可能である。
図8A及び8Bは、ここに説明される技術のいくつかの実現形態によるクライアントデバイスからのトークンを検証するか、あるいは、トークンが必要とされるが、クライアントデバイス上に存在しない場合にトークンを割当て及び検証するための一例となるワークフロー800a、800bのフローチャートを示す。802において、アプリケーション配信コントローラ120は、サービス1によるURLを受信する。例えば、アプリケーション配信コントローラ120は、リクエストされたサービス1を示すURLによる、又は形式によるサービスリクエストを受信してもよい。
804において、アプリケーション配信コントローラ120は、トークンが必要とされるか判断する(例えば、上述されたようにルーティング又はサービステーブルを利用して)。アプリケーション配信コントローラ120がトークンが必要ないと判断した場合、806において、サービスが実行及び/又はクライアントデバイスにルーティングされる。いくつかのサービスは秘匿性のある情報へのアクセスを有さず、従って、トークンは必要とされず、効率性の目的のため、トークンの割当て及び検証がバイパスされる。
いくつかの実現形態では、アプリケーション配信コントローラ120は、リクエストされたサービスがエマージェンシサービスであることに基づきトークンが不要である(あるいは、例えば、ここの何れかに説明されるトリアージと同様に、サービスがエマージェンシにおいてリクエストされている)と判断してもよい。例えば、アプリケーション配信コントローラ120は、認証のための処理用のノーマルパイプラインをバイパスすることによって危機におけるサービスを処理し、サービスのシームレスで瞬時なルーティングを提供するよう構成されてもよい。例えば、エマージェンシサービスは、トークンが必要とならないようにマーク付けされてもよい(例えば、エマージェンシサービスのためのルーティングテーブル300a又はサービステーブル300bにおけるTOKENNEEDEDフィールド316又は360が0に設定された値を有する)。
一例では、図9は、ここに説明された技術のいくつかの実現形態によるアプリケーション配信コントローラ120を介しエマージェンシサービスを提供するための値を示す一例となるルーティングテーブル900を示す。図9において、902におけるカラム8は、ロー904におけるサービス“eqs1”が、トークンがサービスにアクセスするのに必要とされることを示すTOKENNEEDEDフィールドにおける1の値を有することを示す。さらに、サービス“eqs1”は、デフォルトによって医師、看護師又は転記者の役割のユーザによってアクセスされうる。しかしながら、902におけるカラム8は、ロー906におけるサービス“emergencyeqs1”がTOKENNEEDEDフィールドにおいて0の値を有することを示し、このため、トークンは必要とされず、認証手順がバイパス可能である。従って、同じAPIが双方のサービスに利用されてもよいが、エマージェンシケースと非エマージェンシケースとの双方を提供するために異なるサービス名にマッピングされてもよい。
図8Aに戻って、808において、アプリケーション配信コントローラ120は接続をクローズしてもよい(例えば、上述されるようにソケットハンドリングに基づく)。
アプリケーション配信コントローラ120が、トークンが804において必要とされると判断した場合、810において、アプリケーション配信コントローラ120は、トークンがクライアントデバイス上のcookieに存在するか判断してもよい。例えば、アプリケーション配信コントローラ120は、認証サーバによってクライアントデバイス上に格納されるcookieにおけるサービスのためのトークンが存在するか判断するため、クライアントデバイスをクエリしてもよい。
アプリケーション配信コントローラ120が、810において、トークンがcookieに存在すると判断した場合、812において、アプリケーション配信コントローラ120は、トークン、役割及びセキュリティゾーンが有効であるか判断してもよい。アプリケーション配信コントローラ120は、ユーザの証明書(例えば、証明書はトークンの一部であってもよい)と共にcookieを検証し、トークンが有効であり、ユーザが自身が主張している人であると検証してもよい。
いくつかの実現形態では、アプリケーション配信コントローラ120がcookieにおいてトークンを受信すると、cookieはキーワード(例えば、“トークン”)の有無について解析される。キーワードは、証明書、シークレットインデックス及び/又はシグネチャの始めを示すものであってもよい。シークレットインデックス(例えば、それぞれが乱数を表す8つの8ビットのランダムインデックス)は、例えば、上述されたように、アプリケーション配信コントローラ120及び認証サーバ126に知られている乱数を表すものであってもよい。シークレットナンバーは、例えば、アプリケーション配信コントローラ120のスタートアップ中に別々の双方向のTLSセッションを用いて、アプリケーション配信コントローラ120と認証サーバ126との間でやりとりされてもよい。シグネチャは、例えば、SHA1など、上述されたような各種メソッドを用いて暗号化されてもよい。
図10は、cookieに存在するデータの具体例を示す。例えば、図10は、ここに説明される技術のいくつかの実現形態による一例となる符号化されたユーザ証明書1002及びシグネチャ1004によるテーブル1000を示す。図示されるように、証明書は、復号化されたとき、
のようになるベース64符号化を用いて符号化されてもよい。図示されるように、トークン内の各フィールドはフィールド名、“=”記号及びフィールドのエンドをマーク付けし、フィールドを区別するセミコロンからスタートしてもよい。例えば、トークンの構成は、フィールドのSHA1(又は他の形態の暗号化)であってもよいシグネチャによって付加されたユーザ名、ユーザの役割、cookieの期限及び8つの乱数のインデックスを含んでもよく、いくつかの具体例では、乱数はペイロードの一部としてインデックスを構成する。
いくつかの実現形態では、アプリケーション配信コントローラ120は、復号化された証明書が改ざんされていないことを証明する。アプリケーション配信コントローラ120は、cookieに存在するインデックスに対応するシークレットナンバーを取得し、実際のシークレット乱数と共にユーザ証明書全体に対してSHAを実行することによって、トークンの完全性を検証し、入力されたシグネチャを比較してもよい。
さらに、アプリケーション配信コントローラ120は、証明書に含まれる役割がルーティング及び/又はサービステーブルにリストされた役割と一致しているか検証してもよい。
図8Aに戻って、アプリケーション配信コントローラ120が、812において、トークン、役割及びゾーンが有効であると判断した場合、814において、サービスは、トークンがタイムアウトしたか判断するためチェックしてもよい。トークンがタイムアウトしていない場合、806において、サービスが実行及び/又はルーティングされてもよい。アプリケーション配信コントローラ120が、トークン、役割又はゾーンが無効であると判断した場合、808において、接続はクローズされるか、あるいは、クライアントデバイスは有効なcookie及びトークンを受信するため(図示せず)、認証サーバ126にリダイレクトされてもよい。
810において、アプリケーション配信コントローラ120が、cookieにトークンがないと判断した場合、アプリケーション配信コントローラ120は、816において、URLを用いて現在のドメイン及びURLによってcookieを設定してもよい。サービスリクエストが認証サーバ126からトークンを受信する処理を介して実行されるため、アプリケーション配信コントローラ120は、現在のドメイン及び現在のURL(例えば、サービス名、APIなどを含んでもよい)によりcookieを設定してもよい。現在のドメイン及びURLによるcookieは、アプリケーション配信コントローラ120が、トークンが有効にされると、何れかのサービス、API又はメソッドをクライアントが最初にリクエストしたか知ることを可能にする。いくつかの実現形態では、cookieは以下のように設定されてもよい。
例えば、トークンが期待されるが、欠落しているケースでは、アプリケーション配信コントローラ120は、URLcookieを設定し、クライアントデバイスがトークンを受信できるように、クライアントデバイスを認証サーバ126にリダイレクトしてもよい。いくつかの実現形態では、処理フロー全体がクライアントに不透明であることに留意すべきである。例えば、全てのリダイレクションはアプリケーション配信コントローラ120によって内部的に処理される。ユーザの体感は、トークンが取得及び有効にされると、リクエストされたサービスへのアクセスが、ユーザがサービスリクエストを再入力/再リクエストする必要なく可能とされるようになる。
818において、cookieが設定されると、アプリケーション配信コントローラ120は、トークンを取得するため、サービスのユーザのクライアントデバイスの認証モジュール126(例えば、アプリケーション配信コントローラ120から分離された又は統合された認証モジュール126)にクライアントをリダイレクトしてもよい。例えば、認証モジュール126は、トークンを生成し、URL及び/又はURL cookieの一部としてトークンを設定し、特定のサービスリクエストによってアプリケーション配信コントローラ120を呼び出してもよい(例えば、サービスリクエストのサービス名は、以下で更に詳細に説明されるように、トークンハンドラであってもよい)。
いくつかの実現形態では、アプリケーション配信コントローラ120は、特定のサービスリクエスト(例えば、サービス“トークンハンドラ”について)を受信してもよい。特定のサービスリクエストは、アプリケーション配信コントローラ120及び認証モジュール126に知られているサービスに対するものであってもよく、ルーティング又はサービステーブルにおいて規定されてもよい。
820において、アプリケーション配信コントローラ120は、ホストを決定してもよい。例えば、アプリケーション配信コントローラ120が特定のサービスリクエストを受信すると、アプリケーション配信コントローラ120は、呼び出しが認証モジュール126からであり、URLの一部としてアプリケーション配信コントローラ120にトークンが提示されていると判断する。
822において、アプリケーション配信コントローラ120は、設定されたURL cookieからサービス1によりURLを取得し、824において、アプリケーション配信コントローラ120は、設定されたURL cookieを削除してもよい。いくつかの実現形態では、初期的なURL(例えば、クライアントデバイスがサービスについて元々リクエストした)が抽出されると、アプリケーション配信コントローラ120は、URLを再解析し、URLからトークンを抽出し、URL cookieがもはや必要でないため、URL cookieを削除又はアンセットしてもよい。
826において、アプリケーション配信コントローラ120は、トークンの現在時間がトークン付与時間に基づき有効であるかチェックし、828において、アプリケーション配信コントローラ120は、トークンを有効にしてもよい(例えば、ここでの何れかに説明されるように)。例えば、トークンが抽出されると、アプリケーション配信コントローラ120は、トークンを有効にし、現在時間がトークン付与時間の許容リミットの範囲内であるかチェックする。タイムリミットが満了している場合、アプリケーション配信コントローラ120は、有効なトークンを受信するため、クライアントデバイスを認証モジュール126にリダイレクトしてもよい。
830において、アプリケーション配信コントローラ120は、URLを用いてトークンcookieを設定し、832において、アプリケーション配信コントローラ120は、トークンの検証のためアプリケーション配信コントローラ120にクライアントデバイスをリダイレクトしてもよい(例えば、ワークフロー800aにおける802へ)。例えば、826において、現在の時間がリミット内にある場合、アプリケーション配信コントローラ120は、トークンcookieを設定し、URL cookieからのパスを入力リクエストとして利用して、自ら(アプリケーション配信コントローラ120)への自己リダイレクトをポストしてもよい。例えば、自己リダイレクトは、基本的にはユーザのサービスリクエストをアプリケーション配信コントローラ120に再規定するが、ここで、トークンはトークンcookieに設定されており、アプリケーション配信コントローラ120は、リクエストされたサービスへのアクセスを許可する前に、トークン及びユーザ証明書を有効にするよう進捗することができる(例えば、802〜814を参照して説明されるように)。
上記の実現形態の説明は、図示及び説明の目的のために提示された。本実現形態を開示された正確な形態に限定し、あるいは、包括的であることは意図していない。多くの修正及び変形が上記教示に基づき可能である。本実現形態の範囲はこの詳細な説明でなく、本出願の請求項によって限定されることが意図される。当業者によって理解されるように、本実現形態はそれの精神又は必須の特性から逸脱することなく他の具体的な形態をとりうる。同様に、モジュール、ルーチン、特徴、属性、方法及び他の態様の特定の名称及び分割は必須又は重要でなく、一実現形態又はそれの特徴を実現する機構は異なる名前、分割及び/又はフォーマットを有してもよい。さらに、明らかであるように、実現形態のモジュール、ルーチン、特徴、属性、方法及び他の態様は、ソフトウェア、ハードウェア、ファームウェア又はこれら3つの何れかの組み合わせとして実現可能である。また、その具体例がモジュールであるコンポーネントがソフトウェアとして実現される場合、コンポーネントは、スタンドアローンプログラムとして、より大きなプログラムの一部として、複数の個別のプログラムとして、静的若しくは動的にリンクされたライブラリとして、カーネルがロード可能なモジュールとして、デバイスドライバとして、及び/又は現在若しくは将来に知られる全て及び他の何れかの方法において実現可能である。さらに、実現形態は、何れか特定のプログラミング言語による実現形態又は何れか特定のオペレーティングシステム若しくは環境に限定されない。従って、開示は限定的でなく例示的であると意図され、その範囲は以下の請求項において与えられる。