JP3853593B2 - ウェブアプリケーションサーバにおいて拡張可能な認証機構を実現するための方法および装置 - Google Patents

ウェブアプリケーションサーバにおいて拡張可能な認証機構を実現するための方法および装置 Download PDF

Info

Publication number
JP3853593B2
JP3853593B2 JP2000519525A JP2000519525A JP3853593B2 JP 3853593 B2 JP3853593 B2 JP 3853593B2 JP 2000519525 A JP2000519525 A JP 2000519525A JP 2000519525 A JP2000519525 A JP 2000519525A JP 3853593 B2 JP3853593 B2 JP 3853593B2
Authority
JP
Japan
Prior art keywords
authentication
cartridge
dispatcher
message
request
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
JP2000519525A
Other languages
English (en)
Other versions
JP2001522115A (ja
Inventor
パン,ロバート
ステイビル,ジム
Original Assignee
オラクル・インターナショナル・コーポレイション
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by オラクル・インターナショナル・コーポレイション filed Critical オラクル・インターナショナル・コーポレイション
Publication of JP2001522115A publication Critical patent/JP2001522115A/ja
Application granted granted Critical
Publication of JP3853593B2 publication Critical patent/JP3853593B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/08Network architectures or network communication protocols for network security for authentication of entities
    • H04L63/083Network architectures or network communication protocols for network security for authentication of entities using passwords
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/30Authentication, i.e. establishing the identity or authorisation of security principals
    • G06F21/31User authentication
    • G06F21/33User authentication using certificates
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L61/00Network arrangements, protocols or services for addressing or naming
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/10Network architectures or network communication protocols for network security for controlling access to devices or network resources
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/40Network security protocols
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/30Definitions, standards or architectural aspects of layered protocol stacks
    • H04L69/32Architecture of open systems interconnection [OSI] 7-layer type protocol stacks, e.g. the interfaces between the data link level and the physical level
    • H04L69/322Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions
    • H04L69/329Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions in the application layer [OSI layer 7]

Description

【0001】
【発明の分野】
本発明は、ネットワーク接続されたコンピュータシステムにおけるクライアントのオペレーションの認証に関し、より特定的には、ステートレスなウェブ環境におけるブラウザのリクエストの認証に関する。
【0002】
【発明の背景】
ワールド・ワイド・ウェブ(World Wide Web)はインターネット(Internet)上のサーバのネットワークを含み、その各々は1つ以上のHTML(Hypertext Markup Language:ハイパテキスト・マークアップ言語)ページに関連付けられている。サーバに関連付けられているHTMLページは、情報と、そのサーバおよび(通常は)他のサーバ上の他の文書へのハイパテキストリンクとを提供する。サーバはハイパテキスト・トランスファー・プロトコル(HTTP:Hypertext Transfer Protocol)を用いてクライアントと通信する。サーバはクライアントからのHTMLページに関するリクエストを聞くことから、多くの場合、「リスナ」と称される。
【0003】
ワールド・ワイド・ウェブのユーザはブラウザと呼ばれるクライアントプログラムを用いてリスナから情報をリクエストし、デコードし、表示する。ブラウザのユーザがあるHTMLページ上のリンクを選択すると、そのページを表示しているブラウザはそのリンク内で特定されるユニバーサル・リソース・ロケータ(URL:Universal Resource Locator)と関連付けられるリスナにインターネットを通じてリクエストを送る。そのリクエストに応答して、リスナはそのリクエストを発行したブラウザにリクエストされた情報を送信する。ブラウザは情報を受取り、受取った情報をユーザに示し、次のユーザリクエストを待つ。
【0004】
従来、リスナに蔵置される情報は静的HTMLページの形態である。静的HTMLページは、ウェブブラウザからのリクエストに先立ち作成されリスナに蔵置される。リクエストに応答して、静的HTMLページが単に記憶から読出され、リクエストを行なっているブラウザに送信される。現在、ブラウザリクエストに応答して動的オペレーションを行なうリスナを開発しようとする趨勢にある。たとえば、リスナはリクエストに応答する際にデータベースにクエリーを発行し、そのクエリーの結果を含むウェブページを動的に構成し、動的に構成されたHTMLページをリクエストを行なっているブラウザに送信してもよい。動的オペレーションを行なうために、リスナの機能性を向上または増強させなければならない。動的オペレーションをサポートするようリスナを拡張するためにさまざまなアプローチが開発されてきた。
【0005】
インターネット上のサーバには複数のクライアントがアクセスすることができるので、ある情報に対する無許可のアクセスに対して保護がなされるように、いくつかの保護方式が開発されてきている。ある情報に対する無許可のアクセスを阻止するのに使用される方法の1つは、クライアントが特定のサーバ上の情報に対してアクセスしようとする場合、アクセスを許可する前に、そのクライアントに対して何らかの許可情報を提供するように求める方法である。この許可情報は典型的に、ユーザ名およびパスワード、特定のIPアドレス、特定のドメイン名または、情報にアクセスを試みている特定のユーザおよび/またはマシンを識別することのできる他の情報、等の項目を含む。
【0006】
許可機構を実現するための1つの方法として、認証プロセスを各サーバに関連付ける方法がある。許可のプロセスが、クライアントのリクエストを代行受信して、そのクライアントがそのサーバに関連付けられた情報に対してアクセスできるかどうかを判定する。したがって、クライアントが特定のサーバ上の情報に対してアクセスを試みるたびに、そのサーバに関連付けられた認証のプロセスがまず、そのクライアントがその情報へのアクセスを許可されていることを検証する。
【0007】
このサーバ単位で認証プロセスを行なう方法は、サーバに関連付けられたHTMLページが保護されるべき項目である場合にはうまく機能する。しかし、サーバを使用して、そのサーバ以外のマシン上で実行されている可能性のあるコンピュータプログラムにアクセスしてそのプログラムを実行するようなシステムにおいては、この方法では必要とされる柔軟性を提供することができない場合がある。たとえば、バンキングアプリケーションとデータベースアプリケーションとの両方が特定のサーバを介してブラウザによってアクセス可能であるものとする。この場合、バンキングアプリケーションには、データベースアプリケーションとは全く異なる認証機構が必要であるかもしれないし、他のサーバの使用に対してはどのような認証も全く必要でないかもしれない。
【0008】
以上のことから、HTTPサーバを介して利用可能なリソースに対するアクセスを限定する、認証機構を提供することが明らかに望ましい。また、同じHTTPサーバを介してアクセスすることのできる複数のアプリケーションに対して、異なる認証プロトコルをサポートすることができるほど十分に柔軟性のある、認証機構を提供することが望ましい。
本発明の背景および本発明の実施例によって解決される問題のさらなる詳細は、 Nigel Edwards および Owen Rees による文献、「セキュリティに優れたウェブサーバおよびゲートウェイ( "High security Web servers and gateways") 」、 COMPUTER NETWORKS AND ISDN SYSTEMS, 29, (1997) 927-938 、に記載されている。
【0009】
【発明の概要】
本発明は、クライアントからのリクエストを認証するための、スケーラブルな、柔軟性のある、拡張可能な機構を提供する。好ましい実施例においては、本発明は、認証エンジン、認証ホスト、およびホストに連結された複数のプロバイダを含み、各プロバイダは選択された認証方式を実現する。好ましい実施例においては、プロバイダの各々は、ダイナミックリンクライブラリ(DLL)等のような、ランタイムに動的にリンク・インすることのできる、モジュールの形をとる。
【0010】
本発明は、好ましくは、種々の構成要素がマシンの境界を超えて互いに通信することができるようにする、マシンとは独立した通信機構をさらに含む。この通信機構によって、本発明の種々の構成要素は、各構成要素がどのマシン上に備えられているかにかかわらず、互いに通信することができる。好ましい実施例においては、通信機構はオブジェクトリクエストブローカの形をとる。種々の構成要素を異なるマシン上に設けることができるので、本発明は分散型であると言える。この分散型の性質により、本発明は非常にスケーラブルなものとなっている。
【0011】
オブジェクトリクエストブローカは、通信機構として機能するのに加えて、好ましくは、負荷の最適配分機能もまた行なう。より特定的には、このブローカは、認証エンジンおよび認証ホストへのリクエストの送信を、ボトルネックの可能性を最小限にし、かつ利用可能なリソースの使用を最大限にするよう、調整する。この機能を行なうのに、ブローカは、各プロバイダがシステム内に導入されるときにそのプロバイダに対して登録される、メタデータを利用する。
【0012】
動作中、認証エンジンは、プロテクトストリングと関連付けられているリクエストを受取る。プロテクトストリングは、とりわけ、そのリクエストに対して実現されるべき1以上の認証方式、および、その方式の結果に適用されるべき1以上の論理演算子(たとえばAND、OR)を特定する。リクエストを受取ると、認証エンジンは、プロテクトストリングを解析して1または複数のプロバイダのリクエストとし、それらのリクエストをオブジェクトリクエストブローカを介して認証ホストに送信する。これに応じて、ホストは、それらのリクエストを適切なプロバイダへと送り、そこでリクエストの処理が行なわれる。プロバイダは処理を完了すると、その結果を認証ホストおよびオブジェクトリクエストブローカを介して認証エンジンへと戻す。その後、認証エンジンが、プロテクトストリングにおいて特定された論理演算子に従って結果を処理して、そのリクエストが認証されたかどうかを判定する。
【0013】
本発明によれば、システムの実装を配置時に変更することができる。前述のように、各プロバイダは好ましくは、ランタイムにシステムにリンク・インすることのできるDLLの形をとる。プロバイダがランタイムにリンク・インされるので、配置時に(1)あるプロバイダを別のプロバイダと置換したり(2)別のプロバイダをシステムに付加したりすることができる。本発明のアーキテクチャは、これらすべてを、他のどのモジュール(たとえば認証エンジンおよび認証ホスト)も変更したり再コンパイルしたりすることなく、行なうことができるようにしている。プロバイダの置換/付加に必要なのは、プロバイダのその置換/付加を反映するようメタデータを更新することのみである。さらに、特定のクエリーに関連付けられた認証方式を変更することも可能である。これは単に、そのクエリーに関連付けられたプロテクトストリングを変更することによって行なうことができる。やはり再コンパイルは不要である。これらの局面のおかげで、本発明においては、コンパイル時ではなく配置時に実装を変更することができる。これにより、本発明は非常に柔軟かつ拡張可能となっている。
【0014】
これらおよび他の利点は、本発明がさらに詳細に説明されるにつれて明らかとなるであろう。
【0015】
本発明は、限定のためではなく例示する目的で、添付の図面に示される。添付の図面において類似の参照番号は類似の要素を指す。
【0016】
【好ましい実施例の詳細な説明】
ステートレスなウェブ環境においてブラウザのリクエストを認証するための方法および装置を説明する。以下において説明のため、この発明の完全な理解をもたらすように数多くの特定の詳細事項を挙げている。しかしながら、当業者にはこの発明がこれらの特定の詳細事項がなくても実施できることが明らかになるであろう。場合によっては不必要にこの発明を曖昧にすることを避けるため周知の構造および装置をブロック図の形態で示している。
【0017】
ハードウェアの概観
図1は、この発明の実施例が実装され得るコンピュータシステム100を示すブロック図である。コンピュータシステム100は、バス102または情報を通信するための他の通信機構と、バス102に結合され情報を処理するためのプロセッサ104とを含む。コンピュータシステム100はまた、バス102に結合され情報およびプロセッサ104が実行すべき命令を蔵置するための、ランダムアクセスメモリ(RAM)または他の動的記憶装置などのメインメモリ106を含む。メインメモリ106はまた、プロセッサ104が実行すべき命令の実行の間に一時変数または他の中間情報を蔵置するのに用いられてもよい。コンピュータシステム100はさらに、バス102に結合され静的情報およびプロセッサ104に対する命令を蔵置するための読取専用メモリ(ROM)108または他の静的記憶装置を含む。磁気ディスクまたは光ディスクなどの記憶装置110が設けられ、バス102に結合されて情報および命令を蔵置する。
【0018】
コンピュータシステム100はバス102を介して、陰極線管(CRT)などの表示装置112に結合されコンピュータユーザに対して情報を表示してもよい。英数字および他のキーを含む入力装置114がバス102に結合され、情報およびコマンド選択をプロセッサ104に伝える。別のタイプのユーザ入力装置は、プロセッサ104に方向情報およびコマンド選択を伝え、かつ表示装置112上のカーソル移動を制御するためのマウス、トラックボールまたはカーソル方向キーなどのカーソル制御装置116である。この入力装置は典型的に2つの軸、すなわち第1の軸(たとえばx)および第2の軸(たとえばy)において2つの自由度を有し、これは装置が平面上の位置を特定できるようにする。
【0019】
この発明は、コンピュータシステム100を用いて、ステートレスなウェブ環境においてブラウザの要求を認証することに関する。この発明の一実施例によれば、ブラウザの要求の認証は、プロセッサ104がメインメモリ106に含まれる1つ以上の命令の1つ以上のシーケンスを実行することに応答して、コンピュータシステム100によって行なわれる。このような命令は、記憶装置110などの別のコンピュータ可読媒体からメインメモリ106に読込んでもよい。メインメモリ106に含まれる命令のシーケンスを実行することにより、プロセッサ104がここに説明するプロセスステップを実行することとなる。代替の実施例では、ソフトウェア命令の代わりに、またはソフトウェア命令と併せて結線回路を用いてこの発明を実現してもよい。すなわち、この発明の実施例はハードウェア回路およびソフトウェアの如何なる特定の組合せにも限定されない。
【0020】
「コンピュータ可読媒体」という用語はここでは、実行のためにプロセッサ104に命令を提供するのにかかわるすべての媒体を指して用いる。このような媒体は、不揮発性媒体、揮発性媒体および伝送媒体を含むが、これらに限定されない数多くの形態を取り得る。不揮発性媒体には、たとえば、記憶装置110などの光ディスクまたは磁気ディスクが含まれる。揮発性媒体には、メインメモリ106などのダイナミックメモリが含まれる。伝送媒体には、バス102を構成するワイヤを含む、同軸ケーブル、導線および光ファイバが含まれる。伝送媒体はまた、電波および赤外線データ通信において生成されるもののような音波または光波の形態を取ることもある。
【0021】
コンピュータ可読媒体の一般的な形態にはたとえば、フロッピーディスク、フレキシブルディスク、ハードディスク、磁気テープまたは何らかの他の磁気媒体、CD−ROMおよび何らかの他の光媒体、パンチカード、せん孔テープおよび孔のパターンを有する何らかの他の物理的媒体、RAM、PROM、EPROM、FLASH−EPROMおよび何らかの他のメモリチップまたはカートリッジ、以下に説明するような搬送波、またはコンピュータが読むことのできるものであればどのような他の媒体でも含まれる。
【0022】
実行のために1つ以上の命令の1つ以上のシーケンスをプロセッサ104に与える上でさまざまな形態のコンピュータ可読媒体がかかわり得る。たとえば、命令は初めに遠隔コンピュータの磁気ディスク上に担持されてもよい。遠隔コンピュータは命令をそのダイナミックメモリにロードし、その命令をモデムを用いて電話回線を介して送ることができる。コンピュータシステム100がローカルに有するモデムが電話回線上でデータを受取り、赤外線送信機を用いてそのデータを赤外線信号に変換できる。バス102に結合される赤外線検出器は赤外線信号で運ばれるデータを受取り、そのデータをバス102上に出力することができる。バス102はそのデータをメインメモリ106へ運び、そこからプロセッサ104は命令を取出して実行する。メインメモリ106が受取った命令は場合により、プロセッサ104による実行の前または後に記憶装置110に蔵置されてもよい。
【0023】
コンピュータシステム100はまた、バス102に結合される通信インターフェイス118を含む。通信インターフェイス118はローカルネットワーク122に接続されるネットワークリンク120への両方向データ通信結合を提供する。たとえば、通信インターフェイス118は、対応するタイプの電話回線に対してデータ通信接続を提供するサービス統合デジタル網(ISDN)カードまたはモデムであってもよい。別の例としては、通信インターフェイス118は、互換性のあるローカル・エリア・ネットワーク(LAN)に対するデータ通信接続を提供するローカル・エリア・ネットワーク(LAN)カードであってもよい。また、無線リンクを実現してもよい。このような実現例のいずれにおいても、通信インターフェイス118はさまざまなタイプの情報を表わすデジタルデータストリームを運ぶ電気信号、電磁気信号または光信号を送受信する。
【0024】
ネットワークリンク120は典型的に1つ以上のネットワークを介して他のデータ装置へのデータ通信を提供する。たとえば、ネットワークリンク120はローカルネットワーク122を介してホストコンピュータ124または、インターネットサービスプロバイダ(ISP:Internet Service Provider)126により運用されるデータ装置に対する接続を提供してもよい。ISP126はこれを受けて、現在一般的に「インターネット」128と称される世界規模のパケットデータ通信網を介するデータ通信サービスを提供する。ローカルネットワーク122およびインターネット128はともに、デジタルデータストリームを運ぶ電気信号、電磁気信号または光信号を用いる。コンピュータシステム100へまたはコンピュータシステム100からデジタルデータを運ぶ、さまざまなネットワークを介する信号およびネットワークリンク120上の、通信インターネット118を介する信号は情報を運ぶ搬送波の典型的な形態である。
【0025】
コンピュータシステム100はネットワーク、ネットワークリンク120および通信インターネット118を介して、メッセージを送り、プログラムコードを含むデータを受取ることができる。インターネットの例では、サーバ130はインターネット128、ISP126、ローカルネットワーク122および通信インターネット118を介してアプリケーションプログラムに対するリクエストされたコードを送信するかもしれない。
【0026】
受取られたコードはそれが受取られると同時にプロセッサ104によって実行され、および/または後に実行するために記憶装置110または他の不揮発性記憶に蔵置されてもよい。このように、コンピュータシステム100は搬送波の形態でアプリケーションコードを得ることもある。
【0027】
アプリケーションサーバ機能の概要
図2は、この発明の一実施例に従って設計されたシステム200のブロック図である。システム200は、HTTPプロトコルに従ってインターネット208にわたって複数のリスナ210、216および222と通信する複数のブラウザ202、204および206を含む。ブラウザからのリクエストに応答して、リスナはウェブアプリケーションサーバ280にここでカートリッジと称するソフトウェアモジュールを呼出させる。例示の実施例では、ウェブアプリケーションサーバ280は3つのカートリッジ230、234および238の実行を開始している。
【0028】
ウェブアプリケーションサーバ280は、トランスポート・アダプタ212、218および224、ディスパッチャ214、220および226、認証サーバ252、仮想パスマネージャ250、リソースマネージャ254、コンフィギュレーションプロバイダ256および複数のカートリッジ実行エンジン228、232および236を含む、数多くの構成要素からなる。ウェブアプリケーションサーバ280のさまざまな構成要素について以下により詳しく説明する。
【0029】
重要なことであるが、ウェブアプリケーションサーバ280の数多くの構成要素はオブジェクトリクエストブローカ(Object Request Broker)282などのマシン間通信機構を介して通信する。マシン間通信機構を用いることにより、ブラウザリクエストにおいて特定されるオペレーションを実行するカートリッジインスタンスは、リクエストを受取るリスナおよびリクエストを発行するブラウザとは異なるマシン上で実行することができる。カートリッジ・インスタンスがリスナとは異なるマシン上にあるため、リスナは障害のあるカートリッジ・インスタンスからよりよく隔離されることとなり、システムの信頼性および安全性が向上する。さらに、リスナが実行されるマシンと同じマシンでなく、数多くのマシン間でカートリッジインスタンスを実行する処理の負担を分散することによってシステムのスケーラビリティが大幅に増加する。複数のマシンにわたってカートリッジ・インスタンスの実行を分散できることから、いつどこで新しいカートリッジ・インスタンスを生じさせるかを決定するのに数多くのタイプの負荷の最適配分の技法を用いることができる。
【0030】
システム200内の典型的なオペレーションには一般的に以下の段階が含まれる。
ブラウザがインターネット208にわたってリクエストを送信する。
【0031】
リスナがそのリクエストを受取ってトランスポートアダプタを介してディスパッチャに渡す。
【0032】
ディスパッチャは、仮想パスマネージャ250と通信して、ブラウザのリクエストによって選択されたカートリッジを識別し、かつ、そのカートリッジが認証を必要としているかどうかを判定する。
【0033】
カートリッジが認証を必要としていれば、ディスパッチャは認証サーバ252と通信して、そのブラウザがその選択されたカートリッジにアクセスすることを許可されているかどうかを判定する。
【0034】
認証サーバ252が、そのブラウザがその選択されたカートリッジに対してアクセスすることを許可されていないと判定した場合には、そのブラウザにはアクセスが拒絶されたことが通知される。
【0035】
しかし、アクセスが許可されているか、または、仮想パスマネージャ250が認証が不要であると判定した場合には、ディスパッチャは2つのうち一つを行なう。ディスパッチャがそのカートリッジに関する使用されていないインスタンスのことを知っている場合、ディスパッチャはそのインスタンスにリクエストを送る。そのカートリッジに関して使用されていないカートリッジインスタンスがない場合、ディスパッチャはリソースマネージャ254に新しいカートリッジインスタンスを作るよう依頼する。そのインスタンスがうまく起動した後に、カートリッジはその存在をリソースマネージャに知らせる。リソースマネージャ254はそこで、ディスパッチャに新しいインスタンスのことを知らせる。ディスパッチャはブラウザリクエストに基づいて変更されたリクエストを作り、その変更されたリクエストを新しいインスタンスに送る。
【0036】
カートリッジインスタンスはその変更されたリクエストを処理して、ディスパッチャに応答を送る。
【0037】
ディスパッチャはその応答をリスナを介してクライアントに戻す。
これらの段階について以下により詳しく説明する。
【0038】
カートリッジ
カートリッジは特定のアプリケーションまたはシステム機能を行なうためのコードのモジュールである。カートリッジはシステム200における分散の基本単位を形成する。この発明の一実施例によれば、カートリッジはユニバーサル・リソース・ロケータ(URL)を用いて名付けられる。すなわち、カートリッジ名(すなわちURL)には2つの部分、すなわちカートリッジが存在するサーバのIPアドレスと、コンパイルされたカートリッジコードのサーバディレクトリ構造における仮想パスとがある。カートリッジはURLを用いて名付けられるため、カートリッジ名空間はグローバルであり、文書などの他のウェブリソースにアクセスするのに用いられるのと同じメッセージ通信技術を用いてカートリッジにアクセスすることができる。
【0039】
この発明の一実施例によれば、各カートリッジはすべてのカートリッジに対して共通の全体構造をもたらす標準インターフェイスを有する。この標準インターフェイスは、特定の条件の下でウェブアプリケーションサーバ280により呼出されるルーチンのインターフェイスを規定する。この発明の一実施例によれば、抽象カートリッジインターフェイスは以下のとおりである。
【0040】
【表1】
Figure 0003853593
【0041】
init()ルーチンはカートリッジインスタンスを初期化する役割を果たす。このことには、いくつかのサブオブジェクトのコンストラクタを呼出すことと、スレッドを予め分岐させることと、他のすべての必要となる共用リソースを獲得することとが含まれ得る。
【0042】
shutdown()ルーチンはすべてのリソースを片付けカートリッジインスタンスをシャットダウンする役割を果たす。カートリッジインスタンスに対して一度shutdown()ルーチンが呼出されると、直ちにカートリッジインスタンスは後続のリクエストを処理するのに利用不可能となる。
【0043】
authenticate()ルーチンではカートリッジのサービスをリクエストしているクライアントがそのサービスを用いることを許可されているかどうかを検証する。
【0044】
exec()ルーチンはカートリッジに対してすべてのサービスリクエストをディスパッチする包括的なやり方である。
【0045】
例示的カートリッジ
各カートリッジは、明確に定義された機能を行なうカートリッジとして構成されるか、またはあるアプリケーションのためのインタプリタまたはルーチン環境として作用するプログラム可能なカートリッジとして構成される。プログラム可能なカートリッジの一例はPL/SQLランタイムであり、これは構造的問合せ言語(Structured Query Language)を用いるオラクルベースのプログラム言語(Oracle-based Programming Language)(PL/SQL)に従ってデータベースクエリーを処理するよう構成される。PL/SQLランタイムはデータベースクエリーを有するブラウザリクエストを実行する。PL/SQLランタイムは、たとえば、データリンクを介してカートリッジインスタンスと通信しているデータベースサーバにアクセスすることによってリクエストを処理する。
【0046】
プログラム可能なカートリッジの別の例はJAVAランタイムインタプリタである。JAVAランタイムインタプリタカートリッジのおかげで、ウェブアプリケーション開発者らはブラウザリクエストを処理するためのサーバ側のJAVAアプリケーションを書くことができる。同様に、たとえば第三者のサーバによって実行されるプロセスにアクセスするなどの動的オペレーションをもたらすために、カスタムサーバをカートリッジとして構成してもよい。
【0047】
ディスパッチャ
ディスパッチャは、リスナが受取ったリクエストを適当なカートリッジへ経路選択するよう構成されるソフトウェアモジュールである。この発明の一実施例によれば、ディスパッチャはサーバ側のプログラム拡張(すなわち、「プラグイン」)として実現される。そのため、ディスパッチャはそれらが属するリスナと同じアドレス空間にロードされそこで実行される。ディスパッチャはコンパイル時にリスナコードとリンクされてもよいし、実行時に動的にロードされてもよい。
【0048】
例示される実施例では、ディスパッチャ214、220および226はそれぞれ、リスナ210、216および222に関連付けられる。ディスパッチャ214、220および226は、リスナ210、216および222が受取ったブラウザリクエストをカートリッジへ選択的に経路制御する。
【0049】
たとえば、リスナ210がユニフォーム・リソース・ロケータ(URL:Uniform Resource Locator)の形態で運ばれるブラウザリクエストをインターネット208から受取ると仮定する。このブラウザリクエストは、たとえばHTMLページまたは実行すべきオペレーションであるウェブオブジェクトに対する識別子の役割を果たす。リスナ210はそのブラウザリクエストの解釈を全く試みることなくディスパッチャ214に受渡す。ブラウザリクエストを受取ると、ディスパッチャ214は、
(1) 仮想パスマネージャ250と通信してブラウザリクエストによって選択されるカートリッジを識別し、かつそのカートリッジが認証を要するかどうかを判定し、
(2) そのカートリッジが認証を必要とする場合、認証サーバ252と通信してブラウザがその選択されたカートリッジにアクセスすることが許されるかどうかを判定し、
(3) アクセスが許可された場合に、リソースマネージャと通信してブラウザリクエストを送るべき選択されたカートリッジの特定のインスタンスを定め、
(4) カートリッジの特定されたインスタンスによる実行のため、変更されたブラウザリクエストを作りかつディスパッチする。
【0050】
変更されたブラウザリクエストは元のブラウザリクエストで受取った情報を再パッケージする。変更されたブラウザリクエストはたとえば、カートリッジの正しいオペレーションに必要なデータを含むコンテキストオブジェクトを含んでいてもよい。カートリッジの正しいオペレーションに必要なデータには、たとえば、そのブラウザリクエストが関連付けられるトランザクションを識別するトランザクションIDが含まれる。
【0051】
カートリッジがリクエストに返答すると、そのカートリッジはディスパッチャにその返答を送り、ディスパッチャはこの返答をリスナに渡してそのリクエストを開始したブラウザへ送信されるようにする。
【0052】
コンフィギュレーションプロバイダ
この発明の一実施例によれば、ウェブアプリケーションサーバ280とともに用いるべきカートリッジはまずウェブアプリケーションサーバ280に登録される。登録プロセスの間、そのカートリッジに関する情報がコンフィギュレーションプロバイダ256に供給される。コンフィギュレーションプロバイダ256はその情報をメタデータ258として蔵置してウェブアプリケーションサーバ280の構成要素が後からアクセスできるようにする。
【0053】
メタデータ258はたとえば、
(1) カートリッジ名、
(2) 必要となるインスタンスの最小数、
(3) インスタンスの最大数、
(4) カートリッジを実装するコードの場所、
(5) コールバック機能(初期化、リクエストハンドラ、シャットダウン)を実行するためカートリッジ実行エンジンが用いるプログラムに依存した関数名、
(6) カートリッジを実行するためのマシンのリスト、
(7) カートリッジのためのアイドルタイム(カートリッジのインスタンスがシャットダウンされる前にアイドル状態でいることができる時間量)、
(8) オブジェクト識別子および
(9) もしあれば、カートリッジとともに用いるべき、認証サービスのタイプを示すデータ
を含んでいてもよい。
【0054】
オブジェクト識別子は、対応するカートリッジによるオペレーションの実行をリクエストするためにブラウザリクエストが供給しなければならないデータを特定する。オブジェクトタイプは特定のワードまたはURLであってもよく、または「/java」などの仮想パスを含んでいてもよい。
【0055】
一度コンフィギュレーションプロバイダ256が特定のカートリッジに対するコンフィギュレーション情報をメタデータ258内に蔵置すると、そのカートリッジはウェブアプリケーションサーバ280が起動される際に自動的に登録される。
【0056】
カートリッジがウェブアプリケーションサーバ280に登録された後、リソースマネージャ254はカートリッジに対する最小インスタンスをイニシエートする。一度最小数のインスタンスがイニシエートされると、ウェブアプリケーションサーバ280はブラウザリクエストを処理する準備が整う。
【0057】
仮想パスマネージャ
上に述べたように、ディスパッチャは仮想パスマネージャ250と通信して各々の変更されたブラウザリクエストをどこに経路選択するかを定める。特定的には、各ブラウザリクエストは典型的にURLを含む。ブラウザリクエストを受取ると、ディスパッチャはそのリクエスト内のURLを仮想パスマネージャ250に送る。仮想パスマネージャ250はこれに応答して、もしあれば、URLに関連付けられるカートリッジを識別するデータをディスパッチャに送る。
【0058】
必要とされる情報をディスパッチャに供給するため、仮想パスマネージャ250はURLをカートリッジにマッピングするメタデータ258を調べる。ブラウザリクエストを受取ったことに応答して、仮想パスマネージャ250はマッピングデータを用いて、もしあれば、ブラウザリクエストに含まれるURLに対応するカートリッジを判定する。
【0059】
たとえば、ブラウザリクエストが仮想パス「/java」で始まるURLリクエストである場合、マッピングにより、JAVAインタプリタカートリッジが仮想パス「/java」を有するリクエストを取扱うよう構成されていることが示されるかもしれない。
【0060】
この発明の一実施例によれば、仮想パスマネージャ250はまた、URLに関連付けられたカートリッジが認証を必要とするかどうかを判定する。カートリッジが認証を要する場合、仮想パスマネージャ250はディスパッチャに送る応答において、認証が必要であることを示す。認証が必要でない場合、ディスパッチャは認証サーバ252を呼出すことなく、カートリッジのインスタンスに対する変更されたブラウザリクエストを作って送る。認証が必要である場合、変更されたリクエストをカートリッジのインスタンスに送出してもよいことを認証サーバが示した後に初めてディスパッチャはそのカートリッジのインスタンスに変更されたリクエストを送る。
【0061】
リソースマネージャ
ウェブアプリケーションサーバ280のリソースマネージャ254は、カートリッジに対して予め定められた最小数のインスタンスをイニシエートし、各カートリッジのインスタンスの間で負荷の最適配分を行ない、所与のカートリッジの予め定められた最大数のインスタンスまで必要に応じてカートリッジの新しいインスタンスをイニシエートすることによってカートリッジの各々の実行を管理する。
【0062】
たとえば、ある特定のカートリッジ(C1)のためのメタデータが以下の情報を含んでいると仮定する:
名称=C1
最小インスタンス=10
最大インスタンス=50
ホストマシン=M1、M2M3
アイドルタイム=30秒
このメタデータに基づいて、カートリッジC1が初めに登録される際に、リソースマネージャ254はC1の10のインスタンスをイニシエートさせる。リソースマネージャ254はラベルM1、M2およびM3に関連付けられるマシン上の10のインスタンスをイニシエートすることになる。
【0063】
C1をアクセスするリクエストをディスパッチャから受取った際、リソースマネージャ254はC1のいずれかの既存のインスタンスが利用可能であるかどうかを判定する。リクエストを受取った際にC1のどのインスタンスも利用可能でない場合、リソースマネージャ254はC1の最大数のインスタンスが既に実行されているかどうかを判定する。C1の最大数のインスタンスが既に実行されていない場合、リソースマネージャ254は可能なホストマシンの1つの上でC1の新しいインスタンスをイニシエートし、リクエストを発行したディスパッチャにこの新しいインスタンスを識別するメッセージを送信する。C1の最大数のインスタンスが既に実行されている場合、リソースマネージャ254はリクエストを発行したディスパッチャに対し、その時点でそのリクエストを取扱うことができないことを示すメッセージを送る。
【0064】
負荷の最適配分
この発明の一実施例によれば、リソースマネージャ254は1組の負荷の最適配分の規則を適用して、2つ以上の可能なホストマシンがある中、カートリッジのインスタンスをどこでイニシエートするかを定める。すなわち、上の例では、M1、M2およびM3はすべてカートリッジC1のインスタンスを実行することが可能である。M1、M2およびM3が同じ処理能力を有する場合、インスタンスを3つのマシンにわたって均等に分散するのが望ましいであろう。しかしながら、M1がM2およびM3の10倍の処理力を有するなら、C1のインスタンスのすべてをある時点まではM1でイニシエートし、それからさらなるインスタンスをM1、M2およびM3の間で均等に分散させるのが望ましいであろう。
【0065】
可能なマシンの間で負荷の最適配分を如何に行なうかを定める上でリソースマネージャ254を助けるため、各カートリッジに対して蔵置されるメタデータはさらなる詳細を含んでいてもよい。たとえば、メタデータは各マシンに対してインスタンスの別個の最小および最大数を特定してもよい。その場合リソースマネージャ254は、最大のインスタンスに対する現在実行されているインスタンスの比が最も低いマシンはどれかに基づいて、マシン間で新しいインスタンスを分散させることができる。
【0066】
メタデータはまた、あるカートリッジを実行できるマシンのための順序を特定してもよい。その順序においてN+1の位置にあるマシンは、その順序においてN番目の位置にあるマシンが既にその最大数のインスタンスを実行している場合にだけカートリッジのインスタンスを実行するのに用いられる。
【0067】
カートリッジインスタンスステータスの管理
この発明の一実施例によれば、リソースマネージャ254は作られたカートリッジインスタンスを管理するためステート情報を維持する。ステート情報には、インスタンスを識別し、そのインスタンスを実行するマシンを識別し、そのインスタンスが割当てられたリスナを識別するデータが含まれる。
【0068】
図5には、このステート情報を蔵置するためリソースマネージャ254が維持し得る表500が示される。表500には、インスタンス列502、カートリッジ列504、リスナ列506およびマシン列508が含まれる。表500の各行は別個のカートリッジインスタンスに対応する。所与のカートリッジインスタンスに対する行内で、カートリッジ列504はカートリッジインスタンスに関連づけられるカートリッジを識別し、インスタンス列502はそのカートリッジインスタンスのインスタンス番号を示す。たとえば、行510はカートリッジC1のインスタンスに対応する。このため、行510のカートリッジ列504はカートリッジC1を示す。行510のインスタンス列502は行510に関連づけられるカートリッジインスタンスがカートリッジC1のインスタンス1であることを示す。
【0069】
リスナ列506は、ある行に関連づけられるカートリッジインスタンスが割当てられたリスナを示す。マシン列508は、ある行に関連づけられるカートリッジインスタンスが実行されているマシンを示す。たとえば、行510に関連づけられるカートリッジインスタンスはリスナ210に割当てられており、マシンM1上で実行されている。
【0070】
リソースマネージャ254と同様に、各ディスパッチャはそのディスパッチャが設けられているリスナに割当てられたカートリッジインスタンスに対するステート情報を維持する。このようなステート情報はたとえば、図4に示されるような表400において維持されてもよい。表500と同様に、表400にはそれぞれインスタンス番号およびカートリッジ識別子を保持するインスタンス列402およびカートリッジ列404が含まれる。しかしながら、表500ではリソースマネージャ254によって割当てられるすべてのカートリッジインスタンスに対して1つずつエントリが含まれるのに対し、表400では特定のリスナに割当てられたカートリッジインスタンスに対するエントリしか含まれない。たとえば、表400は、表500に列挙されたカートリッジインスタンスのうちリスナ200に割当てられたもののみに対するエントリを含む。
【0071】
インスタンス列402およびカートリッジ列404に加えて、表400にはステータス列406が含まれる。各行に対し、ステータス列406はその行に関連づけられるインスタンスのステータスを示す値を保持する。たとえば、行408のステータス列406はカートリッジC1にインスタンス1が現在ビジーであることを示している。例示される実施例では、ステータス列406はカートリッジインスタンスがBUSYまたはFREEのいずれかであることを示すフラグを保持する。カートリッジステータスの重要性について、リソースマネージャ254とディスパッチャ214および220とのオペレーションに関連して以下に説明する。
【0072】
ディスパッチャとリソースマネージャとの相互作用
上述のように、ディスパッチャは特定のカートリッジに変更されたブラウザリクエストを送る必要がある際にリソースマネージャ254と通信する。この発明の一実施例によれば、ディスパッチャはまず、適当なカートリッジのインスタンスが(1)これに既に割当てられているかどうか、また(2)新しい変更されたブラウザリクエストを処理するのに利用可能であるかどうかを判定する。適当なカートリッジインスタンスがディスパッチャに既に割当てられており新しい変更されたブラウザリクエストを処理するのに現在利用可能である場合、ディスパッチャはリソースマネージャ254とさらに通信することなく、変更されたブラウザリクエストをカートリッジインスタンスへ転送する。
【0073】
たとえば、仮想パスマネージャ250によればカートリッジC1が処理しなければならないブラウザリクエストをリスナ210が受取ったと仮定する。また、表400がリスナ210に割当てられたカートリッジインスタンスの現在のリストおよびステータスを反映すると仮定する。リスナ210からブラウザリクエストを受取ると、ディスパッチャ214は表400を調べてカートリッジC1のFREEインスタンスがあるか探す。例示される表400では、行410がカートリッジC1のインスタンス3が現在FREEであることを示している。したがって、ディスパッチャ214はさらにリソースマネージャ254と通信することなく変更されたブラウザリクエストを直接カートリッジC1のインスタンス3に転送する。変更されたブラウザリクエストを送ることに応答してディスパッチャ214は行410のステータス列406のステータス値をBUSYに変える。
【0074】
リスナに現在利用可能である適当なカートリッジインスタンスが既に割当てられていない場合、カートリッジに関連づけられるディスパッチャはリソースマネージャ254からのカートリッジインスタンスをリクエストする。必要とされるカートリッジのインスタンスが利用可能でなく、かつ必要とされるカートリッジの既存のインスタンスの数が最大数より下であることをリソースマネージャ254が判定した場合、リソースマネージャ254は新しいカートリッジをイニシエートする。新しいカートリッジをイニシエートする際に、リソースマネージャ254は表500に新しいカートリッジインスタンスのためのエントリを挿入する。
【0075】
たとえば、カートリッジC3が処理しなければならないブラウザリクエストをリスナ210が受取ったと仮定する。また、カートリッジC3のインスタンス3がまだイニシエートされていないものと仮定する。こうした条件の下では、ディスパッチャ214はリソースマネージャ254にカートリッジC3のインスタンスに対するハンドルを求めるリクエストを送る。このリクエストに応答して、リソースマネージャ254はマシンM3上でカートリッジC3のインスタンス3をイニシエートする。さらに、リソースマネージャ254は行512に見られるエントリを表500に挿入する。
【0076】
表500にカートリッジC3のインスタンス3のための行512を挿入した後、リソースマネージャ254はディスパッチャ214に新しく作られたインスタンスに対するハンドルを送り返す。このハンドルを受取ったことに応答して、ディスパッチャ214はそのステータス表400に新しいインスタンスのためのエントリ(行412)を挿入する。ディスパッチャ214はそこで、変更されたブラウザリクエストをカートリッジC3のインスタンス3に送信する。
【0077】
カートリッジインスタンスの解放
この発明の一実施例によれば、リスナはカートリッジインスタンスが未処理のブラウザリクエストに応答し終わった際にカートリッジインスタンスの所有権を自動的に解放することはない。たとえば、カートリッジC3のインスタンス3が変更されたブラウザリクエストを受取り、その変更されたブラウザリクエストを処理して、ディスパッチャ214に応答を送り返すと想定する。ディスパッチャ214はその応答をリスナ210に渡し、これがブラウザリクエストを発行したブラウザに送り返されるようにする。
【0078】
この時点で、リスナ210はカートリッジC3のインスタンス3の所有権をもはや必要としない。しかしながら、カートリッジC3のインスタンス3の所有権をリソースマネージャ254に戻す代わりに、ディスパッチャ214は単に行412のステータス列406をBUSYからFREEに変える。
【0079】
行412のステータス列406の値をFREEに変えることによって、カートリッジC3のインスタンス3がもはやリクエストを処理しておらず、よって後続のリクエストを処理する準備ができていることが示される。しかしながら、カートリッジC3のインスタンス3が利用可能であることを示す表400はディスパッチャ214によって局所的に維持されているため、カートリッジC3のインスタンス3はリスナ210に到達する後続のブラウザリクエストに対してだけ利用可能である。リソースマネージャ254が維持する表500の行512はカートリッジC3のインスタンス3をリスナ210が所有していることを引続き示す。
【0080】
リスナはリクエストが処理されるたびにカートリッジインスタンスを自動的に解放するわけではないため、リソースマネージャ254とさまざまなディスパッチャとの間での通信に関連するオーバーヘッドは大幅に減少される。たとえば、カートリッジC3に伝えなければならない10の連続したリクエストをリスナ210が受取るものと仮定する。10のリクエストの各々に対してリソースマネージャ254と通信するのではなく、ディスパッチャ214は最初のリクエストに応答してリソースマネージャ254と通信してもよい。ディスパッチャ214は後続の9つのリクエストをリソースマネージャ254と通信することなく処理することができるが、これはディスパッチャ214が最初のリクエストを処理するC3の同じインスタンスを用いて9つの後続のリクエストを処理するためである。
【0081】
各リクエストを処理する際にカートリッジインスタンスのリスナ所有権を自動的に解放しないことでウェブアプリケーションサーバ280の効率が向上されるとはいえ、リスナは無期限にカートリッジインスタンスの所有権を維持することはできない。たとえば、長い期間にわたって用いられなかったインスタンスはリソースマネージャ254に戻され、リソースを空けるためにその割当ての解除ができるようにすべきである。さらに、他のリスナがそのカートリッジのインスタンスを必要としているところに、1つのリスナが比較的長い時間使っていなかったカートリッジのインスタンスの所有権を維持することは効率的ではない。
【0082】
したがって、リソースマネージャ254は、リスナに渡される各カートリッジインスタンスのための最大アイドルタイムを各リスナに伝える。最大アイドルタイムとは、リスナがカートリッジインスタンスの所有権を解放しなければならなくなる前にそのカートリッジインスタンスが使用されない状態でいられる最大の時間を示すものである。たとえば、カートリッジC3のインスタンス3のための最大量のアイドルタイムが10分であることをリソースマネージャ254がリスナ210に示すものと仮定する。この情報に基づいて、リスナ210は、カートリッジC3のインスタンス3が10分より長い間アイドル状態またはFREEとならない限りにおいてカートリッジC3のインスタンス3を続けて用いてカートリッジC3に対するブラウザリクエストを処理することができる。
【0083】
カートリッジC3のインスタンス3が10分より長い間アイドル状態である場合、ディスパッチャ214は表400から行412を取除き、リスナ210がカートリッジC3のインスタンス3の所有権を解放することをリソースマネージャ254にメッセージを送って知らせる。このメッセージに応答して、リソースマネージャ254は行512を更新して、カートリッジC3のインスタンス3がいずれのリスナによっても所有されておらず、よって別のリスナに再割当てされるか終了され得ることを示す。
【0084】
代替の実施例では、カートリッジインスタンスのためのアイドルタイムが満了した際にもディスパッチャはカートリッジインスタンスを自動的に解放しない。代わりに、ディスパッチャはリソースマネージャ254にメッセージを送り、満了となったインスタンスを解放することを申し出る。リソースマネージャ254はこの申し出に応答して、リスナがカートリッジインスタンスを解放するようリクエストするか、またはリスナがその満了となったカートリッジインスタンスの所有権を持ち続けることを許可してもよい。
【0085】
この発明の一実施例によれば、リソースマネージャ254は直ちに処理することのできないリクエストのキューを維持する。キュー内のリクエストを処理することが可能となると、そのリクエストはキューから取除かれ処理される。
【0086】
たとえば、カートリッジC1が処理しなければならないブラウザリクエストをリスナ222が受取り、そのリスナ222にカートリッジC1のいずれのインスタンスも割当てられていなかったと仮定する。ディスパッチャ226はリソースマネージャ254にC1のインスタンスに対するリクエストを送る。さらに、C1の最大50のインスタンスが許容され、C1の50のインスタンスがリスナ210に割当てられたと仮定する。こうした条件の下では、リソースマネージャ254はリスナ222からのリクエストを処理することができない。このため、リソースマネージャ254はそのリクエストをキューにおく。リスナ210がC1のインスタンスを解放すると、リソースマネージャ254はリスナ222にC1のインスタンスが利用可能であることを伝える。
【0087】
ある特定の条件の下で、リソースマネージャ254は強制的にリスナにカートリッジインスタンスを解放させることがある。たとえば、リソースマネージャ254はシステムオーバロード状況を検出し、これに応答して1組のカートリッジインスタンスを終了することがあり、これはそのカートリッジインスタンスが終了されることになることをそのカートリッジインスタンスが現在割当てられているリスナに知らせる前または知らせた後に行なわれる。
【0088】
また、リソースマネージャ254はリスナの間での公平性の方針を実現するために強制的にリスナにカートリッジインスタンスを解放させることがある。たとえば、別のリスナが予め定められたしきい値より長い時間にわたってカートリッジのインスタンスを待っている場合、リソースマネージャ254は所与のカートリッジの最も多い数のインスタンスを保持するリスナにそのカートリッジのあるインスタンスを解放させてもよい。たとえば、リスナ210にカートリッジC1の50のインスタンスが割当てられ、C1は最大で50のインスタンスを有する場合、リソースマネージャ254は別のリスナからC1のインスタンスに対するリクエストを受取ってから10秒後にリスナ210にC1のあるインスタンスを解放させてもよい。
【0089】
カートリッジ実行エンジン
この発明の一実施例によれば、各カートリッジインスタンスはカートリッジ実行エンジンおよびカートリッジから構成される。カートリッジ実行エンジンは、ウェブアプリケーションサーバ280およびマシン間通信機構の複雑さからカートリッジを隔離するコードモジュールである。カートリッジは、関数テーブルにカートリッジ関数に対するポインタを蔵置することによってカートリッジ実行エンジンに利用可能となる。一実施例によれば、すべてのカートリッジが、上述の例示のカートリッジインターフェイスにおいて特定された関数を提供する。すべてのカートリッジが同じインターフェイスをサポートするようにさせることにより、単一の標準カートリッジ実行エンジンをすべてのカートリッジに対して用いることができる。
【0090】
この発明の一実施例によれば、カートリッジは共用ライブラリとして実装され、カートリッジ実行エンジンは標準カートリッジインターフェイスを用いて共用ライブラリ内のルーチンを呼出す実行可能なプログラムである。カートリッジ実行エンジンはカートリッジとディスパッチャとの間でインターフェイスをもたらし、カートリッジの制御のフローを指示し、カートリッジが用いるサービスを提供する。
【0091】
リソースマネージャ254が新しいカートリッジインスタンスの生成を必要とする場合、リソースマネージャ254はカートリッジ実行エンジンのインスタンスを生成させる。これに対し、このようにして作られたカートリッジ実行エンジンのインスタンスは適当なカートリッジのインスタンスを生成させる。リソースマネージャ254はたとえば、カートリッジが実行されるマシン上にある「カートリッジ実行エンジンファクトリ」と呼出すことによってカートリッジ実行エンジンのインスタンスを生成させることができる。カートリッジ実行エンジンのインスタンスはたとえば、そのカートリッジを構成する共用ライブラリ内のルーチンのうちの1つに呼出を行なうことによってカートリッジのインスタンスを生成させることができる。
【0092】
図2に示すように、ウェブアプリケーションサーバ280は、カートリッジ230、234および238のそれぞれに対して、カートリッジ実行エンジン228、232および236を含む。カートリッジ実行エンジンは、標準のカートリッジインターフェイスを通じてカートリッジへのコールを行なうことによって、対応するカートリッジのインスタンスの実行を制御する。カートリッジ実行エンジンとカートリッジとの間に基本的なコールバック機能を構築することによって、どのカートリッジも、ウェブアプリケーションサーバ280内に統合することができる。これは、そのカートリッジをコールバック機能に応答するよう構成し、その後、そのカートリッジをコンフィギュレーションプロバイダ256に登録することによって、行なわれる。これについては、以下に記載する。
【0093】
したがって、PL/SQLランタイムカートリッジがリクエストを処理するのに適当なカートリッジであるとディスパッチャ214が判定すると、ディスパッチャ214はそのPL/SQLランタイムカートリッジに関連づけられるカートリッジ実行エンジンを含むカートリッジインスタンスにそのリクエストをディスパッチする。新しいインスタンスをイニシエートする必要がある場合、リソースマネージャ254は別個のアドレス空間においてPL/SQLランタイムカートリッジの新しいインスタンスを作り、その新しいインスタンスのカートリッジ実行エンジン228へそのリクエストをディスパッチする。プログラムのインスタンスを実行するのに用いられるアドレス空間は、ウェブアプリケーションサーバ280の構成要素の1つ以上が実行されているコンピュータシステムのメモリ内にあるか、または別のコンピュータシステム上にあってもよい。
【0094】
ディスパッチャからのメッセージに応答して、カートリッジ実行エンジンはカートリッジにリクエストハンドラコールバック機能を発行し、カートリッジにそのリクエストを処理させる。そのリクエストを処理するカートリッジはその結果をカートリッジ実行エンジンに返し、カートリッジ実行エンジンはその結果をディスパッチャに転送する。ウェブアプリケーションサーバ280がオペレーションにおいて障害を検出した場合にはカートリッジ実行エンジンはカートリッジのシャットダウン関数を発行する。
【0095】
このように、カートリッジ実行エンジンは、実行すべき予め定められたオペレーションを特定するウェブアプリケーションサーバ280へのアプリケーションプログラミングインターフェイスを提供する。標準のカートリッジインターフェイスを使用することにより、カートリッジのプログラマが、カートリッジがともに用いられることになる特定のウェブリスナが用いるプロトコルとは無関係に、各カートリッジをウェブアプリケーションサーバ280へ高レベルで統合化するよう構成することができる。
【0096】
トランスポートアダプタ
リスナは、サーバ側のプラグインが使用するためのプログラミングインターフェイスおよびプロトコルを提供することによってそのようなプラグインの使用を可能にする。残念なことに、リスナが提供するプログラミングインターフェイスおよびプロトコルはリスナごとに異なる。たとえば、ネットスケープ・サーバ・アプリケーション・プログラミング・インターフェイス(NSAPI:Netscape Server Application Programming Interface)、インターネット・サーバ・アプリケーション・プログラミング・インターフェイス(ISAPI:Internet Server Application Programming Interface)およびアプリケーション開発インターフェイス(ADI:Application Development Interface)は現在リスナによりもたらされる別個のプログラミングインターフェイスの3つの例である。
【0097】
トランスポートアダプタはウェブリスナが用いる私的プロトコルおよびインターフェイスからディスパッチャを隔離する。特定的には、各トランスポートアダプタはさまざまなリスナのプロトコルを認識し、リスナから受取ったブラウザリクエストを変換してリスナのプロトコルとは無関係の標準ディスパッチャプロトコルを有する変換されたブラウザリクエストを生じるよう構成される。同様に、トランスポートアダプタはディスパッチャからの返答をリスナのトランスポートプロトコルに変換する。
【0098】
このように、トランスポートアダプタにより、ウェブアプリケーションサーバ280を異なるベンダのリスナとともに用いることが可能となる。さらに、トランスポートアダプタは異なるサーバアーキテクチャおよびオペレーティングシステムに対応するよう構成されてもよい。
【0099】
ウェブアプリケーションサーバのオペレーション
図3Aおよび図3Bはこの発明の一実施例によるブラウザリクエストに応答する方法を示すフロー図である。ステップ350においてリスナがブラウザリクエストを受取る。説明のために、このブラウザリクエストはブラウザ202により発行されリスナ210により受取られるものと仮定する。
【0100】
ブラウザリクエストを受取ると、リスナ210はステップ352においてウェブアプリケーションサーバ280にそのリクエストを転送する。特定的には、リスナ210はリスナ210の私的プログラミングインターフェイスを用いてそのリクエストをトランスポートアダプタ212に渡す。トランスポートアダプタ212は、必要に応じてそのリクエストを標準ディスパッチャプログラミングインターフェイスを用いて変換しそのリクエストをディスパッチャ214に渡す。
【0101】
ディスパッチャ214は、仮想パスマネージャ250と通信することによって、ブラウザリクエストにより特定される仮想パスに基づいて、ステップ354においてブラウザリクエストに対応するリクエストオブジェクトタイプを識別する。リクエストオブジェクトタイプがカートリッジに対応する場合には、仮想パスマネージャはまた、認証が必要であるかどうかをディスパッチャ214に知らせる。
【0102】
ディスパッチャ214はステップ356において、そのリクエストオブジェクトタイプが識別可能なカートリッジに対応するかどうかを判定する。そのリクエストオブジェクトタイプが識別可能なカートリッジに対応していない場合、そのリクエストはステップ358においてリスナ210に戻される(図3Bを参照)。ステップ358においてそのリクエストが静的HTMLページに対するリクエストであることをリスナ210が認識すると、リスナはその静的HTMLページにアクセスし、そのHTMLページをステップ360においてブラウザ202に送る。ブラウザリクエストがリスナ210によって認識されない場合、ステップ360において返答がブラウザ202に送られそのリクエストが認識不可能であったことを示す。
【0103】
ステップ356において、リクエストをカートリッジに送らなければならないとディスパッチャ214が判定すると、ディスパッチャは、認証サーバ252と通信することによって、必要な認証を行なう。この認証のプロセスについては、以下により詳細に説明する。さらに、ステップ356において、リスナ210にそのカートリッジの現在FREEであるインスタンスが1つも割当てられていないと判定すると、ディスパッチャ214は、そのブラウザリクエストを送ることのできるカートリッジ230のインスタンスが割当てられることになるリソースマネージャ254と通信する。
【0104】
図3Bに示されるステップ362では、リソースマネージャ254は、識別されたカートリッジのインスタンスが既存のインスタンスの数の中で利用可能である(所有されていない)かどうかを判定する。説明のため、このリクエストはカートリッジ230に関連づけられるものであり、カートリッジ230はPL/SQLランタイムカートリッジであると仮定する。
【0105】
ステップ362においてリソースマネージャが利用可能なインスタンス、たとえばPL/SQLランライム230のインスタンス260を識別すると、リソースマネージャ254はリクエストをインスタンス260に送るべきであることをディスパッチャ214に知らせる。ディスパッチャ214はそこで、変更されたブラウザリクエストを作りステップ368においてインスタンス260のカートリッジ実行エンジン228にその変更されたブラウザリクエストを送って、以下に説明するように利用可能なインスタンス260にそのリクエストを処理させる。
【0106】
しかしながら、ステップ362においてカートリッジ230のインスタンスが1つも利用可能でない場合、リソースマネージャ254はステップ364において、既存のインスタンスの数が最大所定数を超えるかどうかを判定する。ステップ364において既存のインスタンスの数が最大所定数を超える場合、リソースマネージャ254はその時点ではそのリクエストを処理できないことをディスパッチャ214に示す。これに応答して、ディスパッチャ214はステップ358においてそのリクエストをリスナ210に返し、その後に、ウェブリスナ210はステップ360においてネットワークを介してブラウザ202へ返答を送り、そのリクエストが処理されなかったことを示す。
【0107】
代わりに、カートリッジインスタンスがリクエストを処理するためにその現時点で利用可能でない場合、リスナ210はそのカートリッジインスタンスに対する待ちリストにそのリクエストを入れてもよい。カートリッジインスタンスが利用可能となると、変更されたブラウザリクエストが待ちリストから取除かれカートリッジインスタンスに転送される。変更されたブラウザリクエストが予め定められた時間より長い間待ちリストに残っている場合、リスナ210はそのリクエストを待ちリストから取除いてブラウザ202にメッセージを送りそのリクエストが処理できなかったことを示すようにしてもよい。
【0108】
ステップ364において既存のインスタンスの数が最大所定数を超えない場合、リソースマネージャ254は識別されたプログラムの新しいインスタンスをイニシエートし、ブラウザリクエストに基づく変更されたブラウザリクエストを新しいインスタンスに送るべきであることをディスパッチャ214に知らせる。そこでディスパッチャ214は変更されたブラウザリクエストをその新しいインスタンスのカートリッジ実行エンジンへディスパッチする。
【0109】
たとえば、リソースマネージャ254がブラウザリクエストに応答してインスタンス260をイニシエートしたと仮定する。その初期化の間、PL/SQLランタイムのための蔵置された命令シーケンスにアクセスが行なわれ、ディスパッチャ214が実行しているアドレス空間とは別個のアドレス空間においてカートリッジ230の新しいインスタンス260が作られる。一実施例によれば、初期化はカートリッジ実行エンジン228をロードし、そのカートリッジ実行エンジンにカートリッジ230内の初期化ルーチンを呼出させることによって行なわれる。
【0110】
一度新しいインスタンス260が実行されると、ディスパッチャ214はステップ368においてその新しいインスタンス260に関連づけられているカートリッジ実行エンジン228にリクエストをディスパッチする。カートリッジ実行エンジン228は新しいインスタンス260にコールバックメッセージを送りそのリクエストの実行を要求する。そのコールバックメッセージにおいて、カートリッジ実行エンジン228はそのリクエストを処理する上でインスタンス260が必要とする全てのパラメータを渡す。このようなパラメータにはたとえば、パスワード、データベース探索キー、またはインスタンス260が実行する動的オペレーションのための他のどんな引き数を含んでいてもよい。
【0111】
次にインスタンス260はリクエストを実行する。ステップ368におけるインスタンスによるリクエストの実行の間、ディスパッチャ214はステップ370においてインスタンスを監視して障害が発生するかどうかを判定する。ステップ370においてディスパッチャ214が障害を検出すると、ディスパッチャ214はステップ372において対応するカートリッジ実行エンジン228を呼出し、その障害を有するインスタンス260を打ち切る。これに対し対応するカートリッジ実行エンジン228はAPIを通して障害のあるインスタンスに対してシャットダウンコマンドを発行する。そのインスタンスはカートリッジ実行エンジン228によるシャットダウンコマンドに応答して、他のどんなアドレス空間における他のどんなプロセスにも影響を与えることなくシャットダウンする。
【0112】
ステップ370において障害が検出されない場合、ディスパッチャ214はステップ374において実行の完了の際にインスタンス260から返答を受取る。ステップ376においてディスパッチャ214はその返答をリスナ210に転送し、リスナ210は実行されたインスタンス260からの返答をもってブラウザに応答する。インスタンス260を実行した後、ステップ378においてディスパッチャ214はステップ378に示されるようにメモリ内にインスタンスを維持し、後続のリクエストの実行を可能にする。
【0113】
ウェブサーバの分散アーキテクチャ
重要なことであるが、ウェブアプリケーションサーバ280のさまざまな構成要素は、それら構成要素が同じアドレス空間において実行される必要がなく同じマシン上で実行されることさえ必要としない通信機構を用いて互いに通信する。例示される実施例では、ウェブアプリケーションサーバ280の構成要素はオブジェクトリクエストブローカ(ORB:Object Request Broker)282を介して通信するよう構成される。オブジェクトリクエストブローカは「共通オブジェクトリクエストブローカ:アーキテクチャおよび仕様(CORBA)」("Common Object Request Broker: Architecture and Specification (CORBA)")に詳しく記載されている。CORBAに関連するこのおよび他の文献はワールド・ワイド・ウェブのhttp://www.omg.orgにおいて見つけることができる。
【0114】
この発明の実施例はCORBAに従ったORBを介する通信に関連して説明するが、他のクロスプラットフォーム通信機構を用いてもよい。たとえば、ウェブアプリケーションサーバ280の構成要素は代わりに、遠隔手続き呼出(RPC:Remote Procedure Calls)、UNIXパイプ、Microsoft COMを用いて互いに通信してもよい。
【0115】
ウェブアプリケーションサーバ280のさまざまな構成要素がマシンから独立した通信機構を用いて互いに通信するため、構成要素が互いに対してどこに存在するかということに関して固有の制約はない。たとえば、リスナ210、216および222は同じマシン上で実行していてもよく、またはそれぞれがこのようなオペレーティングシステムを有する3つの完全に異なったマシン上で実行してもよい。同様に、認証サーバ252、仮想パスマネージャ250、リソースマネージャ254およびコンフィギュレーションプロバイダ256は同じマシン上で実行していてもよく、または4つの異なるマシン上で実行していてもよい。さらに、これらの4つの異なるマシンはリスナ210、216および222を実行する3つのマシンと少しも重複していなくてもよい。
【0116】
カートリッジ実行エンジン228、232および236は、オブジェクトリクエストブローカ282を介してウェブアプリケーションサーバ280の他の構成要素と通信するのに必要な論理のすべてを組込んでいる。したがって、カートリッジインスタンス自体の場所は通信機構によって本質的に制約されるものではない。すなわち、インスタンス260はこれがリクエストを受取るディスパッチャとは全く異なるマシンおよびオペレーティングシステムにおいて実行されてもよい。同様に、インスタンス260は、リソースマネージャ254、または同じウェブアプリケーションサーバ280によって管理される他のカートリッジのインスタンスを含む、ウェブアプリケーションサーバ280の他の構成要素のいずれとも異なるマシンおよびオペレーティングシステム上にあってもよい。
【0117】
重要な事だが、ウェブアプリケーションサーバ280が用いるカートリッジが享受する場所の独立性は、カートリッジそのものにおける何らかのカスタムプログラミングを介してではなくカートリッジ実行エンジンの通信論理を介して達成される。したがって、分散アプリケーションサーバ環境における実行のために特別にカートリッジを設計する必要がない。このように、カートリッジ設計者らは分散システムの複雑さから隔離され、カートリッジが作られる目的であるタスクと関連する論理に労力を集中させることができる。
【0118】
認証機能の概要
前述のように、各ブラウザのメッセージはURL情報と関連付けられて、URL情報はとりわけ、アクセスされるべき特定のカートリッジを識別する。ディスパッチャは、ブラウザのリクエストを受取ると、仮想パスマネージャと通信して、そのブラウザのメッセージに関連付けられたカートリッジが認証を必要としているかどうかを判定する。カートリッジが認証を必要としない場合には、ディスパッチャはブラウザのリクエストをカートリッジにディスパッチし、カートリッジがそれを実行する。しかし、カートリッジが認証を必要とする場合には、ディスパッチャは認証のリクエストを認証サーバに対して送信する。
【0119】
認証サーバは、認証のリクエストに含まれる情報を使用して、そのブラウザのリクエストがカートリッジにアクセスすることを許可されているかどうかを判定する。ブラウザのリクエストがカートリッジにアクセスすることを許可されている場合には、ディスパッチャはブラウザのリクエストをカートリッジにディスパッチし、カートリッジがそれを実行する。これに対し、ブラウザのリクエストがカートリッジにアクセスすることを許可されていない場合には、ディスパッチャはアクセスが拒絶されたことを示すメッセージをブラウザに送信する。このプロセスは、ブラウザの各リクエストに対して繰返される。
【0120】
図6は、本発明の一実施例に従った、ステートレスなウェブ環境において拡張可能な認証機構を提供する、システム600のブロック図である。図6は図2と同様であるため、同じ構成要素には同じ参照番号が付されている。
【0121】
システム600は、オブジェクトリクエストブローカ282を介して複数のディスパッチャ214、220および226に接続された認証サーバ252を含む。認証サーバ252は、認証エンジン602と、認証ホスト604と、複数の認証サービスプロバイダ(単にプロバイダと称する)606、608、610および612とを含む。
【0122】
認証エンジン602は、オブジェクトリクエストブローカ282を介してディスパッチャ214、220および226と通信して、認証のリクエストを受取る。認証のリクエストを受取ると、認証エンジン602はその認証のリクエストを解析して1または複数のプロバイダのリクエストとする。認証エンジン602はその後、それらプロバイダのリクエストを、オブジェクトリクエストブローカ282を介して認証ホスト604に送信する。各リクエストはそこから適切なプロバイダへと分配される。
【0123】
認証エンジン602からプロバイダのリクエストを受取ると、認証ホスト604はそのプロバイダのリクエストを適切なプロバイダに送る。プロバイダは、プロバイダのリクエストを受取ると、アクセスが許可されるべきかどうかを、そのプロバイダのリクエストに含まれる情報に基づいて判定する。プロバイダはその後、認証ホスト604およびオブジェクトリクエストブローカ282を介して、応答メッセージを認証エンジン602に戻す。この応答メッセージは、その特定のプロバイダのリクエストに含まれていた情報に基づいて、アクセスが許可されるべきかどうかを示している。
【0124】
認証エンジン602はその後、1または複数のプロバイダの応答メッセージを使用して、ディスパッチャから受取られた認証のリクエストに基づいて、カートリッジのアクセスが許可されるべきかどうかを判定する。認証エンジンはその後、ブラウザのリクエストを適切なカートリッジに送るか、それとも、送信側ブラウザにアクセスが拒絶されたことを知らせるか、をディスパッチャに通知する。
【0125】
プロテクトストリング
前述のように、ウェブアプリケーションサーバ280とともに使用されるべきカートリッジは、メタデータとして記憶されるべき情報をコンフィギュレーションプロバイダ256に提供することによって、まず登録される。この登録プロセス中、各カートリッジは、その特定のカートリッジに関連付けられるべきURLのリストを供給する。これらURLは、特定のブラウザのリクエストに関連付けられるカートリッジを識別するのに使用される。特定のカートリッジへのアクセスを制限するために、オプションとしてプロテクトストリングを各URLエントリに関連付けてもよい。
【0126】
本発明の一実施例においては、各プロテクトストリングは、1または複数の方式名と領域名との対によって構成されており、方式名と領域名との対が複数あるときは、それらの間には論理関数(たとえばAND、OR)が置かれている。方式名は、カートリッジのアクセスを認証するのに使用されるべきプロバイダの型を識別し、領域名は、方式名と関連付けられた、プロバイダによって必要とされる認証情報の型を示す。
【0127】
たとえば、カートリッジ238が登録する場合、これは、以下のようなURLおよびプロテクトストリングと関連付けられてもよい:
URL1 CARTRIDGE_238 BASIC(GROUP1) AND IP(IP_LIST)
この例においては、URL1がURLを表わし、方式名「BASIC」および「IP」がカートリッジのアクセスの認証に使用されるべきプロバイダを識別する。領域名「GROUP1」および「IP_LIST」は、それぞれ方式名「BASIC」および「IP」に関連付けられており、各プロバイダの型によって必要とされる認証情報の型を表わす。論理「AND」演算が、認証エンジンによって使用される。これはまた、そのブラウザのリクエストがCARTRIDGE_238にアクセスすることを許可されるかどうかを判定するために、「BASIC」および「IP」プロバイダから受取られた応答メッセージに対して論理「AND」演算が行なわれねばならないことを表わしている。
【0128】
プロバイダ
プロバイダは、特定の型の認証を行なうのに使用されるコードのモジュールである。本発明の一実施例に従えば、プロバイダは動的にリンクされるライブラリ(DLL)として実装される。したがって、プロバイダは、それが属する認証ホストと同じアドレス空間内にロードされかつその中で実行される。プロバイダは、好ましくは、ランタイムに動的にロードされる。
【0129】
各プロバイダは、関数ポインタのテーブルおよびプロパティリストを含む。関数ポインタのテーブルは、認証ホスト604がアクセスすることのできる特定のプロバイダの機能に対するポインタを提供する。プロパティリストは、その特定のプロバイダにアクセスするのに必要とされる、(カートリッジに対してリクエストを開始するユーザのアイデンティティ等の)認証情報の型を記述する。一実施例に従えば、プロパティテーブルは、プロバイダの名前、ディスク上でそのDLLが記憶されているロケーション、およびエントリポイントアドレスを含む。認証ホストは、エントリポイントを呼出して、特定のプロバイダのリクエストを認証するのに使用することのできる関数ポインタのリストを得ることができる。
【0130】
一実施例において、特定のプロバイダに関連する情報は、そのプロバイダが初期化されるときにウェブアプリケーションサーバ280内にメタデータとして格納される。プロバイダが初期化されるときにプロバイダ情報をメタデータとして格納することによって、プロバイダを認証サーバ252に対して動的に付加したりそれから分離したりすることのできる機構が提供される。
【0131】
図6に示すように、プロバイダ606、608、610および612は認証ホスト604に関連づけられている。各プロバイダは、特定のカートリッジへのアクセスを制限する、特定的な認証機構を提供する。たとえば、BASICプロバイダを認証ホストに関連づけ、このBASICプロバイダを利用して、カートリッジのアクセスを、特定のユーザ名およびパスワードの対に関連づけられたブラウザのリクエストのみに制限することができる。したがって、このBASICプロバイダは、認証ホストからプロバイダのリクエストを受取ると、所定のユーザ名/パスワードのアクセスリストをサーチして、アクセスが提供されるべきかどうかを判定する。ユーザ名/パスワードの一致を発見すると、BASICプロバイダは、供給されたユーザ名およびパスワードの対に基づいてアクセスが許可されるべきであることを示すメッセージを、認証ホストに送信する。しかし、一致を見つけることができなければ、そのBASICプロバイダは、ユーザ名/パスワードの対に基づいてアクセスが許可されるべきではないことを示すメッセージを、認証ホストに送信する。
【0132】
認証ホストに関連づけることのできるプロバイダの型の別の例として、IPアドレスプロバイダがある。このIPアドレスプロバイダは、カートリッジのアクセスを、特定のIPアドレスに関連づけられたブラウザのリクエストのみに制限するのに使用することができる。したがって、このIPアドレスプロバイダは、認証ホストからプロバイダのリクエストを受取ると、所定のIPアクセスリストをサーチして、アクセスが提供されるべきかどうかを判定する。もしIPアドレスの一致を発見すれば、IPアドレスプロバイダはその供給されたIPアドレスに基づいてアクセスが許可されるべきであることを示すメッセージを、認証ホストに送信する。しかし、一致を発見できない場合には、IPアドレスプロバイダは、IPアドレスに基づいてアクセスが許可されるべきではないことを示すメッセージを、認証ホストに送信する。
【0133】
認証ホストに関連づけることのできるプロバイダの型のさらに別の例として、DOMAIN名プロバイダがある。DOMAIN名プロバイダは、カートリッジのアクセスを、特定の領域名に関連づけられたブラウザのリクエストのみに制限するのに使用することができる。したがって、このDOMAIN名プロバイダは、認証ホストからプロバイダのリクエストを受取ると、所定のDOMAIN名リストをサーチして、アクセスが提供されるべきかどうかを判定する。DOMAIN名の一致を発見した場合、DOMAIN名プロバイダは、供給されたDOMAIN名に基づいてアクセスが許可されるべきであることを示すメッセージを、認証ホストに送信する。しかし、一致を発見できない場合には、DOMAIN名プロバイダは、DOMAIN名に基づいてアクセスが許可されるべきではないことを示すメッセージを、認証ホストに送信する。
【0134】
認証ホストに関連づけることのできるプロバイダの型のまた別の例として、DATABASEプロバイダがある。このDATABASEプロバイダは、カートリッジのアクセスを、特定のデータベース内に含まれる特定のユーザ名およびパスワードの対に関連づけられたブラウザのリクエストのみに制限するのに使用することができる。したがって、このDATABASEプロバイダは、認証ホストからプロバイダのリクエストを受取ると、データベースをサーチして、アクセスが提供されるべきかどうかを判定する。データベース内にユーザ名/パスワードの一致を発見すれば、DATABASEプロバイダは供給されたデータベースのユーザ名およびパスワードの対に基づいてアクセスが許可されるべきであることを示すメッセージを認証ホストに送信する。しかし、一致を発見することができなければ、DATABASEプロバイダは、データベースのユーザ名/パスワードの対に基づいてアクセスが許可されるべきではないことを示すメッセージを、認証ホストに送信する。
【0135】
認証ホストに関連づけることのできるプロバイダの型のさらに別の例に、DIGESTプロバイダがある。このDIGESTプロバイダは、特定のユーザ名および暗号化されたパスワードの対に関連づけられたブラウザのリクエストのみにカートリッジのアクセスを制限するのに使用することができる。このDIGESTプロバイダは、認証ホストからプロバイダのリクエストを受取ると、乱数を発生し、この乱数を、ディスパッチャを介してブラウザのリクエストに関連づけられたブラウザへと送り返す。
【0136】
ブラウザは、この乱数を受取ると、DIGESTプロバイダが発生したこの乱数に基づいてパスワードを暗号化し、それをディスパッチャおよびオブジェクトリクエストブローカを介して認証エンジンに送り返す。認証エンジンは、この暗号化されたパスワードを、オブジェクトリクエストブローカおよび認証ホストを介してDIGESTプロバイダに戻す。DIGESTプロバイダは、ブラウザから送られてきた暗号化パスワードを受取ると、それをDIGESTプロバイダによって生成された暗号化パスワードと比較する。その後、DIGESTプロバイダは、比較の結果を使用して、そのブラウザのリクエストがカートリッジに対してアクセスすることができるかどうかを判定する。
【0137】
認証エンジン
一実施例に従えば、認証エンジン602は、実行を開始するときに、自身を認証エンジンと識別するその名前および関連のIDをメタデータとしてウェブアプリケーションサーバ280に格納することによって、ウェブアプリケーションサーバ280に登録する。認証エンジンに関連づけられたメタデータは、オブジェクトリクエストブローカ282がシステムの負荷を最適配分するのに使用される。負荷の最適配分については、以下にさらに詳細に説明する。
【0138】
認証リクエストを受取ると、認証エンジン602はその認証リクエストを解析して1または複数のプロバイダのリクエストとする。その後、認証エンジン602はそれらプロバイダのリクエストを、オブジェクトリクエストブローカ282を介して認証ホスト604に送信し、各リクエストはそこから適切なプロバイダへと分配される。
【0139】
認証ホスト604は、認証エンジン602からプロバイダのリクエストを受取ると、各プロバイダのリクエストを適切なプロバイダに送る。プロバイダは、プロバイダのリクエストを受取ると、そのプロバイダのリクエストに含まれる情報に基づいてアクセスが許可されるべきかどうかを判定する。その後、プロバイダは、プロバイダのリクエスト内に含まれる情報に基づいてアクセスが許可されるべきかどうかを示す応答メッセージを、認証ホスト604およびオブジェクトリクエストブローカ282を介して認証エンジン602へと送り返す。
【0140】
認証のリクエストに関連づけられたプロバイダから応答メッセージを受けた後、認証エンジンは、そのブラウザのリクエストがカートリッジにアクセスするのを許可されるべきかどうかを判定するのに必要な論理演算を行なう。認証エンジンはその後、そのブラウザのリクエストがカートリッジにディスパッチされるべきか、それとも、カートリッジのアクセスが拒絶されたことをブラウザに知らせるべきかを、ディスパッチャに通知する。
【0141】
認識リクエストの処理
図7Aおよび7Bは、本発明の一実施例に従った、ステートレスなウェブ環境においてブラウザのリクエストを認証するための方法を示すフロー図である。説明の目的で、ブラウザのリクエストはブラウザ202によって発行され、ディスパッチャ214がそれを受取るものとする。また、ブラウザのリクエストに関連するURLが、プロテクトストリング「BASIC(GROUP1) AND IP(IP_LIST)」に関連づけられ、また、ブラウザのリクエストが、ユーザ名「JIM」、パスワード「MANAGER」およびIPアドレス「192.6.25.3」を含むものとする。さらに、プロバイダ606がBASIC型のプロバイダであって、プロバイダ608がIP型のプロバイダであるものとする。
【0142】
ステップ702において、ディスパッチャ214が上述のようなブラウザのリクエストを受取る。ステップ704において、ディスパッチャ214がオブジェクトリクエストブローカ282を介して仮想パスマネージャ250と通信して、そのブラウザのリクエストに関連づけられるURLが認証を必要とするか(たとえば、URLがプロテクトストリングに関連づけられているか)を判定する。URLがプロテクトストリングに関連づけられていない場合には、ステップ706において、ディスパッチャ214がそのブラウザのリクエストを適切なカートリッジにディスパッチする。その後、制御はステップ702に戻って、別のブラウザのリクエストを受取る。
【0143】
しかし、URLが(この例のように)プロテクトストリングに関連づけられている場合には、ステップ708において、ディスパッチャ214はオブジェクトリクエストブローカ282を介して認証エンジン602へと、認証のリクエスト(たとえば、BASIC(Group1)JIM/MANAGER AND IP(IP_LIST)192.6.25.3)を送信する。ステップ710において、認証エンジン602は、その認証リクエストを解析して別々のプロバイダのリクエスト(たとえば、BASIC(Group1)JIM/MANAGER、IP(IP_LIST)192.6.25.3)とする。ステップ712において、認証エンジン602は、それらプロバイダのリクエストをオブジェクトリクエストブローカ282を介して認証ホスト604に送信し、これらはそこから適切なプロバイダへと分配される。
【0144】
ステップ714において、認証ホスト604は、プロバイダのリクエストを適切なプロバイダに送信する。この例においては、BASIC(GROUP1)JIM/MANAGERというプロバイダのリクエストはプロバイダ606に送られ、IP(IP_LIST)192.6.25.3というプロバイダのリクエストはプロバイダ608に送られる。ステップ716において、各プロバイダは、それらが受取ったプロバイダのリクエスト内に含まれる情報に基づいて、カートリッジへのアクセスが許可されるべきかどうかを判定する。ステップ718において、各プロバイダは、認証ホスト604およびオブジェクトリクエストブローカ282を介して認証エンジン602へと応答メッセージを送信する。この例においては、プロバイダ606および608が応答メッセージを認証エンジン602に送信する。
【0145】
ステップ720において、認証エンジン602は、認証のリクエストに関連づけられた論理演算を行なう。この例においては、認証エンジン602は、プロバイダ606およびプロバイダ608から受取った2つの応答メッセージに対して論理演算「AND」を行なう。ステップ722において、認証エンジン602は認証の結果を、オブジェクトリクエストブローカ282を介してディスパッチャ214に知らせる。
【0146】
ステップ724において、ディスパッチャ214は、この認証エンジン602から送られてきた認証の結果を使用して、ブラウザのリクエストが認証されたかどうかを判定する。ブラウザのリクエストが認証されなかった場合には、ディスパッチャ214はブラウザのリクエストが認証されずカートリッジのアクセスが拒絶されたことを、ブラウザ202に通知する。その後、制御はステップ702に戻って、別のブラウザのリクエストを受信する。
【0147】
これに対し、ブラウザのリクエストが認証された場合には、ディスパッチャ214はそのブラウザのリクエストを適切なカートリッジにディスパッチする。その後、制御はステップ702に戻って、別のブラウザのリクエストを受取る。
【0148】
負荷の最適配分
認証エンジンおよび認証ホストが実行を開始するとき、それらはまず、オブジェクトリクエストブローカ282が認証サーバの負荷の最適配分を行なうことができるようにする特定の情報をメタデータとしてウェブアプリケーションサーバ280に格納することによって、ウェブアプリケーションサーバ280に登録する。したがって、一実施例に従えば、認証エンジンは、実行を開始するときに、自身を認証エンジンと識別するその名前および関連のIDをメタデータとしてウェブアプリケーションサーバ280に格納することで、ウェブアプリケーションサーバ280に登録する。認証エンジンに関連づけられたメタデータは、オブジェクトリクエストブローカ282が、システムの負荷の最適配分を行なうのに使用する。
【0149】
認証エンジンに加えて、認証ホストも、実行を開始するときに、自身を認証ホストと識別するその名前および関連のIDをメタデータとしてウェブアプリケーションサーバ280に格納することで、ウェブアプリケーションサーバ280に登録する。さらに、認証ホストに関連づけられる1または複数のプロバイダを識別するメタデータも格納される。
【0150】
図8は、本発明の一実施例に従った、ステートレスなウェブ環境において拡張可能な認証機構の負荷の最適配分を行なうことのできる、システム800のブロック図である。図8は図6と同様であるので、同じ構成要素には同じ参照番号が付されている。
【0151】
図8に示すように、認証サーバ828は、オブジェクトリクエストブローカ282に接続されてそれと通信する、複数の認証エンジン802、804および806を含む。認証サーバ828はまた、オブジェクトリクエストブローカ282にさらに接続されかつそれと通信する、複数の認証ホスト808、814および822を含む。図示されるように、認証ホスト808、814および822は各々、複数のプロバイダと関連づけられている。
【0152】
ディスパッチャは、認証エンジンと通信したいときには、オブジェクトリクエストブローカ282から認証エンジンを割当ててもらうよう要求する。特定の認証エンジンを識別する際に、オブジェクトリクエストブローカ282は、負荷の最適配分方式を使用して認証エンジンの作業量の最適配分を試みる。その後、オブジェクトリクエストブローカ282は、使用されるべき特定の認証エンジンを識別し、その特定の認証エンジンへと、オブジェクトリクエストブローカ282を介して認証のリクエストを送信する。
【0153】
認証エンジンは、認証のリクエストを受取ると、その認証リクエストを解析して1または複数のプロバイダのリクエストとする。その後、認証エンジンは、オブジェクトリクエストブローカ282に対して、それら1または複数のプロバイダのリクエストを処理することのできるプロバイダに関連する1または複数の認証ホストを識別するように要求する。この1または複数の認証ホストを識別する際にも、オブジェクトリクエストブローカ282はやはり負荷の最適配分方式を使用して、認証ホストの作業量の最適配分を試みる。オブジェクトリクエストブローカ282は、これら1または複数の認証ホストを識別した後に、1または複数のプロバイダのリクエストをオブジェクトリクエストブローカ282を介して1または複数の認証ホストへと送る。その後、これら1または複数の認証ホストが、それらプロバイダのリクエストを適切なプロバイダへと分配する。
【0154】
プロバイダは、プロバイダのリクエストの認証を完了すると、関連する認証ホストおよびオブジェクトリクエストブローカ282を介して認証エンジンへと応答メッセージを送り返す。1または複数のプロバイダから応答メッセージを受取ると、認証エンジンは、戻された応答メッセージに対して必要な論理演算を行なう。その後、認証エンジンは、ブラウザのリクエストが適切なカートリッジへと送られるべきか、それとも、送信側のブラウザに対してアクセスが拒絶されたことを知らせるべきかを、ディスパッチャに通知する。
【0155】
カートリッジの認証
ディスパッチャに加えて、カートリッジもまた、ブラウザのリクエストを認証する能力を有する。本発明の一実施例に従えば、ディスパッチャが認証が不要である(すなわち、ブラウザのリクエストURLに関連づけられたプロテクトストリングが存在しない)と判定すると、ディスパッチャはそのブラウザのリクエストを関連するカートリッジにディスパッチして、カートリッジ自身の認証ルーチンを起動する。カートリッジにおける認証ルーチンのロジックが、認証ルーチンの起動に対してカートリッジがどのように応答するのかを判定する。カートリッジの使用が制限されていなければ、カートリッジの認証メソッドは単に、「TRUE」を戻すであろう。
【0156】
これに対し、認証が必要とされる場合には、認証メソッドは、ブラウザのリクエストを認証するために認証サーバと通信することができる。たとえば、この認証メソッドは、上述のディスパッチャと同じ態様で、カートリッジが認証サーバ828と相互作用するようにすることもできる。一実施例においては、ブラウザのリクエスト自体を認証するために、各カートリッジは、ディスパッチャが使用したであろうのと同じ認証リクエストフォーマット(すなわち、プロテクトストリングフォーマット)を使用する。しかし、カートリッジには関連したプロテクトストリングが存在しないため、カートリッジ自身が、どの認証パラメータを使用すべきかを判定する。
【0157】
カートリッジが認証を行なうことを決めた場合、カートリッジはオブジェクトリクエストブローカ282から認証エンジンを割当ててもらうように要求する。特定の認証エンジンを識別するのに、オブジェクトリクエストブローカ282は負荷の最適配分方式を使用して、認証エンジンの作業量の最適配分を試みる。その後、オブジェクトリクエストブローカ282は使用すべき特定の認証エンジンを識別して、カートリッジに通知する。するとカートリッジは、認証リクエストをその特定の認証エンジンへと、オブジェクトリクエストブローカ282を介して送信する。
【0158】
認証エンジンは、認証リクエストを受取ると、その認証リクエストを解析して1または複数のプロバイダのリクエストとする。その後、認証エンジンはオブジェクトリクエストブローカ282に対して、それら1または複数のプロバイダのリクエストを処理することのできるプロバイダに関連づけられた1または複数の認証ホストを識別するように要求する。この1または複数の認証ホストを識別する際に、オブジェクトリクエストブローカ282はやはり負荷の最適配分方式を使用して、それら認証ホストの作業量の最適配分を試みる。オブジェクトリクエストブローカ282は、1または複数の認証ホストを識別して、認証エンジンに通知する。すると、認証エンジンは、1または複数のプロバイダのリクエストをオブジェクトリクエストブローカ282を介してそれら1または複数の認証ホストに送信する。1または複数の認証ホストはその後、それらプロバイダのリクエストを適切なプロバイダへと分配する。
【0159】
プロバイダは、プロバイダのリクエストの認証を完了すると、関連する認証ホストおよびオブジェクトリクエストブローカ282を介して認証エンジンへと応答メッセージを送り返す。1または複数のプロバイダから応答メッセージを受取ると、認証エンジンはそれら戻された応答メッセージに対して必要な論理演算を行なう。その後、認証エンジンはカートリッジに対して、ブラウザのリクエストがカートリッジにアクセスすることを許可されるべきかどうかを通知する。
【0160】
本発明は、クライアントのリクエストを認証するための、非常にスケーラブルで柔軟性がありかつ拡張可能な機構を提供する。多くの利点はこの開示から当業者には明らかであろうが、ここで、いくつかの特定の利点に注目されたい。
【0161】
第1に、認証サーバが分散型であることに留意されたい。基礎をなす通信機構としてオブジェクトリクエストブローカが使用されるので、また、このオブジェクトリクエストブローカがマシンとは独立した通信機構であるので、認証エンジンおよび認証ホスト等の種々の構成要素を異なるマシンのどのような組合せ上にも設けることができる(すなわち分散することができる)。それらマシンは、その構成にかかわらず、オブジェクトリクエストブローカを介して互いに通信することができるであろう。本発明のこの分散型という性質によって、能力の追加が最も必要とされる場所に、戦略的にマシンを追加することができる。たとえば、認証能力の増強が必要とされる場合には、追加の認証エンジンを実行するようマシンを追加することができる。マシンを追加することによってシステムを自由に拡張することができることで、本発明は非常にスケーラブルとなっている。
【0162】
第2に、本発明は負荷の最適配分によって効率を改善している。上述のように複数の認証エンジンおよび認証ホストの間で負荷を最適配分することによって、本発明はボトルネックの可能性を最小に抑え、かつ、利用可能なリソースを最大限に効率的に使用することができる。
【0163】
第3に、本発明は、配置時にシステムの実装を変更することができる。前述のように、各プロバイダは好ましくはDLLの形をとり、ランタイムにシステムへとリンク・インすることができる。プロバイダのモジュールがランタイムにリンク・インされるので、配置時において(1)あるプロバイダを別のプロバイダに置換すること、および(2)システムに別のプロバイダを付加することができる。認証サーバのアーキテクチャによって、これらすべては他のモジュール(たとえば認証エンジンおよび認証ホスト)をいずれも変更または再コンパイルすることなく行なうことができる。プロバイダのその置換/付加を反映するようにメタデータを更新するだけでよい。この局面によって、本発明は非常に柔軟性がありかつ容易に拡張可能となっている。さらに、特定のクエリーに関連する認証方式を、配置時に容易に変更することができることにも留意されたい。このためには、そのクエリーに関連づけられたプロテクトストリングを変更するだけでよい。したがって、たとえば、現時点においてBASICおよびIP認証方式を要求しているクエリーを、プロテクトストリングを単に
URL1 CARTRIDGE_238 BASIC(GROUP1) AND IP(IP_LIST)
から
URL1 CARTRIDGE_238 IP(IP_LIST)
へと変更するだけで、IP方式のみを要求するように変更することができる。
【0164】
したがって、配置時におけるサーバの実装の変更は極めて容易である。
第4に、本発明が、カートリッジからのリクエストを認証する作業の、すべてではないにせよその大半を取除くことができることに留意されたい。各カートリッジに対する認証のプロセスを認証サーバが実現するようにしていることによって、カートリッジがリクエストを認証する必要が軽減される。
【0165】
以上のように、本発明は、クライアントのリクエストを認証するための非常に有効でありかつ有益な機構を提供する。
【0166】
以上、本明細書において、本発明を特定の実施例に関連して説明した。しかし、本発明のより広い範囲から離れることなく、それら実施例に対して種々の変形および変更を行なうことができることは明らかであろう。したがって、本明細書および添付の図面は、限定のためのものではなく例示のためのものであると理解されたい。
【図面の簡単な説明】
【図1】 本発明の一実施例が実装され得るコンピュータシステムのブロック図である。
【図2】 本発明の一実施例に従った、分散アプリケーションサーバのブロック図である。
【図3A】 本発明の一実施例に従った、ブラウザリクエストを処理するためのステップを示すフローチャートの一部である。
【図3B】 本発明の一実施例に従った、ブラウザリクエストを処理するためのステップを示すフローチャートの別の部分である。
【図4】 本発明の一実施例に従った、ディスパッチャが維持する情報を含む表のブロック図である。
【図5】 本発明の一実施例に従った、リソースマネージャが維持する情報を含む表のブロック図である。
【図6】 本発明の一実施例に従った、ステートレスウェブ環境において拡張可能な認証機構を提供する分散型のアプリケーションサーバのブロック図である。
【図7A】 本発明の一実施例に従った、ブラウザのリクエストを認証するためのステップを示すフローチャートの一部である。
【図7B】 本発明の一実施例に従った、ブラウザのリクエストを認証するためのステップを示すフローチャートの別の部分である。
【図8】 本発明の一実施例に従った、ステートレスウェブ環境において拡張可能な認証機構の負荷の最適配分を行なうことのできる分散型のアプリケーションサーバのブロック図である。

Claims (34)

  1. オペレーションを認証するかどうかを判定するための方法であって、該オペレーションは、第1のマシン上で実行するカートリッジ(230)によって行なわれるべきオペレーションであり、該方法は、第2のマシン上でディスパッチャ(214)を実行するステップと、第3のマシン上で認証サーバ(252)の少なくとも1つの構成要素を実行するステップとを含み、
    前記方法は、
    前記第2のマシンとは異なるマシン上で実行するクライアントから前記ディスパッチャ(214)にリクエストを受取るステップと、
    第1のメッセージを、前記クライアントおよび前記カートリッジに対してトランスペアレントに、ディスパッチャ(214)から認証サーバ(252)に送信するステップとを含み、該第1のメッセージはカートリッジ(230)に関連付けられた許可情報を含み、さらに、
    第2のメッセージを、前記クライアントおよび前記カートリッジに対してトランスペアレントに、認証サーバ(252)からディスパッチャ(214)に送信するステップを含み、該第2のメッセージはオペレーションがカートリッジ(230)によって行なわれるよう許可されるかどうかを示し、さらに、
    オペレーションがカートリッジ(230)によって行なわれるよう許可された場合には、第3のメッセージをディスパッチャ(214)からカートリッジ(230)に送信して、該カートリッジ(230)に該オペレーションを行なわせるようにするステップを含み、
    該第1のマシン、第2のマシンおよび第3のマシンのうち、少なくとも2つが別々のマシンであることによって特徴づけられ
    第1のメッセージを認証エンジン(602)に送信するステップと、
    第1のメッセージを解析して1または複数の第4のメッセージとするステップと、
    1または複数の第4のメッセージを認証ホスト(604)に送信するステップとをさらに含み、該認証ホスト(604)は1または複数のプロバイダ(606,608,610,612)に関連付けられ、さらに、
    1または複数の第4のメッセージの各々を1または複数のプロバイダ(606,608,610,612)のうちの1つに送信するステップを含み、該1または複数のプロバイ
    ダ(606,608,610,612)の各々は、それが受取る1または複数の第4のメッセージの各々に対して認証を行なう、方法。
  2. ブラウザ(202)がブラウザのリクエストをウェブリスナ(210)に送信するステップと、
    ウェブリスナ(210)がブラウザのリクエストをディスパッチャ(214)に渡すステップとをさらに含み、
    該ディスパッチャ(214)はウェブリスナ(210)からブラウザのリクエストを受信したのに応答して第1のメッセージを送信する、請求項1に記載の方法。
  3. 第1のマシンと第2のマシンとが別々のマシンであって、
    第1のメッセージをディスパッチャ(214)から認証サーバ(252)に送信するステップは、第1のメッセージをオブジェクトリクエストブローカ(282)を介してディスパッチャ(214)から認証サーバ(252)に送信することによって行なわれ、
    第2のメッセージを認証サーバ(252)からディスパッチャ(214)に送信するステップは、第2のメッセージをオブジェクトリクエストブローカ(282)を介して認証サーバ(252)からディスパッチャ(214)に送信することによって行なわれる、請求項1に記載の方法。
  4. 第1のメッセージをディスパッチャ(214)から認証サーバ(252)に送信するステップは、認証サーバ(252)が第1のメッセージに関連する情報に基づいて、オペレーションがカートリッジに(230)よって行なわれるよう許可されるべきであるかどうかを判定するステップを含む、請求項1に記載の方法。
  5. 第3のマシン上で認証サーバ(252)の少なくとも1つの構成要素を実行するステップは、
    第3のマシン上で認証エンジン(602)を実行するステップと、
    第4のマシン上で認証ホスト(604)を実行するステップとを含み、
    第3のマシンと第4のマシンとは別々のマシンである、請求項1に記載の方法。
  6. 1または複数の第4のメッセージに対して行なわれる認証に基づいて、1または複数の応答メッセージを認証エンジン(602)に送信するステップと、
    1または複数の応答メッセージに基づいて、オペレーションがカートリッジ(230)によって行なわれるよう許可されるべきかどうかを判定するステップとをさらに含む、請求項に記載の方法。
  7. 第1のメッセージをディスパッチャ(214)から認証エンジン(602)に送信するステップは、第1のメッセージをオブジェクトリクエストブローカ(282)を介してディスパッチャ(214)から認証エンジン(602)に送信するステップを含み、
    1または複数の第4のメッセージを認証ホスト(604)に送信するステップは、1または複数の第4のメッセージをオブジェクトリクエストブローカ(282)を介して認証ホスト(604)に送信するステップを含む、請求項に記載の方法。
  8. 複数の認証エンジンを実行するステップと、
    複数の認証ホストを実行するステップと、
    第1のメッセージをディスパッチャ(214)から受取るべき特定の認証エンジン(602)を選択するステップと、
    1または複数の第4のメッセージを受取るべき1または複数の認証ホストを選択するステップとをさらに含む、請求項に記載の方法。
  9. 第1のメッセージをディスパッチャ(214)から受取るべき特定の認証エンジン(602)を選択するステップは、オブジェクトリクエストブローカ(282)が第1のメッセージを受取る特定の認証エンジン(602)を選択するステップを含み、
    1または複数の第4のメッセージを受取るべき1または複数の認証ホストを選択するステップは、オブジェクトリクエストブローカ(282)が1または複数の第4のメッセージを受取る1または複数の認証ホストを選択するステップを含む、請求項に記載の方法
  10. 特定の認証エンジン(602)を選択するステップは、複数の認証エンジンの作業量に基づいて特定の認証エンジン(602)を選択するステップを含み、
    1または複数の認証ホストを選択するステップは、複数の認証ホストの作業量に基づいて1または複数の認証ホストを選択するステップを含む、請求項に記載の方法。
  11. プロバイダ(606,608,610,612)を認証ホスト(604)と動的に関連付けたり分離したりするステップをさらに含む、請求項に記載の方法。
  12. 認証サーバ(252)が2つ以上のプロバイダから受取られた結果を組合せるための論理演算を行なうステップをさらに含む、請求項に記載の方法。
  13. 第1のメッセージを送信するのに先立って、オペレーションを認証するのに複数のプロバイダ(606,608,610,612)のうちどのプロバイダが使用されるべきかをディスパッチャ(214)に判定させるステップをさらに含む、請求項1に記載の方法。
  14. 第1のメッセージをディスパッチャ(214)から認証サーバ(252)に送信するステップは、ディスパッチャ(214)がプロテクトストリングに基づいて、第1のメッセージを認証サーバ(252)に送信するべきかどうかを判定するステップを含む、請求項1に記載の方法。
  15. 1または複数のプロバイダ(606,608,610,612)は、各々が明確な判断基準の組に基づいて認証を行なう複数のプロバイダを表わす、請求項に記載の方法。
  16. オペレーションを認証するかどうかを判定するためのプログラムを記録したコンピュータ可読媒体であって、該オペレーションは、第1のコンピュータ上で実行するカートリッジ(230)によって行なわれるべきオペレーションであり、
    前記プログラムは、第2のコンピュータにディスパッチャ(214)を実行させ、第3のコンピュータに認証サーバ(252)の少なくとも1つの構成要素を実行させ、
    前記プログラムは、前記第2のコンピュータに、
    前記第2のコンピュータとは異なるコンピュータ上で実行するクライアントから前記ディスパッチャ(214)にリクエストを受取るステップと、
    第1のメッセージを、前記クライアントおよび前記カートリッジに対してトランスペアレントに、ディスパッチャ(214)から認証サーバ(252)に送信するステップとを実行させ、該第1のメッセージはカートリッジ(230)に関連づけられた許可情報を含み、さらに、
    前記プログラムは、さらに前記第3のコンピュータに、
    第2のメッセージを、前記クライアントおよび前記カートリッジに対してトランスペアレントに、認証サーバ(252)からディスパッチャ(214)に送信するステップを実行させ、該第2のメッセージはオペレーションがカートリッジ(230)によって行なわれるよう許可されるべきかどうかを示し、さらに、
    前記プログラムは、さらに前記第2のコンピュータに、
    オペレーションがカートリッジ(230)によって行なわれるよう許可された場合には、第3のメッセージをディスパッチャ(214)からカートリッジ(230)に送信して、カートリッジ(230)に該オペレーションを行なわせるようにするステップを実行させ、
    該第1のコンピュータ第2のコンピュータおよび第3のコンピュータのうち、少なくとも2つが別々のコンピュータであり
    前記プログラムは、さらに、1または複数のコンピュータに、
    第1のメッセージを認証エンジン(602)に送信するステップと
    第1のメッセージを解析して1または複数の第4のメッセージとするステップと、
    1または複数の第4のメッセージを認証ホスト(604)に送信するステップとを実行させ、該認証ホスト(604)は1または複数のプロバイダ(606,608,610,
    612)に関連付けられ、さらに、
    1または複数の第4のメッセージの各々を1または複数のプロバイダ(606,608,610,612)のうちの1つに送信するステップを実行させ、該1または複数のプロバイダ(606,608,610,612)はそれが受取る1または複数の第4のメッセージの各々に対して認証を行なうよう構成される、コンピュータ可読媒体。
  17. 前記プログラムは、さらに、1または複数のコンピュータに、
    ブラウザ(202)がブラウザのリクエストをウェブリスナ(210)に送信するステップと、
    ウェブリスナ(210)がブラウザのリクエストをディスパッチャ(214)に渡すステップとを実行させ、
    該ディスパッチャ(214)は、ウェブリスナ(210)からブラウザのリクエストを受取ったのに応答して第1のメッセージを送信する、請求項16に記載のコンピュータ可読媒体。
  18. 第1のコンピュータ第2のコンピュータとが別々のコンピュータであって、
    第1のメッセージをディスパッチャ(214)から認証サーバ(252)に送信するステップは、第1のメッセージをオブジェクトリクエストブローカ(282)を介してディスパッチャ(214)から認証サーバ(252)に送信することによって行なわれ、
    第2のメッセージを認証サーバ(252)からディスパッチャ(214)に送信するステップは、第2のメッセージをオブジェクトリクエストブローカ(282)を介して認証サーバ(252)からディスパッチャ(214)に送信することによって行なわれる、請求項16に記載のコンピュータ可読媒体。
  19. 第1のメッセージをディスパッチャ(214)から認証サーバ(252)に送信するステップは、認証サーバ(252)が第1のメッセージに関連する情報に基づいて、オペレーションがカートリッジ(230)によって行なわれるように許可されるべきかどうかを判定するステップを含む、請求項16に記載のコンピュータ可読媒体。
  20. 前記第3のコンピュータで実行される前記認証サーバ(252)の少なくとも1つの構成要素は、認証エンジン(602)であり、
    前記プログラムは、さらに、第4のコンピュータ認証サーバ(252)の別の構成要素である認証ホスト(604)を実行させ、
    第3のコンピュータ第4のコンピュータとは別々のコンピュータである、請求項16に記載のコンピュータ可読媒体。
  21. 前記プログラムは、さらに、1または複数のコンピュータに、
    1または複数の第4のメッセージに対して行なわれる認証に基づいて、1または複数の応答メッセージを認証エンジン(602)に送信するステップと、
    1または複数の応答メッセージに基づいて、オペレーションがカートリッジ(230)によって行なわれるよう許可されるべきかどうかを判定するステップとを実行させる、請求項16に記載のコンピュータ可読媒体。
  22. 第1のメッセージをディスパッチャ(214)から認証エンジン(602)に送信するステップは、第1のメッセージをオブジェクトリクエストブローカ(282)を介してディスパッチャ(214)から認証エンジン(602)に送信するステップを含み、
    1または複数の第4のメッセージを認証ホスト(604)に送信するステップは、1または複数の第4のメッセージをオブジェクトリクエストブローカ(282)を介して認証ホスト(604)に送信するステップを含む、請求項16に記載のコンピュータ可読媒体。
  23. 前記プログラムは、さらに、1または複数のコンピュータに、
    複数の認証エンジンを実行するステップと、
    複数の認証ホストを実行するステップと、
    ディスパッチャ(214)から第1のメッセージを受取るべき特定の認証エンジン(602)を選択するステップと、
    1または複数の第4のメッセージを受取るべき1または複数の認証ホストを選択するステップとを実行させる、請求項22に記載のコンピュータ可読媒体。
  24. ディスパッチャ(214)から第1のメッセージを受取るための特定の認証エンジン(602)を選択するステップは、オブジェクトリクエストブローカ(282)が第1のメッセージを受取る特定の認証エンジン(602)を選択するステップを含み、
    1または複数の第4のメッセージを受取るべき1または複数の認証ホストを選択するステップは、オブジェクトリクエストブローカ(282)が1または複数の第4のメッセージを受取る1または複数の認証ホストを選択するステップを含む、請求項23に記載のコンピュータ可読媒体。
  25. 特定の認証エンジン(602)を選択するステップは、複数の認証エンジンの作業量に基づいて特定の認証エンジン(602)を選択するステップを含み、
    1または複数の認証ホストを選択するステップは、複数の認証ホストの作業量に基づいて1または複数の認証ホストを選択するステップを含む、請求項23に記載のコンピュータ可読媒体。
  26. 前記プログラムは、さらに、1または複数のコンピュータに、
    プロバイダ(606,608,610,612)を認証ホスト(604)と動的に関連付けたり分離したりするステップを実行させる、請求項16に記載のコンピュータ可読媒体。
  27. 前記プログラムは、さらに、1または複数のコンピュータに、
    認証サーバ(252)が2つ以上のプロバイダから受取られた結果を組合せる論理演算を行なうステップ実行させる、請求項21に記載のコンピュータ可読媒体。
  28. 前記プログラムは、さらに、1または複数のコンピュータに、
    第1のメッセージの送信に先立って、オペレーションを認証するのに複数のプロバイダ(606,608,610,612)のうちどのプロバイダが使用されるべきかをディスパッチャ(214)に判定させるステップを実行させる、請求項16に記載のコンピュータ可読媒体。
  29. 第1のメッセージをディスパッチャ(214)から認証サーバ(252)に送信するステップは、ディスパッチャ(214)がプロテクトストリングに基づいて、第1のメッセージを認証サーバ(252)に送るべきかどうかを判定するステップを含む、請求項16に記載のコンピュータ可読媒体。
  30. 1または複数のプロバイダ(606,608,610,612)は、各々が明確な判断基準の組に基づいて認証を行なう複数のプロバイダを表わす、請求項16に記載のコンピュータ可読媒体。
  31. ブラウザのリクエストが第1のマシン上で実行するカートリッジ(230)上で実行するよう許可されるかどうかを判定するためのシステムであって、
    前記システムは、
    複数のウェブリスナ(210,216,222)に連結された複数のディスパッチャ(214,220,226)を含み、前記複数のディスパッチャ(214,220,226)の各ディスパッチャは、前記複数のウェブリスナ(210,216,222)のうち対応するウェブリスナから、前記対応のウェブリスナによって受取られたブラウザのリクエストを受取り、前記対応のウェブリスナによって受取られたブラウザのリクエストは、前記対応のウェブリスナとは異なるマシン上で実行するクライアントから受取られ、さらに、
    マシン間通信機構を介して前記複数のディスパッチャ(214,220,226)に連結された仮想パスマネージャ(250)を含み、前記仮想パスマネージャ(250)は、特定のブラウザのリクエストが認証を必要とするかどうかを前記ディスパッチャ(214,220,226)に対して示し、
    前記複数のディスパッチャ(214,220,226)は複数の認証サーバに連結され、前記複数のディスパッチャ(214,220,226)は複数のメッセージを、前記クライアントおよび前記カートリッジに対してトランスペアレントに、前記マシン間通信機構を介して複数の認証サーバに送信するよう構成され、
    前記複数の認証サーバは前記複数のディスパッチャ(214,220,226)から送信された前記複数のメッセージを認証することができ、該複数の認証サーバは、該特定のブラウザのリクエストがカートリッジ(230)上で実行するよう許可されるべきかどうかを、前記クライアントおよび前記カートリッジに対してトランスペアレントに、該複数のディスパッチャ(214,220,226)に対して知らせる、システム。
  32. 該マシン間の通信機構は、オブジェクトリクエストブローカ(282)である、請求項31に記載のシステム。
  33. 該複数の認証サーバは、複数の認証エンジン(802,804,806)および複数の認証ホスト(808,814,822)からなる、請求項31に記載のシステム。
  34. 該複数の認証ホストは、複数のプロバイダ(606,608,610,612)に関連付けられている、請求項33に記載のシステム。
JP2000519525A 1997-10-31 1998-10-29 ウェブアプリケーションサーバにおいて拡張可能な認証機構を実現するための方法および装置 Expired - Lifetime JP3853593B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/961,796 1997-10-31
US08/961,796 US6446204B1 (en) 1997-10-31 1997-10-31 Method and apparatus for implementing an extensible authentication mechanism in a web application server
PCT/US1998/022832 WO1999023786A2 (en) 1997-10-31 1998-10-29 Method and apparatus for implementing an extensible authentication mechanism in a web application server

Publications (2)

Publication Number Publication Date
JP2001522115A JP2001522115A (ja) 2001-11-13
JP3853593B2 true JP3853593B2 (ja) 2006-12-06

Family

ID=25505024

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000519525A Expired - Lifetime JP3853593B2 (ja) 1997-10-31 1998-10-29 ウェブアプリケーションサーバにおいて拡張可能な認証機構を実現するための方法および装置

Country Status (8)

Country Link
US (1) US6446204B1 (ja)
EP (1) EP1027795B9 (ja)
JP (1) JP3853593B2 (ja)
AU (1) AU750435B2 (ja)
CA (1) CA2308797C (ja)
DE (1) DE69821020T2 (ja)
HK (1) HK1028687A1 (ja)
WO (1) WO1999023786A2 (ja)

Families Citing this family (65)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6427238B1 (en) * 1998-05-29 2002-07-30 Opentv, Inc. Module manager for interactive television system
DE19910345A1 (de) * 1999-03-09 2000-09-21 Siemens Ag Verfahren zur Nachrichtenübertragung zwischen einer einem ersten Prozeß zugewiesenen Clientinstanz und wenigstens einer mindestens einem weiteren Prozeß zugewiesenen Serverinstanz innerhalb eines verteilten Systems
US7391865B2 (en) 1999-09-20 2008-06-24 Security First Corporation Secure data parser method and system
EP1218813A1 (en) 1999-09-20 2002-07-03 Ethentica, Inc. Context sensitive dynamic authentication in a cryptographic system
US7490065B1 (en) 1999-10-18 2009-02-10 Stamps.Com Cryptographic module for secure processing of value-bearing items
AU1966601A (en) * 1999-10-18 2001-04-30 Stamps.Com Method and apparatus for on-line value-bearing item system
US6970641B1 (en) * 2000-09-15 2005-11-29 Opentv, Inc. Playback of interactive programs
US7363361B2 (en) * 2000-08-18 2008-04-22 Akamai Technologies, Inc. Secure content delivery system
WO2001061652A2 (en) 2000-02-16 2001-08-23 Stamps.Com Secure on-line ticketing
US7444368B1 (en) * 2000-02-29 2008-10-28 Microsoft Corporation Methods and systems for selecting methodology for authenticating computer systems on a per computer system or per user basis
US20050044405A1 (en) * 2000-05-11 2005-02-24 Spraggs Lynn D. System and method of securing a computer from unauthorized access
EP1311946B1 (en) * 2000-07-27 2017-12-27 Oracle International Corporation System and method for concentration and load-balancing of requests
US7941669B2 (en) * 2001-01-03 2011-05-10 American Express Travel Related Services Company, Inc. Method and apparatus for enabling a user to select an authentication method
FR2820533B1 (fr) 2001-02-07 2003-04-18 Sagem Systeme d'identification ou d'authentification biometrique
US7437437B2 (en) * 2001-04-25 2008-10-14 Hewlett-Packard Development Company, L.P. Access authentication for distributed networks
US7274659B2 (en) 2001-07-27 2007-09-25 Western Digital Ventures, Inc. Providing streaming media data
US7320075B2 (en) * 2001-11-20 2008-01-15 Safenet, Inc. Software protection method utilizing hidden application code in a protection dynamic link library object
US7107615B2 (en) * 2002-01-30 2006-09-12 Hewlett-Packard Development Company, L.P. Parameter verification in an authentication system and method
US7219231B2 (en) * 2002-01-30 2007-05-15 Hewlett-Packard Development Company, L.P. Extensible authentication system and method
US7444410B1 (en) 2002-02-15 2008-10-28 Oracle International Corporation Application platform execution environment
US7194473B1 (en) 2002-02-15 2007-03-20 Oracle International Corporation Application platform development environment
US7191467B1 (en) * 2002-03-15 2007-03-13 Microsoft Corporation Method and system of integrating third party authentication into internet browser code
US7614077B2 (en) * 2002-04-10 2009-11-03 International Business Machines Corporation Persistent access control of protected content
US20040024771A1 (en) * 2002-08-01 2004-02-05 Oracle International Corporation Buffered message queue architecture for database management systems with transactional enqueue support
US7188359B2 (en) * 2002-12-18 2007-03-06 America Online, Inc. Optimizing authentication service availability and responsiveness via client-side routing
US7860957B1 (en) * 2002-12-20 2010-12-28 Cisco Technology, Inc. System and method for managing network services in a distributed system
US6888431B2 (en) * 2003-01-30 2005-05-03 Square D Company Remotely operated circuit breaker for emergency lighting circuits
US7685300B2 (en) * 2003-09-04 2010-03-23 International Business Machines Corporation Method for access by server-side components using unsupported communication protocols through passthrough mechanism
US9614772B1 (en) 2003-10-20 2017-04-04 F5 Networks, Inc. System and method for directing network traffic in tunneling applications
US20050198643A1 (en) * 2004-02-17 2005-09-08 Lachelt David J. Journaling proxy in activation solution
US7523145B2 (en) * 2004-04-22 2009-04-21 Opentv, Inc. System for managing data in a distributed computing system
US7818563B1 (en) * 2004-06-04 2010-10-19 Advanced Micro Devices, Inc. Method to maximize hardware utilization in flow-thru IPsec processing
US8499153B2 (en) * 2004-06-24 2013-07-30 Nokia Corporation System and method of authenticating a user to a service provider
US7428754B2 (en) * 2004-08-17 2008-09-23 The Mitre Corporation System for secure computing using defense-in-depth architecture
EP1825412A1 (en) 2004-10-25 2007-08-29 Rick L. Orsini Secure data parser method and system
US7779418B2 (en) * 2004-12-30 2010-08-17 Oracle International Corporation Publisher flow control and bounded guaranteed delivery for message queues
US7788490B2 (en) * 2005-04-01 2010-08-31 Lexmark International, Inc. Methods for authenticating an identity of an article in electrical communication with a verifier system
US8196150B2 (en) * 2005-10-07 2012-06-05 Oracle International Corporation Event locality using queue services
CN105978683A (zh) 2005-11-18 2016-09-28 安全第公司 安全数据解析方法和系统
US20070258459A1 (en) * 2006-05-02 2007-11-08 Harris Corporation Method and system for QOS by proxy
US8516153B2 (en) 2006-06-16 2013-08-20 Harris Corporation Method and system for network-independent QoS
US7990860B2 (en) 2006-06-16 2011-08-02 Harris Corporation Method and system for rule-based sequencing for QoS
US20070291767A1 (en) * 2006-06-16 2007-12-20 Harris Corporation Systems and methods for a protocol transformation gateway for quality of service
US8064464B2 (en) 2006-06-16 2011-11-22 Harris Corporation Method and system for inbound content-based QoS
US20070291765A1 (en) * 2006-06-20 2007-12-20 Harris Corporation Systems and methods for dynamic mode-driven link management
US8730981B2 (en) 2006-06-20 2014-05-20 Harris Corporation Method and system for compression based quality of service
US20100238801A1 (en) * 2006-07-31 2010-09-23 Smith Donald L Method and system for stale data detection based quality of service
US8300653B2 (en) 2006-07-31 2012-10-30 Harris Corporation Systems and methods for assured communications with quality of service
US20080025318A1 (en) * 2006-07-31 2008-01-31 Harris Corporation Systems and methods for dynamically customizable quality of service on the edge of a network
US8904080B2 (en) 2006-12-05 2014-12-02 Security First Corp. Tape backup method
US9779556B1 (en) 2006-12-27 2017-10-03 Stamps.Com Inc. System and method for identifying and preventing on-line fraud
US20080228922A1 (en) * 2007-03-14 2008-09-18 Taiwan Semiconductor Manufacturing Company, Ltd. System and Method for Providing Client Awareness in High-Availability Application Architecture
CN102932136B (zh) 2007-09-14 2017-05-17 安全第一公司 用于管理加密密钥的系统和方法
EP2106642A4 (en) 2008-01-07 2015-12-02 Security First Corp SYSTEMS AND METHODS FOR SECURING DATA USING A KEY OR MULTI-FACTOR DISPERSION
CN103281190B (zh) 2008-02-22 2018-03-09 安全第一公司 安全工作组管理和通信的系统和方法
US9832069B1 (en) 2008-05-30 2017-11-28 F5 Networks, Inc. Persistence based on server response in an IP multimedia subsystem (IMS)
CN102428686A (zh) 2009-05-19 2012-04-25 安全第一公司 用于安全保护云中的数据的系统和方法
EP2504973B1 (en) 2009-11-25 2016-11-16 Security First Corp. Systems and methods for securing data in motion
JP2013524352A (ja) 2010-03-31 2013-06-17 セキュリティー ファースト コーポレイション 移動中のデータをセキュア化するためのシステムおよび方法
US8824492B2 (en) 2010-05-28 2014-09-02 Drc Computer Corporation Accelerator system for remote data storage
US8392452B2 (en) * 2010-09-03 2013-03-05 Hulu Llc Method and apparatus for callback supplementation of media program metadata
CN102801714B (zh) * 2012-07-26 2015-03-11 杭州电子科技大学 旁路式解析和还原tns协议中sql命令的方法
US8925050B2 (en) * 2012-10-29 2014-12-30 Oracle International Corporation Communication between authentication plug-ins of a single-point authentication manager and client systems
US20140122437A1 (en) * 2012-10-31 2014-05-01 Kaseya International Limited Dynamically provisioned storage server operating on a data communications network
EP3206357A1 (de) 2016-02-09 2017-08-16 Secunet Security Networks Aktiengesellschaft Einsatz eines nicht lokalen kryptographie-verfahrens nach authentifizierung

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69329577T2 (de) * 1992-07-01 2001-05-31 Ericsson Telefon Ab L M Verfahren und system für implementierung-unabhängige schnittstellenspezifikation
US5649099A (en) 1993-06-04 1997-07-15 Xerox Corporation Method for delegating access rights through executable access control program without delegating access rights not in a specification to any intermediary nor comprising server security
CA2138302C (en) * 1994-12-15 1999-05-25 Michael S. Fortinsky Provision of secure access to external resources from a distributed computing environment
US5907675A (en) 1995-03-22 1999-05-25 Sun Microsystems, Inc. Methods and apparatus for managing deactivation and shutdown of a server
US5812776A (en) * 1995-06-07 1998-09-22 Open Market, Inc. Method of providing internet pages by mapping telephone number provided by client to URL and returning the same in a redirect command by server
AR003524A1 (es) * 1995-09-08 1998-08-05 Cyber Sign Japan Inc Un servidor de verificacion para ser utilizado en la autenticacion de redes de computadoras.
US5903732A (en) * 1996-07-03 1999-05-11 Hewlett-Packard Company Trusted gateway agent for web server programs

Also Published As

Publication number Publication date
AU1203599A (en) 1999-05-24
DE69821020T2 (de) 2004-10-21
JP2001522115A (ja) 2001-11-13
EP1027795B1 (en) 2004-01-07
AU750435B2 (en) 2002-07-18
CA2308797C (en) 2008-03-25
CA2308797A1 (en) 1999-05-14
WO1999023786A2 (en) 1999-05-14
DE69821020D1 (de) 2004-02-12
US6446204B1 (en) 2002-09-03
WO1999023786A3 (en) 1999-07-15
HK1028687A1 (en) 2001-02-23
EP1027795B9 (en) 2004-09-08
EP1027795A2 (en) 2000-08-16

Similar Documents

Publication Publication Date Title
JP3853593B2 (ja) ウェブアプリケーションサーバにおいて拡張可能な認証機構を実現するための方法および装置
JP3853592B2 (ja) 分散ウェブアプリケーションサーバ
US6026404A (en) Method and system for executing and operation in a distributed environment
JP4729172B2 (ja) 宣言型パラダイムをサポートするステートレスなウェブ環境におけるトランザクションを実行するための方法および装置
KR100464839B1 (ko) 서브릿을처리하기위한장치및방법
EP0956687B1 (en) Web request broker controlling multiple processes
US6038603A (en) Processing customized uniform resource locators
US6629154B1 (en) Method and system for deterministic hashes to identify remote methods
JP2003534588A (ja) 分散コンピューティング環境でのプロセスのデータ表現言語表現を使用するプロセスの移植
US20020198895A1 (en) Apparatus and method for dynamically verifying information in a distributed system
Cisco Updating the Mainframe Application Software
Cisco Updating the Mainframe Application Software
Cisco Updating the Mainframe Application Software
Cisco Updating the Mainframe Application Software
Cisco Updating the Mainframe Application Software
Cisco Updating the Mainframe Application Software
WO1999044138A2 (en) Stack-based security requirements
Guide Unicenter® SOLVE: CPT™

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20050913

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20051122

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20060221

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20060228

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060501

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20060829

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20060906

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100915

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110915

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120915

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130915

Year of fee payment: 7

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term