(57)【特許請求の範囲】
【請求項１】
ログインコンテキストを提供するための方法であって、
仮想マシンを開始する工程と、
前記仮想マシンは、オープンサービスプラットフォームと認証サービスとを含み、
前記認証サービスは、クラスローダを含み、
初期クラスローダは、前記認証サービスの前記クラスローダとして指定されており、
ログインモジュールを登録する工程と、
登録された前記ログインモジュールのクラスローダを取得し、コンフィグレーションテーブルに格納する工程と、
第１のアプリケーションから認証要求を受信する工程と、
前記認証要求に応答して、前記コンフィグレーションテーブルに格納された前記ログインモジュールのクラスローダを取得し、前記初期クラスローダを取得された前記ログインモジュールのクラスローダに書き換え、書き換えられた前記ログインモジュールのクラスローダを指定する工程と、
書き換えられた前記ログインモジュールのクラスローダを用いて前記ログインモジュールのログインコンテキストを生成する工程と、
前記第１のアプリケーションに前記ログインモジュールの前記ログインコンテキストを提供する工程と、を有し、
前記第１のアプリケーションは、認証を行うために前記ログインコンテキストを用いることを特徴とする方法。
【請求項２】
前記オープンサービスプラットフォームはＯＳＧｉであることを特徴とする請求項１に記載の方法。
【請求項３】
前記ログインモジュールは、バンドルであることを特徴とする請求項２に記載の方法。
【請求項４】
前記認証サービスは、ＪＡＡＳであることを特徴とする請求項１に記載の方法。
【請求項５】
前記ログインモジュールを登録する前記工程は、クラスローダを前記ログインモジュールに関連付ける工程を有することを特徴とする請求項１に記載の方法。
【請求項６】
前記認証要求は、前記ログインモジュールを示すデータを含むことを特徴とする請求項１に記載の方法。
【請求項７】
第２のログインモジュールから登録要求を受信する工程と、
前記第２のログインモジュールからの登録要求に応答して、前記第２のログインモジュールを登録する工程と、
登録された前記第２のログインモジュールのクラスローダを取得し、前記コンフィグレーションテーブルに格納する工程と、
第２のアプリケーションから第２の認証要求を受信する工程と、
前記第２の認証要求を受信することに応答して、前記コンフィグレーションテーブルに格納された前記第２のログインモジュールのクラスローダを取得し、前記初期クラスローダを取得された前記第２のログインモジュールのクラスローダに書き換え、書き換えられた前記第２のログインモジュールのクラスローダを指定する工程と、
書き換えられた前記第２のログインモジュールのクラスローダを用いて前記第２のログインモジュールのログインコンテキストを生成する工程と、
前記第２のアプリケーションに前記第２のログインモジュールの前記ログインコンテキストを提供する工程と、を更に有することを特徴とする請求項６に記載の方法。
【請求項８】
前記第２の認証要求は、前記第２のログインモジュールを示すデータを含むことを特徴とする請求項７に記載の方法。
【請求項９】
前記ログインモジュールの前記ログインコンテキストを生成する前記工程の後に、前記認証サービスの前記クラスローダとして前記初期クラスローダを再指定する工程を更に有することを特徴とする請求項１に記載の方法。
【請求項１０】
ログインコンテキストを作成するためのコンピュータデバイスであって、
コンピュータ可読記録媒体と、
１または複数のプロセッサと、を有し、
前記１または複数のプロセッサは、前記コンピュータデバイスを、
セキュリティプラットフォームを含む仮想マシンを動作する工程と、
前記仮想マシンが動作している間、第１のログインモジュールを登録する工程と、
登録された前記第１のログインモジュールの第１のクラスローダを取得し、コンフィグレーションテーブルに格納する格納工程と、
前記コンフィグレーションテーブルに格納された前記第１のログインモジュールの第１のクラスローダを取得し、前記セキュリティプラットフォームの初期クラスローダを取得された前記第１のログインモジュールの第１のクラスローダに書き換え、書き換えられた前記第１のログインモジュールの第１のクラスローダを割り当てる工程と、
書き換えられた前記第１のログインモジュールの第１のクラスローダを用いて前記第１のログインモジュールのログインコンテキストを生成する工程と、
第１のクライアントアプリケーションに前記第１のログインモジュールの前記ログインコンテキストを提供する工程と
を実行するように構成されていることを特徴とするコンピュータデバイス。
【請求項１１】
前記仮想マシンが動作している間、第２のログインモジュールを登録する工程と、
登録された前記第２のログインモジュールの第２のクラスローダを取得し、前記コンフィグレーションテーブルに格納する工程と、
前記コンフィグレーションテーブルに格納された前記第２のログインモジュールの第２のクラスローダを取得し、前記セキュリティプラットフォームの初期クラスローダを取得された前記第２のログインモジュールの第２のクラスローダに書き換え、書き換えられた前記第２のログインモジュールの第２のクラスローダを割り当てる工程と、
書き換えられた前記第２のログインモジュールの第２のクラスローダを用いて前記第２のログインモジュールのログインコンテキストを生成する工程と、
第２のクライアントアプリケーションに前記第２のログインモジュールの前記ログインコンテキストを提供する工程と、を更に実行することを特徴とする請求項１０に記載のコンピュータデバイス。
【請求項１２】
前記第１のログインモジュールの前記ログインコンテキストは、前記第１のログインモジュールを特定するログインコンテキストに対する第１の要求を前記第１のクライアントアプリケーションから受信することに応じて生成され、
前記第２のログインモジュールの前記ログインコンテキストは、前記第２のログインモジュールを特定するログインコンテキストに対する第２の要求を前記第２のクライアントアプリケーションから受信することに応じて生成される、ことを特徴とする請求項１１に記載のコンピュータデバイス。
【請求項１３】
前記第１のログインモジュールを登録する前記工程は、前記第１のクラスローダを前記第１のログインモジュールに割り当てる工程を含み、
前記第２のログインモジュールを登録する前記工程は、前記第２のクラスローダを前記第２のログインモジュールに割り当てる工程を含む、ことを特徴とする請求項１１に記載のコンピュータデバイス。
【請求項１４】
前記第１のログインモジュールは、前記第２のログインモジュールとは異なるセキュリティプロトコルを実装することを特徴とする請求項１１に記載のコンピュータデバイス。
【請求項１５】
前記セキュリティプラットフォームの前記クラスローダを初期セキュリティプラットフォームクラスローダに戻す工程を更に実行することを特徴とする請求項１０に記載のコンピュータデバイス。
【請求項１６】
１または複数のコンピュータデバイスによって実行される命令を格納した１または複数のコンピュータ可読媒体であって、
前記１または複数のコンピュータデバイスを、
セキュリティプラットフォームを含む仮想マシンが動作している間、セキュリティサービスを登録する工程と、
登録された前記セキュリティサービスに関連付けられたクラスローダを取得し、コンフィグレーションテーブルに格納する工程と、
前記コンフィグレーションテーブルに格納された前記セキュリティサービスに関連付けられたクラスローダを取得し、前記セキュリティプラットフォームの初期クラスローダを取得された前記セキュリティサービスに関連付けられたクラスローダに書き替え、書き換えられた前記セキュリティサービスに関連付けられたクラスローダを指定する工程と、
第１のアプリケーションから前記セキュリティサービスのコンテキストに対する要求を受信することに応答して、書き換えられた前記セキュリティサービスに関連付けられたクラスローダを用いて前記セキュリティサービスのコンテキストを生成する工程と、
前記第１のアプリケーションへ前記セキュリティサービスの前記コンテキストを提供する工程として機能させ、
前記セキュリティサービスのコンテキストを登録する前記工程は、前記指定されたセキュリティプラットフォームのクラスローダを呼び出す工程を含む、ことを特徴とする命令を格納した１または複数のコンピュータ可読媒体。
【請求項１７】
前記セキュリティサービスのコンテキストに対する前記要求は、前記セキュリティサービスを示すことを特徴とする請求項１６に記載の１または複数のコンピュータ可読媒体。
【請求項１８】
前記仮想マシンは、オープンサービスプラットフォームを動作することを特徴とする請求項１７に記載の１または複数のコンピュータ可読媒体。
【請求項１９】
前記セキュリティサービスを登録する前記工程は、クラスローダを前記セキュリティサービスに関連付ける工程を含むことを特徴とする請求項１６に記載の１または複数のコンピュータ可読媒体。
【請求項２０】
前記セキュリティサービスの前記コンテキストを生成する前記工程の後に、前記セキュリティプラットフォームの前記クラスローダとして初期セキュリティプラットフォームクラスローダを指定する工程を更に機能させる命令を含むことを特徴とする請求項１６に記載の１または複数のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書は、参照することにより本明細書に含まれる２０１１年３月２８日出願の米国特許出願公開１３／０７３８８２号明細書の一部継続出願である。
【０００２】
本発明は、認証一般に関する。
【背景技術】
【０００３】
例えば、悪意のあるユーザやプログラムから保護する場合やリソースの過度の利用を防止する場合に、認証されたユーザにのみコンピュータリソースを利用可能となるように構成することがしばしば要求される。しかしながら、コンピュータリソースは、認証されたユーザやプログラムに利用可能にされるべきであるが、異なるコンピュータリソースはセキュリティの異なるレベルを必要とする可能性がある。リソースがセキュリティドメインを超えてアクセスされる必要があったり、異なるセキュリティサービスがリソースを保護するために利用されたり、異なるソフトウェアプラットフォームがセキュリティサービスとのインタフェースとして用いられたりするため、リソースを異なるユーザやプログラムが利用可能にすることは、より複雑なものとなる。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
コンピュータ環境は、これらの問題を解決するためにいくつかの標準化ツールを提供する。Ｊａｖａ（登録商標）環境において、ＪＡＡＳ（Ｊａｖａ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  ａｎｄ  Ａｕｔｈｏｒｉｚａｔｉｏｎ  Ｓｅｒｖｉｃｅ）は、ユーザを認証し、ユーザに対するアクセス制御を実行することを開発者に可能にさせるセキュリティフレームワークを提供する。ＪＡＡＳもインタフェースを標準化し、基礎的な認証や認可メカニズムを概念化している。ＪＡＡＳログインモジュールは、実際の認証や認可を行っている。しかしながら、仮想マシンが動作している間は動的にログインモジュールの追加や削除ができないため、ログインモジュールは、仮想マシンが開始する前や開始した際に決定される必要がある。例えば、ＯＳＧｉプラットフォームは、ＪＡＡＳのクラスパスに配置されるために、ＪＡＡＳによって提供されたログインモジュールを要求する。Ｊａｖａ仮想マシンにおいて、クラスパスは、Ｊａｖａコンパイラ／ランタイムがクラスファイルを探すであろうディレクトリもしくはＪＡＲファイルを含む。例えば、クラスパスが”ｅｘａｍｐｌｅ．ｃｌａｓｓ”を含むディレクトリやＪＡＲファイルを含んでいない限り、”ｅｘａｍｐｌｅ．ｃｌａｓｓ”は、Ｊａｖａ仮想マシンによって見つけられないだろう。したがって、ログインモジュールは、Ｊａｖａ仮想マシンが開始する前にクラスパスに追加されなければならず、言い換えると、このことが動的なログインモジュールの追加や削除を妨げる。
【課題を解決するための手段】
【０００５】
一実施形態においては、ログインコンテキストを提供するための方法であって、仮想マシンを開始する工程と、前記仮想マシンは、オープンサービスプラットフォームと認証サービスとを含み、前記認証サービスは、クラスローダを含み、初期クラスローダは、前記認証サービスの前記クラスローダとして指定されており、ログインモジュールを登録する工程と、登録された前記ログインモジュールのクラスローダを取得し、コンフィグレーションテーブルに格納する工程と、第１のアプリケーションから認証要求を受信する工程と、前記認証要求に応答して、前記コンフィグレーションテーブルに格納された前記ログインモジュールのクラスローダを取得し、前記初期クラスローダを取得された前記ログインモジュールのクラスローダに書き換え、書き換えられた前記ログインモジュールのクラスローダを指定する工程と、書き換えられた前記ログインモジュールのクラスローダを用いて前記ログインモジュールのログインコンテキストを生成する工程と、前記第１のアプリケーションに前記ログインモジュールの前記ログインコンテキストを提供する工程と、を有し、前記第１のアプリケーションは、認証を行うために前記ログインコンテキストを用いることを特徴とする。
【０００６】
一実施形態においては、ログインコンテキストを作成するためのコンピュータデバイスであって、コンピュータ可読記録媒体と、１または複数のプロセッサと、を有し、前記１または複数のプロセッサは、前記コンピュータデバイスを、セキュリティプラットフォームを含む仮想マシンを動作する工程と、前記仮想マシンが動作している間、第１のログインモジュールを登録する工程と、登録された前記第１のログインモジュールの第１のクラスローダを取得し、コンフィグレーションテーブルに格納する格納工程と、前記コンフィグレーションテーブルに格納された前記第１のログインモジュールの第１のクラスローダを取得し、前記セキュリティプラットフォームの初期クラスローダを取得された前記第１のログインモジュールの第１のクラスローダに書き換え、書き換えられた前記第１のログインモジュールの第１のクラスローダを割り当てる工程と、書き換えられた前記第１のログインモジュールの第１のクラスローダを用いて前記第１のログインモジュールのログインコンテキストを生成する工程と、第１のクライアントアプリケーションに前記第１のログインモジュールの前記ログインコンテキストを提供する工程とを実行するように構成されていることを特徴とする。
【０００７】
一実施形態においては、１または複数のコンピュータデバイスによって実行される命令を格納した１または複数のコンピュータ可読媒体であって、前記１または複数のコンピュータデバイスを、セキュリティプラットフォームを含む仮想マシンが動作している間、セキュリティサービスを登録する工程と、登録された前記セキュリティサービスに関連付けられたクラスローダを取得し、コンフィグレーションテーブルに格納する工程と、前記コンフィグレーションテーブルに格納された前記セキュリティサービスに関連付けられたクラスローダを取得し、前記セキュリティプラットフォームの初期クラスローダを取得された前記セキュリティサービスに関連付けられたクラスローダに書き替え、書き換えられた前記セキュリティサービスに関連付けられたクラスローダを指定する工程と、第１のアプリケーションから前記セキュリティサービスのコンテキストに対する要求を受信することに応答して、書き換えられた前記セキュリティサービスに関連付けられたクラスローダを用いて前記セキュリティサービスのコンテキストを生成する工程と、前記第１のアプリケーションへ前記セキュリティサービスの前記コンテキストを提供する工程として機能させ、前記セキュリティサービスのコンテキストを登録する前記工程は、前記指定されたセキュリティプラットフォームのクラスローダを呼び出す工程を含む、ことを特徴とする。
【図面の簡単な説明】
【０００８】
【図１】図１は、セキュリティサービスを導入するためのシステムの実施例を示すブロック図である。
【図２】図２は、セキュリティサービスを導入するためのシステムの実施例を示すブロック図である。
【図３】図３は、セキュリティデバイスの実施例を示すブロック図である。
【図４】図４は、セキュリティサービスを追加するための方法の実施例を示すフローチャートである。
【図５】図５は、ログインコンテキストを生成するための方法の実施例を示すフローチャートである。
【図６】図６は、ログインコンテキストを生成するための方法の実施例を示すフローチャートである。
【図７】図７は、セキュリティサービスを導入するためのシステムの実施例を示す図である。
【図８】図８は、セキュリティプロバイダの実施例を示すブロック図である。
【図９】図９は、コンフィグレーションテーブルの実施例を示す図である。
【発明を実施するための形態】
【０００９】
以下の説明は、一定の説明のための実施形態であるが、クレームのスコープはその説明のための実施形態に限定されるものではない。また、説明のための実施形態は、いくつかの新規の特徴を含んでいてもよく、特有の特徴は以下に述べられるシステムや方法を実施するための必須のものでなくてもよい。
【００１０】
図１は、セキュリティサービスを実装するためのシステム１００の実施例を示したブロック図である。システム１００は、動作している仮想マシンにおいて、セキュリティサービスの追加、変更、および削除を動的に許可し、システム１００はオペレーティングシステム１４０（以下、ＯＳと称する）、Ｊａｖａ仮想マシン１３０（以下、ＪＶＭと称する）、Ｊａｖａ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  ａｎｄ  Ａｕｔｈｏｒｉｚａｔｉｏｎ  Ｓｅｒｖｉｃｅ  １３５（以下、ＪＡＡＳと称する）、Ｏｐｅｎ  Ｓｅｒｖｉｃｅｓ  Ｇａｔｅｗａｙ  ｉｎｉｔｉａｔｉｖｅ  ｐｌａｔｆｏｒｍ  １２０（以下、ＯＳＧｉと称する）、およびコンテキストファクトリ１１０を有する。システム１００は、クライアントアプリケーション１７０およびセキュリティプロバイダ１  １５０−１〜セキュリティプロバイダＮ  １５０−Ｎを更に有し、ここでＮはセキュリティプロバイダの数を示す。ＯＳ１４０はアプリケーションとハードウェアとの仲介手段として動作し、コンピュータデバイスのリソースの共有の管理、各リソースにアクセスするためのインタフェースの提供、他のアプリケーションに対するサービスの提供を行う。ＪＶＭ１３０は、コード（例えば、ＪＡＶＡバイトコード）を実行するマシン言語に変換するプラットフォーム非依存環境である。ＪＡＡＳ１３５は、認証および認可サービスを実装し、アプリケーションおよびユーザのアクセス制御を実行する。ＪＡＡＳ１３５は、異なるログインモジュールをシステムに構成できるようにし、異なるログインモジュールは、ＪＡＡＳアプリケーションプログラミングインタフェース（ＡＰＩ）を介してアプリケーションにより構成およびアクセスされることができる。
【００１１】
ＯＳＧｉプラットフォーム１２０は、モジュールシステムと、ＪＡＶＡのサービスプラットフォームと、アプリケーションやコンポーネント（以下、“バンドル”とまとめて称する）のインストール、開始、停止、アップデート、アンインストールをＪＶＭ１３０の再起動を要求することなく実行できる実行環境とを提供する。バンドルは、他のバンドルが利用可能なようにサービスを構成することができる。バンドルのサービスは、他のバンドルが検知し利用できるようにサービスレジストリに追加され、そのレジストリからのサービスの削除は、サービスの削除を検知するように用いられることができる。
【００１２】
システム１００は、他のアプリケーション、モジュール、バンドル、コンポーネントなどが利用可能なセキュリティサービスを構成するセキュリティサービスを含む。図１は、セキュリティプロバイダ１−Ｎ（以下、“セキュリティプロバイダ１５０”と称し、１５０−１、１５０−２、・・・、１５０−Ｎ）を示し、ここでのＮはシステムが動作させることができるセキュリティプロバイダの全数を示す任意の正の整数を示している。セキュリティプロバイダ１５０（図８に示す）は、バンドル内に実装されることができ、これらのサービスをＯＳＧｉサービスとして利用できるようにする（ＯＳＧｉサービスレジストリにサービスを追加することを含む）。セキュリティサービスプロバイダ１５０は、ログインモジュールを含むか、ＪＡＡＳ認証／認可サービスを含むサービスを提供すること、の両方もしくはいずれか一方を構成することができる。クライアントアプリケーション１７０は、バンドルであってもよく、クライアントアプリケーション１７０は、セキュリティプロバイダ１５０に１または複数のサービス（例えば、認証や認可）を要求してもよい。
【００１３】
システム１００は、ＯＳＧｉプラットフォーム１２０にコンテキストファクトリ１１０を有する。コンテキストファクトリ１１０は、クライアントアプリケーション１７０によるセキュリティサービスのアクセスを円滑にする。セキュリティプロバイダ１５０がＯＳＧｉプラットフォーム上にロードされ、開始された場合、セキュリティプロバイダ１５０は、自身を登録し（例えば、コンテキストファクトリ１１０やカスタムコンフィグレーションユニット２１５（図２参照）に）、これは、セキュリティプロバイダ１５０によって提供される任意のサービスを登録することやサービスプロバイダおよび／もしくはサービスに対するクラスローダを登録することを含む。クラスローダは、仮想マシン（例えば、ＪＶＭ）にクラス（例えば、Ｊａｖａクラス）をロードする。クラスローダは、ライブラリを検索し、ライブラリのコンテンツを読み込み、ライブラリ内に格納されたクラスをロードする。ロードは、“オンデマンド”にて（すなわち、動的に）実行されることができるため、クラスがＪＶＭによって実際に用いられるまでロードは実行されないようにしてもよい。
【００１４】
コンテキストファクトリ１１０は、クライアントアプリケーション１７０からセキュリティサービスに対する要求を受け付け、クライアントアプリケーション１７０にセキュリティサービスのインタフェース（例えば、ログインコンテキスト）を返す。ログインコンテキストは、セキュリティサービスにインタフェースを提供し、後認証ユーザ信用情報を格納し、特権や許可をリストアップするオブジェクトである。ログインコンテキストは、セキュリティプロバイダ（例えば、ログインモジュール）からのメソッドを呼び出す“ログイン”手段を含む。また、ログインコンテキストは、ＪＡＡＳによってインスタンスを作成してもよく、ＪＡＡＳ  ＡＰＩに適合してもよい。インタフェース（例えば、ＬｏｇｉｎＣｏｎｔｅｘｔなどのログインコンテキスト）を用いることによって、クライアントアプリケーション１７０は、コンテキストファクトリ１１０（例えば、プロキシとして動作するコンテキストファクトリ１１０）の関与なしに、セキュリティサービスやセキュリティプロバイダ１５０と相互に通信できるようにしてもよい。したがって、クライアントアプリケーション１７０は、セキュリティサービスと通信を行うために、クライアントアプリケーションの指定および／またはセキュリティサービスの使用を簡略化するＪＡＡＳ１３５の標準ＡＰＩを用いることができる。
【００１５】
図２は、セキュリティサービスを実装するためのシステム２００の実施例を示したブロック図である。システム２００は、ＯＳ２４０、ＪＶＭ２３０、ＪＡＡＳ２３５、ＯＳＧｉプラットフォーム２２０、クライアントアプリケーション２７０、およびセキュリティプロバイダ２５０を有する。更に、システムはコンテキストファクトリ２１０およびカスタムコンフィグレーションユニット２１５を有する。カスタムコンフィグレーションユニット２１５は、セキュリティプロバイダ２５０のサービスおよびクラスローダを登録する。カスタムコンフィグレーションユニット２１５は、セキュリティプロバイダ２５０に関するデータを格納するコンフィグレーションテーブル２１７を有し、コンフィグレーションテーブル２１７は、コンフィグレーション名、ログインモジュールクラス名、または／および、ログインモジュールクラスローダを含む。セキュリティプロバイダ２５０に関するデータは、コンフィグレーションテーブル２１７内の各コンフィグレーションエントリに格納されることができる。さらに、本実施形態において、コンテキストファクトリ２１０は１または複数のサービスとしてシステムの他のメンバが利用可能な機能性を構成するバンドルであり、コンテキストファクトリ２１０はＯＳＧｉフレームワークにそのサービスを追加する。その上、カスタムコンフィグレーションユニット２１５はバンドルであり、１または複数のサービスとして利用可能な機能性を構成するようにしてもよく、他の実施形態ではカスタムコンフィグレーションユニット２１５はバンドルではないようにしてもよい（例えば、ＯＳＧｉプラットフォーム２２０の一部であってよい）。したがって、システム２００は、ＪＶＭが動作している間、セキュリティプロバイダおよびクライアントアプリケーションの動的な追加および削除に加えて、コンテキストファクトリ２１０およびカスタムコンフィグレーションユニット２１５の動的な削除、変更、および追加を許可する。
【００１６】
図３は、セキュリティデバイス３００の実施例を示すブロック図である。セキュリティデバイス３００は、ネットワークを介さないコンピュータリソース１  ３８０およびネットワーク３７０を介したコンピュータリソース２  ３９０と通信を行う。ネットワーク３７０は、インターネット、ＷＡＮ、およびＬＡＮを含むいくつかのネットワークの組み合わせや有線／無線のネットワークを含んでもよい。さらに、セキュリティデバイス３００は、例えば、ＵＳＢ、シリアルポート、Ｆｉｒｅｗｉｒｅ、Ｂｌｕｅｔｏｏｔｈ（登録商標）、およびＷｉＦｉを含む有線／無線の手段を介して、コンピュータリソース１  ３８０と通信を行う。
【００１７】
セキュリティデバイス３００は、１または複数のプロセッサ３０１（以下、“ＣＰＵ３０１”と称する）を含み、ＣＰＵ３０１は、標準的なマイクロプロセッサでもよいし、カスタマイズされたマイクロプロセッサでもよい。ＣＰＵ３０１は、コンピュータ可読命令を読み込んで実行するように構成され、ＣＰＵ３０１は、セキュリティデバイス３０３の他のコンポーネントに命令および／もしくは制御してもよい。セキュリティデバイス３００は、他のデバイスへの通信インタフェースを提供するＩ／Ｏインタフェース３０３を有し、Ｉ／Ｏインタフェース３０３は、表示デバイス、マウス、印刷デバイス、タッチスクリーン、ライトペン、光学式記録デバイス、スキャナ、マイクロフォン、カメラなどを含む。セキュリティデバイス３００は、メモリ３０５を有し、メモリ３０５は、ＲＯＭ、ＲＡＭ、フラッシュメモリのような揮発性もしくは不揮発性であってよい。セキュリティデバイス３００は、さらにセキュリティデバイス３００がネットワーク３７０と通信を行うためのネットワークインタフェース３０７を有する。記憶デバイス３０９は、データやモジュールを格納し、例えば、ハードドライブ、光学式記憶デバイス、ディスケット、および／または、固定ドライブを含んでよい。セキュリティデバイス３００のコンポーネントは、バスを介して接続される。セキュリティデバイス３００は、セキュリティデバイス３００のハードウェア、処理、割り込み、メモリ、および／またはファイルシステムを管理するオペレーティングシステムを有する。
【００１８】
セキュリティデバイス３００は、コンテキストファクトリ３１０、カスタムコンフィグレーションユニット３１５、およびセキュリティプロバイダ３２０を有する。コンテキストファクトリ３１０、カスタムコンフィグレーション３２０、およびセキュリティプロバイダ３２０は、コンピュータ実行可能命令にて実装されることができる。説明のために、セキュリティデバイス３００のメンバがコンピュータ実行可能命令を実行するように述べられてはいるが、コンピュータ実行可能命令は、セキュリティデバイス３００によって実行され、以下に述べられる特定の動作をセキュリティデバイス３００に行わせるようにしてもよい。コンピュータ実行可能命令は、ロジックを含んでもよく、ソフトウェア、ファームウェア、および／またはハードウェアにて実装されてもよい。他の実施形態において、コンテキストファクトリ３１０およびカスタムコンフィグレーションユニット３１５は、単一のメンバもしくは複数のメンバにさらに分割されて組み込まれてもよい。セキュリティデバイス３００は、コンピュータリソース１  ３８０やコンピュータリソース２  ３９０へのアクセスを制御してもよいし、コンピュータリソース１  ３８０はコンピュータリソース２  ３９０にアクセスする前に、セキュリティプロバイダ３２０との認証および／または認可動作を実行するようにクライアントアプリケーションに要求してもよい。
【００１９】
図４は、セキュリティサービスを追加する方法の実施形態を示すフローチャートである。この方法の他の実施形態や以下で述べるのとは別の方法では、ブロックの省略、ブロックの追加、ブロックの並び順の変更、ブロックの組み合わせ、および／もしくはブロックの分割のいずれを行ってもよい。更に、図１〜３に示すシステムおよびデバイスのコンポーネント（例えば、コンテキストファクトリ１１０、カスタムコンフィグレーションユニット２１５）は、図４に示された方法を実装してもよいし、以下に述べる方法とは別の方法であってもよい。
【００２０】
まずブロック４００において、ＪＡＶＡ仮想マシンのような仮想マシンが開始される。次にブロック４１０において、セキュリティモジュールに対するクラスローダが取得される。例えば、関連付けられたクラスローダを有するセキュリティモジュールは、ＯＳＧｉプラットフォームを含む仮想マシン上のバンドルの一部としてインストールされてもよく、セキュリティモジュールは、メソッド呼び出しにて渡されたパラメータとしてカスタムコンフィグレーションにクラスローダを（ログインモジュール名やクラスパスと同様に）提供してもよい。ブロック４２０に移動し、コンフィグレーションエントリは、セキュリティモジュールに対して生成される。コンフィグレーションエントリは、クラスローダを示し、そのクラスローダをセキュリティモジュールに関連付ける。最後にブロック４３０において、コンフィグレーションエントリは、例えばメモリ内のコンフィグレーションテーブルに格納される。
【００２１】
図５は、ログインコンテキストを生成するための方法の実施形態を示すフローチャートである。まずブロック５００において、ログインコンテキストを生成するためのリクエストが取得される。リクエストは、例えば、Ｍｕｌｔｉｆｕｎｃｔｉｏｎ  Ｅｍｂｅｄｄｅｄ  Ａｐｐｌｉｃａｔｉｏｎ  Ｐｌａｔｆｏｒｍ  （ＭＥＡＰ）アプリケーションのような、クライアントアプリケーション、バンドル、モジュール、コンポーネントなどからのメソッド呼び出しを含み、リクエストは、要求されたログインコンテキストやログインモジュールを示してもよい。ブロック５１０において、要求されたログインコンテキストに関連付けられたコンフィグレーションエントリは、例えばコンフィグレーションテーブルから取り出される。次にブロック５２０において、ＪＡＡＳクラスローダは、要求されたログインコンテキストに関連付けられたクラスローダに設定され、ブロック５３０において要求されたログインコンテキストが生成される。最後にブロック５４０において、ログインコンテキストは、要求をしたアプリケーション、バンドル、モジュール、コンポーネントなどに提供される。
【００２２】
図６は、ログインコンテキストを生成するための方法の実施形態を示すフローチャートである。ステージ６８０において、ログインモジュール６５１は、カスタムコンフィグレーションユニット６１５に登録される。実施形態に応じて、ログインモジュール６５１は、自身をカスタムコンフィグレーションユニット６１５に登録してもよいし、他のアプリケーション、モジュール、バンドルなどがログインモジュール（例えば、ログインモジュールを含むバンドル）を登録してもよい。ステージ６８２において、カスタムコンフィグレーションユニット６１５は、ログインモジュールに関連付けられた情報をコンフィグレーションテーブルに記録する。
【００２３】
次にステージ６８４において、クライアントアプリケーション６７０は、コンテキストファクトリ６１０にログインコンテキストを要求する。ステージ６８６において、コンテキストファクトリ６１０は、要求されたログインコンテキストに対するクラスローダをカスタムコンフィグレーションユニット６１５から取り出す。ステージ６８８へ進み、コンテキストファクトリ６１０はスレッド切替を行い、ＪＡＡＳデフォルトクラスローダを要求されたログインコンテキストに対するクラスローダに変更する。スレッドは、オペレーティングシステムによってスケジューリングされることができる処理の単位である。次にステージ６９０において、コンテキストファクトリ６１０は、ＪＡＡＳ６３５にログインコンテキストを要求する。ステージ６９２において、ＪＡＡＳは、クラスローダ（また、いくつかの実施形態では、クラス名（例えばログインモジュールの省略されていないクラス名（例えば、“ｃｏｍ．ｃａｎｏｎ．ｊａａｓ．ＬｏｇｉｎＭｏｄｕｌｅＡ”）））を用いてログインモジュール６５１に関連付けられたログインコンテキストを生成する。スレッド切替の間、コンテキストファクトリ６１０および／またはＪＡＡＳ６３５は、追加のログインコンテキストを生成しようとする試みをブロックする（例えば、呼び出しブロッキング）。ステージ６９４に移り、コンテキストファクトリ６１０および／またはＪＡＡＳ６３５に追加のログインコンテキストを生成することを許可するようにスレッドは元に戻され、ＪＡＡＳクラスローダはＪＡＡＳデフォルトクラスローダに戻すように変更され、生成されたログインコンテキストはクライアントアプリケーション６７０に返される。最後にステージ６９６において、クライアントアプリケーション６７０は、返されたログインコンテキストを用いてログインモジュール６５１にログインを要求する。返されたログインコンテキストを用いることで、クライアントアプリケーション６７０は、プロキシを用いることなく、ログインモジュールおよび／もしくはＪＡＡＳと通信を行うことができる。したがって、クライアントアプリケーション６７０は、ＪＡＡＳ認証を行うために標準ＪＡＡＳインタフェースを用いることができる。
【００２４】
図７は、セキュリティサービスを実装するためのシステムの実施形態を示したフロー図である。システムは、クライアント７７０、ＪＡＡＳ７３５、コンテキストファクトリ７１０、カスタムコンフィグレーションユニット７１５、およびログインモジュール７５１を有する。ステージ１において、ログインモジュール７５１は、登録情報をカスタムコンフィグレーションユニット７１５に送信する。ログインモジュール７５１は、ＯＳＧｉバンドルの一部として追加され、そしてログインモジュール７５１は、自身をカスタムコンフィグレーションユニット７１５に登録する。登録情報７０５は、モジュールの識別子、クラスローダ、クラス名、コールバックハンドラ、および／またはアプリケーションコンフィグレーションエントリを有する。カスタムコンフィグレーションユニット７１５は、登録情報をカスタムコンフィグレーションテーブル７１７に追加する。例えば、カスタムコンフィグレーションユニット７１５は、登録情報７０５をログインモジュールに関連付けられたエントリに格納してもよい。
【００２５】
ステージ２において、クライアント７７０は、ログインコンテキストに対する要求７１３をコンテキストファクトリ７１０に送信する。ログインコンテキストに対する要求７１３は、ログインコンテキストが検索された１または複数の要求されたログインモジュール（例えば、ログインモジュール７５１）を識別する。次にステージ３において、コンテキストファクトリ７１０は、要求されたログインモジュール（この例では、ログインモジュール７５１）のクロスローダに対する要求７２０を送信する。クラスローダに対する要求７２０を受信することに応答して、カスタムコンフィグレーションユニット７１５は、コンフィグレーションテーブル７１７（例えば、登録されたログインモジュールと対応付けられたクラスローダとのマップ）を参照することによって、要求されたログインモジュールに関連付けられたクラスローダを識別する。次にステージ４において、カスタムコンフィグレーションユニット７１５は、ログインモジュールクラスローダへのリファレンス７２５をコンテキストファクトリ７１０に送信する。
【００２６】
ステージ５において、コンテキストファクトリ７１０は、ＪＡＡＳ７３５のログインモジュールクラスローダへのリファレンスを修正する。まず、ログインモジュールクラスローダリファレンスは、ＪＶＭのランタイムにて決定されたＪＡＡＳデフォルトクラスローダ７４５を参照する。ＪＡＡＳ７３５は、ログインコンテキストのインスタンスを作成するためのクラスローダを検出するためにログインモジュールクラスローダリファレンスを自動的に参照するであろうが、ＪＶＭが稼働している間はＪＡＡＳ７３５がログインモジュールクラスローダリファレンスを変更できないため、コンテキストファクトリ７１０は、デフォルトクラスローダ７４５の代わりにログインモジュールクラスローダ７５０を参照するように、ログインモジュールクラスローダリファレンスを変更する。ステージ５において、コンテキストファクトリ７１０は、他のログインコンテキストの生成をブロックするために、スレッドのブロックを開始する。ＪＡＡＳ７３５は、ログインモジュールクラスローダリファレンスによって参照されるクラスローダを用いてログインコンテキストを生成するため、ブロッキングは重要となるであろう。故に、ブロックされない場合は、ログインモジュールクラスローダリファレンスがログインモジュールクラスローダ７５０を参照している間、ＪＡＡＳ７３５は、他の要求されたログインコンテキストのインスタンスを作成するためにログインモジュールクラスローダ７５０を用いるであろう。しかしながら、他の要求されたログインコンテキストは、デフォルトクラスローダ７４５に関連付けられたログインコンテキストに対する要求であってもよい。したがって、ログインモジュールクラスローダリファレンスがログインモジュールクラスローダ７５０を参照している間、他のログインコンテキストの生成をブロックすることが求められるであろう。
【００２７】
ステージ６において、ログインモジュールクラスローダリファレンスがログインモジュールクラスローダ７５０を参照すると、コンテキストファクトリ７１０はログインコンテキスト７１７に対する要求をＪＡＡＳ７３５へ送信する。ステージ７において、ＪＡＡＳ７３５は、ログインモジュールクラスローダリファレンスによって参照されたクラスローダ７３０（現時点では、ログインモジュールクラスローダ７５０）を取得する。ステージ８において、ＪＡＡＳ７３５は、ログインモジュールクラスローダ７５０を参照するクラスローダリファレンス７５５を受け取る。次にステージ９において、ＪＡＡＳ７３５は、ログインモジュールクラスローダ７５０を用いてログインコンテキストのインスタンスを生成する。
【００２８】
ステージ１０に進み、ログインコンテキストへのリファレンス７６５は、ＪＡＡＳ７３５によってコンテキストファクトリ７１０へ返される。そして、コンテキストファクトリ７１０は、参照するログインモジュールクラスローダリファレンスをデフォルトクラスローダ７４５に変更し、スレッドのブロッキングを終了する。次にステージ１１において、ログインコンテキストへのリファレンス７６５は、クライアント７７０へ返される。最後にステージ１２において、クライアント７７０は、ログインモジュール７５１と通信するためにログインコンテキスト７６０を用いる。したがって、クライアント７７０は、プロキシを要さず、ＪＡＡＳ７３５におけるログインコンテキスト７６０を介してログインモジュール７５１と通信を行い、そして、クライアント７７０は、ログインモジュール７５１と通信を行うために標準ＪＡＡＳ  ＡＰＩを用いることができる。
【００２９】
図８は、ＯＳＧｉバンドルとして実装されるセキュリティプロバイダの実施形態を示すブロック図である。セキュリティプロバイダＡ８５０−１のバンドルは、ログインモジュールＡおよびクラスローダＡを含む。セキュリティプロバイダＢ８５０−２のバンドルは、ログインモジュールＢおよびクラスローダＢを含む。セキュリティプロバイダＣ８５０−３のバンドルは、複数のログインモジュールとしてログインモジュール１〜Ｎ（Ｎは、任意に適用可能なログインモジュールの数）およびクラスローダＣを含む。セキュリティプロバイダＣのクラスローダＣは、複数のログインモジュールに関連付けられており、クライアントアプリケーションを関連付けられたログインモジュールと通信を行うようにするためのログインコンテキストを生成するために用いられることができる。
【００３０】
さらに、クラスローダは、関連付けられたＯＳＧｉバンドルのログインモジュールとのみ通信が可能なようにログインコンテキストを生成できるようにしてもよい。例えば、クラスローダＡは、クライアントアプリケーションがログインモジュールＡと通信できるようにするログインコンテキストを生成するために用いられてよいが、クライアントアプリケーションが他のセキュリティプロバイダ（例えば、ログインモジュールＢ、ログインモジュール１）からログインモジュールと通信できるようにするログインコンテキストは生成できない。また、クラスローダＣは、クライアントアプリケーションがセキュリティプロバイダＣ（ログインモジュール１、ログインモジュール２、・・・、ログインモジュールＮ）と通信できるようにするログインコンテキストを生成するために用いられてよいが、アプリケーションが他のセキュリティプロバイダ（例えば、ログインモジュールＡ、ログインモジュールＢ）と通信できるようにするログインコンテキストを生成するために用いられることはできない。
【００３１】
図９は、コンフィグレーションテーブル９１７の実施形態を示す。コンフィグレーションテーブルは、各ログインモジュールに関連付けられたエントリ（例えば、エントリ９１８Ａ〜Ｃ）を含む。示す実施形態において、エントリは、ログインモジュール、そのクラスローダ、そのクラス名、そのコールバックハンドラ、およびそのコンフィグレーションエントリを含む。したがって、コンフィグレーションテーブル９１７は、ログインモジュールとログインモジュールに関連付けられたいくつかの情報とをマッピングするために用いられてよい。
【００３２】
上述したデバイス、システム、および方法は、１または複数の記憶媒体に格納されたコンピュータ実行可能指示を読み出し、それらを実行するように構成された１または複数のデバイスに、上述した動作を実現するためのコンピュータ実行可能命令を格納した１または複数の記憶媒体を供給することによって達成されることができる。この場合において、１または複数の記憶媒体から読み出されたコンピュータ実行可能命令を実行した際に、１または複数のデバイスは、上述したデバイス、システム、および方法の動作を実行する。また、１または複数のシステムおよび／またはデバイス上のオペレーティングシステムは、上述したデバイス、システム、および方法の１または複数の動作を実装してよい。したがって、コンピュータ実行可能指示およびコンピュータ実行可能命令を格納した１または複数の記憶媒体は、実施形態の構成要素となる。
【００３３】
いくつかの適用可能なコンピュータ可読記録媒体（例えば、磁気ディスク（フロッピー（登録商標）ディスクやハードディスクを含む）、光学式ディスク（ＣＤ、ＤＶＤ、ブルーレイディスクを含む）、光磁気ディスク、磁気テープ、および固定デバイス（フラッシュメモリ、ＤＲＡＭ、ＳＲＡＭを含む））は、コンピュータ実行可能命令に対する記憶媒体として採用できる。コンピュータ実行可能命令は、デバイスに挿入された機能拡張ボードやデバイスに接続された機能拡張ユニット上に提供されたコンピュータ可読記憶媒体に書き込まれてもよいし、機能拡張ボードやユニット上に提供されたＣＰＵが上述したデバイス、システム、および方法の命令を使用するようにしてもよい。
【００３４】
この開示は、特定の説明のための実施形態に関しての詳細な記述を行った。クレームのスコープは上述した実施形態に限定されるものではなく、クレームのスコープから外れることのない範囲で様々な変更および改良を行ってもよい。
【図１】
0005511874.tif 000002
【図２】
0005511874.tif 000003
【図３】
0005511874.tif 000004
【図４】
0005511874.tif 000005
【図５】
0005511874.tif 000006
【図６】
0005511874.tif 000007
【図７】
0005511874.tif 000008
【図８】
0005511874.tif 000009
【図９】
0005511874.tif 000010