以下、本発明を実施するための実施の形態(以下、実施形態という)を、図面に基づいて説明する。
[1.システム構成の説明]
図1には、本実施形態に係る情報処理システム1のシステム構成図を示した。図1に示されるように、情報処理システム1は、サーバ10と、第1端末装置30−1、第2端末装置30−2、第3端末装置30−3、クラウドサービスサーバ50とを含み、サーバ10と第1端末装置30−1、第2端末装置30−2、第3端末装置30−3、クラウドサービスサーバ50とはそれぞれネットワーク2を介してデータ通信可能に接続される。
ここで、第1端末装置30−1は、アプリケーションのベンダー(ライセンサー)が利用する装置とし、第2端末装置30−2は、アプリケーションのライセンシーが利用する装置とし、第3端末装置30−3は、アプリケーションをテナント契約するテナント管理者が利用する装置とする。なお、ライセンシーは、個人のユーザである場合、テナント(会社等の組織)である場合がある。ここで、ライセンシーがテナントである場合には、契約の範囲内において、テナント側が、テナントに属するユーザに対してさらにライセンスを付与することがある。本実施形態に係る情報処理システム1は、上記の様々なライセンス形態にも柔軟に対応可能となっている。
また、以下において、第1端末装置30−1、第2端末装置30−2、第3端末装置30−3において共通する内容については端末装置30と表記して説明することがある。
また、図1に示されるように、サーバ10は、ハードウェア構成の一例として、制御部11、記憶部12、通信部13を備える。
制御部11は、CPU(Central Processing Unit)を含み、記憶部12に記憶されたプログラムに基づいて、各種の演算処理を実行するとともにサーバ10の各部を制御する。
記憶部12は、サーバ10のオペレーティングシステム等の制御プログラムやデータを記憶するほか、制御部11のワークメモリとしても用いられる。プログラムは、光ディスク、磁気ディスク、磁気テープ、光磁気ディスク、フラッシュメモリ等の情報記憶媒体に格納された状態でサーバ10に供給されてもよいし、インターネット等のデータ通信網を介してサーバ10に供給されてもよい。
通信部13は、例えばネットワークインターフェースカード(NIC)を含み、NICを介してネットワーク2に接続して、ネットワーク2に接続される端末装置等と通信する。
また、図1に示されるように、端末装置30は、ハードウェア構成の一例として、制御部31、記憶部32、通信部33、入力部34、及び表示部35を備える。
制御部31は、CPU(Central Processing Unit)を含み、記憶部32に記憶されたプログラムに基づいて、各種の演算処理を実行するとともに端末装置30の各部を制御する。
記憶部32は、端末装置30のオペレーティングシステム等の制御プログラムやデータを記憶するほか、制御部31のワークメモリとしても用いられる。プログラムは、光ディスク、磁気ディスク、磁気テープ、光磁気ディスク、フラッシュメモリ等の情報記憶媒体に格納された状態で端末装置30に供給されてもよいし、インターネット等のデータ通信網を介して端末装置30に供給されてもよい。
通信部33は、例えばネットワークインターフェースカード(NIC)を含み、NICを介してネットワーク2に接続して、ネットワーク2に接続される端末装置等と通信する。
入力部34は、例えばキーボード、マウス、タッチパネル等の入力デバイスからユーザの操作入力を受け付ける。
表示部35は、例えば液晶ディスプレイを含み、制御部31により生成されるグラフィックイメージを表示する。
なお、入力部34及び表示部35は端末装置30の外部装置として設けられることとしても構わない。
本実施形態では、サーバ10は、プロトタイプベースのオブジェクトを管理する。ここで、プロトタイプベースのオブジェクトとは、プロトタイプベースのオブジェクトの集合に唯一存在するルートオブジェクトを除けば、唯一つの親のオブジェクト(プロトタイプ)を持つオブジェクトのことである。なお、ルートオブジェクトは自身のプロトタイプを持たない。
また、オブジェクトAがオブジェクトBのプロトタイプであるとき、オブジェクトBはオブジェクトAのアーティファクトであるともいう。オブジェクト間のプロトタイプ関係により、プロトタイプベースのオブジェクト全体の集合は木構造で表現される。また、オブジェクトにより構成される木構造を破壊しないならば、プロトタイプを再接続することで木構造を変形することが可能である。
さらに、サーバ10で管理するオブジェクトには、属性及び属性値を持たせることができる。REST(REpresentational State Transfer)アーキテクチャスタイルにおいては、オブジェクトをリソース、値を表現と呼ぶこともある。オブジェクトには、単にオブジェクト識別子とプロトタイプのみからなる純粋なアイデンティティのみを表すもの、任意のコンテント型の値を持つデータを表現するもの、アクセス資格を証明するクレデンシャルであるアクセストークン、あるいはオブジェクトの所有者であるリソースオーナーやリソースオーナーの認可のもとにオブジェクトへのアクセスを行うアプリケーション(クライアント)のようなエンティティを表すものが含まれることとしてよい。そして、これらのオブジェクトが1つの木構造の中に含まれる。なお、上記のアクセストークンは、権限情報が関連付けられるオブジェクトともいえる。
本実施形態に係る情報処理システム1では、サーバ10は、アクセストークンを提示したリクエストを受け付け、アクセストークンが有効と検証された場合に、アクセストークンに基づき特定された権限の範囲で、上記受け付けたリクエストを処理する。例えば、アクセストークンにより特定される権限の範囲は、オブジェクトを作成(追加)、内容の参照、更新、削除等のいずれかを認可(又は不認可)したものである。また例えば、サーバ10は、端末装置30から受け付けたリクエストに従って、管理するオブジェクトの追加、更新、情報の読み出し、削除等を実行する。
以下では、情報処理システム1において実現される機能の一例について説明する。
[2.情報処理システム1において実現される機能の説明]
次に、図2に示される情報処理システム1の機能ブロック図に基づき、サーバ10と端末装置30に備えられる機能の一例について説明する。
[2.1.サーバ10の機能]
図2に示されるように、サーバ10は、データ格納部110、リクエスト受付部120、権限オブジェクト検証部130、オブジェクト管理部140、リクエスト処理部150、処理結果提供部160を備える。
サーバ10に備えられる上記の各部の機能は、サーバ10に備えられる制御部11が、記憶部12やコンピュータ読み取り可能な情報記憶媒体に格納されたプログラムを読み込み実行することで実現されるものとしてよい。なお、プログラムは光ディスク、磁気ディスク、磁気テープ、光磁気ディスク、フラッシュメモリ等の情報記憶媒体によってサーバ10に供給されることとしてもよいし、インターネット等のデータ通信網を介してサーバ10に供給されることとしてもよい。以下、サーバ10に備えられる各部の機能の詳細について説明する。
データ格納部110は、プロトタイプベースのオブジェクトの情報を管理する。ここで、プロトタイプベースのオブジェクトには、権限情報が関連付けられたアクセストークンと呼ばれる権限オブジェクトを含む。プロトタイプベースのオブジェクトは変更可能(ミュータブル)なオブジェクトであり、典型的にはランダムに生成されたIDで識別される。
図3には、サーバ10により管理されるプロトタイプベースのオブジェクトの具体例を示した。図3に示される例においては、プロトタイプベースのオブジェクトの親子関係を接続した木構造データを示している。
図3に示されるように、「root」オブジェクトD1の子オブジェクトとして、「api」オブジェクトD11、「vendor」オブジェクトD12、が設けられている。さらに、「api」オブジェクトD11の子オブジェクトとして、「authLicenseScope」オブジェクトD111、「verifyTokenScope」オブジェクトD112が設けられている。
また、「vendor」オブジェクトD12の子オブジェクトとして、「application」オブジェクトD121、「vendorToken」オブジェクトD122が設けられている。
また、「application」オブジェクトD121の子オブジェクトとして、「user」オブジェクトD1211、「tenant」オブジェクトD1212、「verifyToken」オブジェクトD1213、「applicationToken」オブジェクトD1214が設けられている。
また、「user」オブジェクトD1211の子オブジェクトとして、「licenseToken」オブジェクトD12111が設けられている。
また、「tenant」オブジェクトD1212の子オブジェクトとして、「userInTenant」オブジェクトD12121、「tenantToken」オブジェクトD12122が設けられている。
また、「userInTenant」オブジェクトD12121の子オブジェクトとして、「licenseToken」オブジェクトD121211が設けられている。
図3に示した例において、「authLicenseScope」オブジェクトD111はライセンス認証を許可するスコープ、「verifyTokenScope」オブジェクトD112はアクセストークンの検証を許可するスコープに相当する。
図3に示されるオブジェクトのうち、「application」オブジェクトD121は、インストールの対象となるアプリケーションに相当する。また、「user」オブジェクトD1211は、インストールの対象となるアプリケーションのライセンシーのユーザに相当する。そして、「licenseToken」オブジェクトD12111は、ユーザに付与されたライセンスに相当する。
また、図3に示されるオブジェクトのうち、「verifyToken」オブジェクトD1213は、「application」オブジェクトD121の作成時に生成され、インストール対象となるアプリケーションのインストーラに埋め込まれるアクセストークンとなる。
また、図3に示されるオブジェクトのうち、「tenant」オブジェクトD1212は、アプリケーションのテナント契約者に相当する。そして、「userInTenant」オブジェクトD12121は、テナントに属するアプリケーションのライセンシーに相当する。そして、「licenseToken」オブジェクトD121211は、「userInTenant」オブジェクトD12121に付与されたライセンスに相当する。
以上のプロトタイプベースのオブジェクトの関係は、例えば以下に示すオブジェクト管理テーブル111とバリュー管理テーブル112に記憶されるデータにより管理可能となっている。
すなわち、本実施形態では、データ格納部110には、オブジェクト管理テーブル111と、バリュー管理テーブル112が含まれ、プロトタイプベースのオブジェクトの情報を、オブジェクト管理テーブル111と、バリュー管理テーブル112に格納して管理している。
図4には、オブジェクト管理テーブル111の一例を、そして図5にはバリュー管理テーブル112の一例をそれぞれ示した。
図4に示されるように、オブジェクト管理テーブル111には、プロトタイプベースのオブジェクトの識別情報であるオブジェクトID、オブジェクトの親(プロトタイプ)オブジェクトの識別情報であるプロトタイプID、オブジェクトが有効化されているか否か(Tが有効、Fが無効)を示す有効化フラグ、オブジェクトの属性情報が関連づけて記憶される。また、オブジェクトの属性情報には、オブジェクトの型を示すtype、オブジェクトのデータ内容を格納したデータオブジェクトの識別情報を表すetag、オブジェクトの名称を格納したname、オブジェクトの生成日時を表すtimeを含む。なお、プロトタイプベースのオブジェクトのデータ構成は、図4に示された例に限定されるものではなく、上述した要素以外の要素を含み構成されていても構わない。
また、図5に示されるように、バリュー管理テーブル112には、etagの値に関連づけて、etagの内容を格納したバリューが関連づけられている。
例えば、アクセストークンであればetagのバリューとして、{“owner”: owner(オーナー)のオブジェクトID、“client”: client(クライアント)のオブジェクトID、“スコープ”:認可された処理の範囲}の形式の情報を含む。本実施形態に係る情報処理システム1では、端末装置から受け付ける処理要求にはアクセストークンが添付されるが、ここで、アクセストークンを検証することにより、オーナー、クライアント、スコープの情報が特定される。なお、オーナーが処理のリクエスタ、クライアントが処理の代理リクエスタとして扱われる。
リクエスト受付部120は、端末装置30からリクエストを受け付ける。例えば、リクエスト受付部120は、端末装置30からデータ格納部110で管理されるオブジェクトの処理に関するリクエストを受け付けることとしてよい。なお、リクエスト受付部120は、端末装置30からリクエストとともにリクエストに係るアクセストークンの情報を受け付けることとしてよい。この際、リクエスト受付部120は、例えば端末装置30からHTTPリクエストの形式でリクエストを受け付けることとしてよい。
権限オブジェクト検証部130は、リクエスト受付部120で受け付けたリクエストに係る権限オブジェクト(アクセストークン)の情報を取得し、取得した権限オブジェクトを検証する。例えば、権限情報取得部13は、アクセストークンの情報は、HTTPリクエストのAuthorizationフィールドから得てもよいし、アクセストークンの情報を含むクッキーが存在すれば、クッキーから得てもよい。
権限オブジェクト検証部130は、上記取得したアクセストークン(権限オブジェクト)の情報が正当なものであるか否かを検証する。以下、権限オブジェクト検証部130による検証処理の具体例について説明する。
まず、権限オブジェクト検証部130は、権限情報取得部13で取得されたアクセストークンのIDが、データ格納部110で管理するオブジェクト管理テーブル111に含まれているか否か(第1の条件の適否)を判断し、含まれていない場合には検証失敗と判断する。
次に、権限オブジェクト検証部130は、第1の条件が満たされている場合に、アクセストークンのデータ形式(タイプ)が所定の型(すなわち、application/json)であるか否か(第2の条件の適否)を判断し、所定の型でない場合には検証失敗と判断する。すなわち、アクセストークンのetagについてバリュー管理テーブル112に記憶されるバリューが所定の型(owner、client、scopeを指定したデータ形式)でない場合には、検証失敗と判断する。
次に、権限オブジェクト検証部130は、第2の条件が満たされている場合に、アクセストークンのバリューの値(owner、client、scopeの値)を取得し、owner、client、scopeのそれぞれの値がデータ格納部110で管理されるデータであるか否か(第3の条件の適否)を判断し、いずれかの値がデータ格納部110で管理されるデータでない場合には検証失敗と判断する。
次に、権限オブジェクト検証部130は、第3の条件が満足されている場合に、データ格納部110からアクセストークンのプロトタイプの情報を取得し、アクセストークンのプロトタイプが、アクセストークンのオーナーと一致しているか、オーナーのプロトタイプチェーン(オーナーの親、さらにその親へとオーナーの祖先を順に接続した経路)に含まれるか否か(第4の条件の適否)を判断し、上記のいずれにも合致しない場合には検証失敗と判断する。なお、以上の第1乃至第4の条件を満足した場合には、権限オブジェクト検証部130は、アクセストークンの検証を成功と判断することとしてよい。
権限オブジェクト検証部130は、上記の検証の結果と、アクセストークンにより認可されているスコープ(処理の範囲)の情報と、受け付けたリクエストをリクエスト処理部150に通知する。
リクエスト処理部150は、リクエスト受付部120で受け付けたリクエストについて取得したアクセストークン(権限オブジェクト)についての権限オブジェクト検証部130から通知された検証結果と、該受け付けたアクセストークンについて認可されたスコープ(処理の範囲)に基づいて、リクエスト受付部120で受け付けたリクエストの処理を制御する。例えば、リクエスト処理部150は、リクエスト受付部120で受け付けたリクエストに係るアクセストークンについての検証結果が検証失敗である場合には、リクエストに係る処理を不受理としてエラーを処理結果提供部160に出力することとしてよい。また、リクエスト処理部150は、リクエスト受付部120で受け付けたリクエストに係るアクセストークンについての検証結果が検証成功である場合には、リクエスト受付部120で受け付けたリクエストを、該リクエストに関して受け付けたアクセストークンについて認可されたスコープに基づいて処理し、その実行結果を処理結果提供部160に出力する。
例えば、リクエスト処理部150は、受け付けたリクエストに基づいて、オブジェクト管理部140にオブジェクトの生成、読み出し、更新、削除を依頼し、オブジェクト管理部140から処理結果を受け取る。
具体的には、リクエスト処理部150は、端末装置30から受け付けたリクエストに基づいて、アプリケーションオブジェクトの生成、アプリケーションオブジェクトの子オブジェクトでありアプリケーションインストール時のライセンストークンの検証を行う権限が定められた検証用トークンの生成、ライセンシーに相当するユーザやテナントに対応するライセンシーオブジェクトの生成、ライセンシーオブジェクトの子でありライセンシーに付与するライセンスを示すライセンストークンの生成等をオブジェクト管理部140に実行させる。
例えば、図3における「application」オブジェクトD121が上記の「アプリケーションオブジェクト」に相当し、「verifyToken」オブジェクトD1213が上記の「検証用トークン」に相当する。また、図3における「user」オブジェクトD1211や「tenant」オブジェクトD1212が上記の「ライセンシーオブジェクト」に相当し、「license」オブジェクトD12111,D121211が上記の「ライセンストークン」に相当する。
例えば、本実施形態においては、リクエスト処理部150は、アプリケーションベンダー内の管理者が操作する第1端末装置30−1から受けつけた要求に応じて、上記のアプリケーションオブジェクト、検証用トークン、ライセンシーオブジェクト、ライセンストークンを生成する制御を実行することとしてよい。
オブジェクト管理部140は、データ格納部110により管理されるオブジェクトの情報を管理する。例えば、オブジェクト管理部140は、リクエスト処理部150から受け付ける要求に基づいて、オブジェクト管理テーブル111、バリュー管理テーブル112に対して情報の追加、読み出し、更新、削除等の処理を実行する。
また、オブジェクト管理部140は、配信用オブジェクト生成部を含み、リクエスト処理部150から受け付ける配信用オブジェクトの生成要求に基づいて、マスターデータの子(又は子孫)である配信用オブジェクトを生成する。
また、オブジェクト管理部140は、リクエスト処理部150から受け付ける配信用オブジェクトの読み出し要求に基づいて、配信用オブジェクトの情報を読み出す。ここで、オブジェクト管理部140は、配信用オブジェクトの有していないデータ項目については、配信用オブジェクトの親(又は先祖)のオブジェクトのデータ項目の情報を参照し、配信用オブジェクトの情報として返す。
また、オブジェクト管理部140は、リクエスト処理部150から受け付ける配信用オブジェクトの更新要求に基づいて、配信用オブジェクトの内容を更新する。また、オブジェクト管理部140は、リクエスト処理部150から受け付ける配信用オブジェクトの削除要求に基づいて、配信用オブジェクトを削除する。
処理結果提供部160は、リクエスト処理部150による処理結果を、リクエストの要求元である端末装置30に対して提供する。
例えば、本実施形態においては、処理結果提供部160は、第1端末装置30−1に対して、第1端末装置30−1から受け付けた要求に基づいて生成したアプリケーションオブジェクト、検証用トークン、ライセンシーオブジェクト、ライセンストークンの情報(オブジェクトID等)を提供することとしてよい。
そして、第1端末装置30−1は、アプリケーションをインストールするためのインストーラの中に、上記提供を受けた検証用トークンを書き換え不可の状態で書き込むことで、アプリケーションのインストーラに、検証用トークンを埋め込むこととしてよい。そして、アプリケーションのベンダーは、上記検証用トークンが埋め込まれたインストーラを、ライセンシー側の装置(第2端末装置30−2や第3端末装置30−3等)に提供することとしてよい。なお、インストーラの提供は、インストーラを格納した情報記憶媒体を配布したり、第1端末装置30−1又は他の装置から、ライセンシー側の装置にネットワーク経由で配信したりすることとしてよい。
また、第1端末装置30−1は、ライセンシーとのライセンス契約の締結(例えば課金処理の完了)を契機として、ライセンシーオブジェクト及びライセンストークンの生成をサーバに要求し、それにより生成されたライセンシーオブジェクトとライセンストークンの情報を取得する。そして、第1端末装置30−1は、ライセンシー側の装置(第2端末装置30−2や第3端末装置30−3等)に、ライセンストークンの情報を提供する。
そして、ライセンシー側の装置では、検証用トークンが埋め込まれたインストーラと、ライセンストークンに基づいて、アプリケーションのインストールを実行する。以下においては、図2に基づき、上記のインストール処理に関し端末装置30に備えられる機能について説明する。
[2.2.端末装置30の機能]
図2に示されるように、端末装置30は、インストール制御部310、ライセンス認証要求部320、トークン検証要求部330、処理結果取得部340を備える。なお、以下説明する例においては、端末装置30の記憶部32には、検証用トークンが埋め込まれたインストーラと、ライセンストークンの情報が記憶されていることとする。
端末装置30に備えられる上記の各部の機能は、端末装置30に備えられる制御部31が、記憶部32やコンピュータ読み取り可能な情報記憶媒体に格納されたプログラムを読み込み実行することで実現されるものとしてよい。なお、プログラムは光ディスク、磁気ディスク、磁気テープ、光磁気ディスク、フラッシュメモリ等の情報記憶媒体によって端末装置30に供給されることとしてもよいし、インターネット等のデータ通信網を介して端末装置30に供給されることとしてもよい。以下、端末装置30に備えられる各部の機能の詳細について説明する。
インストール制御部310は、主に端末装置30の制御部31及び記憶部32により実現され、検証用トークンが埋め込まれたインストーラと、ライセンストークンに基づくインストール処理を制御する。
インストール制御部310は、ライセンストークンに基づくライセンス認証の実行をライセンス認証要求部320に指示する。また、インストール制御部310は、インストーラに埋め込まれた検証用トークンに基づくトークン検証の実行をトークン検証要求部330に指示する。
ライセンス認証要求部320は、主に端末装置30の制御部31、記憶部32及び通信部33により実現され、インストール制御部310から受け付けたライセンストークンに基づくライセンス認証を、サーバに対して要求する。例えば、ライセンス認証要求部320は、ライセンストークンのID(オブジェクトID)をサーバ10のリクエスト受付部120に対して送信することで、上記の要求を実行することとしてよい。
例えば、サーバ10においては、権限オブジェクト検証部130によりライセンストークンが正当と検証され、ライセンストークンで指定されるクライアント(委譲先情報)がアクセストークンで指定されるオーナー(所有者情報)の子孫である場合には、認証成功とし、そうでない場合には認証失敗とすることとしてよい。そして、処理結果提供部160は、ライセンストークンの認証結果を示す認証結果情報を、認証要求を受け付けた端末装置30に対して送信する。
トークン検証要求部330は、主に端末装置30の制御部31、記憶部32及び通信部33により実現され、インストール制御部310から受け付けた検証用トークンに基づくトークン検証を、サーバに対して要求する。例えば、ライセンス認証要求部320は、検証用トークンのID(オブジェクトID)をサーバ10のリクエスト受付部120に対して送信することで、上記の要求を実行することとしてよい。
なお、サーバ10においては、権限オブジェクト検証部130により検証用トークンの検証が実行され、検証用トークンの検証が成功した検証成功、検証用トークンの検証が失敗した場合には検証失敗とした検証結果情報を、トークン検証要求を受け付けた端末装置30に対して送信する。
処理結果取得部340は、主に端末装置30の制御部31、記憶部32及び通信部33により実現され、サーバ10の処理結果提供部160から提供される情報を取得する。
例えば、処理結果取得部340は、処理結果提供部からライセンストークンの認証結果を示す認証結果情報、及び検証用トークンの検証結果を示す検証結果情報を受信し、取得することとしてよい。また、処理結果取得部340は、取得した認証結果情報及び検証結果情報をインストール制御部310に提供することとしてよい。
インストール制御部310は、処理結果取得部340から提供された認証結果情報及び検証結果情報に基づき、ライセンストークンの認証が成功し、且つ検証用トークンの検証が成功した場合に、インストーラに基づくインストール処理を実行し、ライセンストークンの認証と検証用トークンの検証のいずれかが失敗した場合には、インストーラに基づくインストール処理を中止することとしてよい。
[3.処理の一例についての説明]
次に、図6乃至図10に示されたシーケンス図に基づいて、情報処理システム1で実行される処理の一例について詳細に説明する。
[3.1.アプリケーションの登録処理]
まず、図6に示したシーケンス図に基づいて、アプリケーションベンダーの第1端末装置30−1とサーバ10とにより実行される、アプリケーションの登録処理の一例について説明する。図6のフローにおいては、第1端末装置30−1は「vendor」オブジェクトD12について子オブジェクトの生成、取得、更新、削除が可能なスコープが定められたアクセストークン(T1)である「vendorToken」オブジェクトD122を有することとする。
図6に示されるように、第1端末装置30−1は、アクセストークンT1を用いて、「vendor」オブジェクトD12の子オブジェクトとして、アプリケーションオブジェクト(「application」オブジェクトD121に対応)の作成をサーバ10に対して指示する(S300)。
サーバ10は、第1端末装置30−1からアプリケーションオブジェクトの作成指示を受け付けると(S100)、アクセストークンT1を検証し、検証が成功した場合に、アプリケーションオブジェクトを作成する(S101)。そして、サーバ10は、上記作成したアプリケーションオブジェクトのID(オブジェクトID)を第1端末装置30−1に対して送信する(S102)。
第1端末装置30−1は、サーバ10から送信されるアプリケーションオブジェクトのIDを受信する(S301)。
次に、第1端末装置30−1は、アクセストークンT1を用いて、アプリケーションオブジェクトの子オブジェクトを作るためのアクセストークンT2(「applicationToken」オブジェクトD1214に対応)の作成をサーバ10に対して指示する(S302)。
サーバ10は、第1端末装置30−1からアクセストークンT2の作成指示を受け付けると(S103)、アクセストークンT1を検証し、検証が成功した場合に、アクセストークンT2(アプリケーショントークン)を作成する(S104)。そして、サーバ10は、上記作成したアクセストークンT2のID(オブジェクトID)を第1端末装置30−1に対して送信する(S105)。
第1端末装置30−1は、サーバ10から送信されるアクセストークンT2のIDを受信する(S303)。そして、第1端末装置30−1は、アクセストークンT2を用いて、アプリケーションオブジェクトの子オブジェクトとして、ライセンストークンを検証するためのアクセストークンである検証用トークンの作成をサーバ10に対して指示する(S304)。
サーバ10は、第1端末装置30−1から検証用トークンの作成指示を受け付けると(S106)、アクセストークンT2を検証し、検証が成功した場合に、アプリケーションオブジェクトの子オブジェクトとして検証用トークンを作成する(S107)。そして、サーバ10は、上記作成した検証用トークンのID(オブジェクトID)を第1端末装置30−1に対して送信する(S108)。
第1端末装置30−1は、サーバ10から検証用トークンのIDを受信する(S305)。
第1端末装置30−1は、上記受信した検証用トークンのIDを、アプリケーションのインストーラに埋め込んだ後に、インストーラを第2端末装置30−2に提供することとしてよい。
[3.2.ユーザに対するライセンスの登録処理]
次に、図7に示したシーケンス図に基づいて、第1端末装置30−1とサーバ10により実行される、ライセンシーであるユーザに対しライセンスを登録する処理の一例について説明する。
第1端末装置30−1は、アクセストークンT2(アプリケーショントークン)を用いて、ユーザオブジェクトの作成を、サーバ10に対して指示する(S310)。上記の指示には、ユーザオブジェクトにユーザ属性情報(ユーザ名、メールアドレス等)を設定する指示を含めてよい。
サーバ10は、第1端末装置30−1からユーザオブジェクトの作成指示を受け付けると(S110)、アクセストークンT2を検証し、検証が成功した場合に、ユーザオブジェクトを作成する(S111)。そして、サーバ10は、上記生成したユーザオブジェクトの情報(オブジェクトID)を第1端末装置30−1に対して送信する(S112)。
第1端末装置30−1は、サーバ10からユーザオブジェクトの情報を受信する(S311)。
次に、第1端末装置30−1は、アクセストークンT2(アプリケーショントークン)を用いて、ユーザに付与するライセンスを示すアクセストークンであるライセンストークンの作成を、サーバ10に対して指示する(S312)。上記の指示には、ライセンストークンのオーナーを「application」オブジェクトD121(アプリケーションオブジェクト)、クライアントを「user」オブジェクトD1211(ユーザオブジェクト)、スコープを「authLicenseScope」D111(ライセンス認証用のスコープオブジェクト)に設定する指示を含めてよい。
サーバ10は、第1端末装置30−1からライセンストークンの作成指示を受け付けると(S113)、アクセストークンT2を検証し、検証が成功した場合に、ライセンストークンを作成する(S114)。そして、サーバ10は、上記生成したライセンストークンの情報(オブジェクトID)を第1端末装置30−1に対して送信する(S115)。
第1端末装置30−1は、サーバ10からライセンストークンの情報(オブジェクトID)を受信する(S313)。
第1端末30−1は、ライセンシーとなるユーザとのライセンス契約を機に、ユーザから受け付けたユーザ情報に基づいて上記の処理を実行し、その結果受信したライセンストークンの情報(オブジェクトID)を、ユーザ(ライセンシー)の操作する第2端末装置30−2に提供することとしてよい。
[3.3.インストール制御処理]
次に、図8に示されるシーケンス図に基づき、第2端末装置30−1とサーバ10により実行されるアプリケーションのインストール制御処理の一例について説明する。以下のシーケンス例では、第2端末装置30−2は、検証用トークンが埋め込まれたインストーラと、ユーザに対して固有に発行されたライセンストークンとを有していることとする。
図8に示されるように、第2端末装置30−2は、ライセンストークンに基づくライセンス認証処理をサーバ10に対して指示する(S320)。
サーバ10は、ライセンストークンに基づくライセンス認証処理の指示を受け付けると(S120)、ライセンストークンに基づくライセンス認証を実行する(S121)。例えば、サーバ10は、ライセンストークンが正当なアクセストークンであって、ライセンストークンで指定されるクライアント(委譲先情報)がアクセストークンで指定されるオーナー(所有者情報)の子孫である場合には、認証成功とし、そうでない場合には認証失敗とした認証結果を第2端末装置30−2に対して送信する(S122)。
第2端末装置30−2は、サーバ10から認証結果を受信し(S321)、受信した認証結果が認証成功である場合には(S322:Y)、インストーラに埋め込まれた検証用トークンの検証をサーバ10に対して指示する(S323)。
サーバ10は、検証用トークンの検証指示を受け付けると(S123)、検証用トークンを検証し(S124)、その検証結果を第2端末装置30−2に送信する(S125)。
第2端末装置30−2は、サーバ10から検証結果を受信し(S324)、受信した検証結果が検証成功である場合には(S325:Y)、インストーラに基づくアプリケーションのインストール処理を実行する(S323)。
一方、S321で受信した認証結果が認証成功でない場合(S323:N)、S324で受信した検証結果が検証成功でない場合(S325:N)には、エラーとして(S327)、インストーラに基づくアプリケーションのインストール処理を中止する。
なお、上記のインストーラに基づくアプリケーションのインストール処理とは、インストーラに基づいて第2端末装置30−2において、アプリケーションを実行可能な状態とすることをいう。
[3.4.テナントの登録処理]
次に、図9に示したシーケンス図に基づいて、第1端末装置30−1とサーバ10により実行される、ライセンシーであるテナントを登録する処理の一例について説明する。
第1端末装置30−1は、アクセストークンT2(アプリケーショントークン)を用いて、テナントオブジェクトの作成を、サーバ10に対して指示する(S330)。上記の指示には、テナントオブジェクトにテナント管理者の情報(管理者名、メールアドレス等)を設定する指示を含めてよい。
サーバ10は、第1端末装置30−1からテナントオブジェクトの作成指示を受け付けると(S130)、アクセストークンT2を検証し、検証が成功した場合に、テナントオブジェクトを作成する(S131)。そして、サーバ10は、上記生成したテナントオブジェクトの情報(オブジェクトID)を第1端末装置30−1に対して送信する(S132)。
第1端末装置30−1は、サーバ10からテナントオブジェクトの情報を受信する(S331)。
次に、第1端末装置30−1は、アクセストークンT2(アプリケーショントークン)を用いて、テナントに付与する権限を示すアクセストークンであるテナントトークンの作成を、サーバ10に対して指示する(S332)。なお、テナントトークンは、テナントオブジェクトの子孫にオブジェクトを追加し、追加したオブジェクトを削除、更新等可能な権限が定められることとしてよい。例えば、テナントトークンのオーナーを「tenant」オブジェクトD1212(テナントオブジェクト)、「tenant」オブジェクトD1212(テナントオブジェクト)、スコープを「crudScope」に設定することとしてよい。
サーバ10は、第1端末装置30−1からテナントトークンの作成指示を受け付けると(S133)、アクセストークンT2を検証し、検証が成功した場合に、テナントトークンを作成する(S134)。そして、サーバ10は、上記生成したテナントトークンの情報(オブジェクトID)を第1端末装置30−1に対して送信する(S135)。
第1端末装置30−1は、サーバ10からテナントトークンの情報(オブジェクトID)を受信する(S333)。
第1端末30−1は、ライセンシーとなるテナントの管理者に対して、上記テナントトークンの情報を提供することとしてよい。
[3.5.テナント内ユーザに対するライセンス登録処理]
次に、図10に示したシーケンス図に基づいて、テナントの管理者が操作する第3端末装置30−3とサーバ10により実行される、テナント内ユーザに対してライセンスを登録する処理の一例について説明する。
第3端末装置30−3は、テナントトークンを用いて、テナント内ユーザオブジェクト(図3の「userInTenant」オブジェクトD12121に対応する)の作成を、サーバ10に対して指示する(S340)。上記の指示には、テナント内ユーザオブジェクトにユーザ属性情報(ユーザ名、メールアドレス等)を設定する指示を含めてよい。
サーバ10は、第3端末装置30−3からテナント内ユーザオブジェクトの作成指示を受け付けると(S140)、テナントトークンを検証し、検証が成功した場合に、テナント内ユーザオブジェクトを作成する(S141)。そして、サーバ10は、上記生成したテナント内ユーザオブジェクトの情報(オブジェクトID)を第3端末装置30−3に対して送信する(S142)。
第3端末装置30−3は、サーバ10からテナント内ユーザオブジェクトの情報を受信する(S341)。
次に、第3端末装置30−3は、テナントトークンを用いて、テナント内ユーザに付与するライセンスを示すアクセストークンであるライセンストークンの作成を、サーバ10に対して指示する(S342)。上記の指示には、ライセンストークンのオーナーを「tenant」オブジェクトD1212(テナントオブジェクト)、クライアントを「userInTenant」オブジェクトD12121(テナント内ユーザオブジェクト)、スコープを「authLicenseScope」D111(ライセンス認証用のスコープオブジェクト)に設定する指示を含めてよい。
サーバ10は、第3端末装置30−3からライセンストークンの作成指示を受け付けると(S143)、テナントトークンを検証し、検証が成功した場合に、ライセンストークンを作成する(S144)。そして、サーバ10は、上記生成したライセンストークンの情報(オブジェクトID)を第3端末装置30−3に対して送信する(S145)。
第3端末装置30−3は、サーバ10からライセンストークンの情報(オブジェクトID)を受信する(S343)。
第3端末30−3は、テナント内ユーザに対し上記のライセンストークンの情報(オブジェクトID)を提供することとしてよい。テナント内ユーザについての、ライセンストークンに基づくアプリケーションのインストール処理は、図8において説明した処理と同様としてよいため省略する。
[4.本発明の他の形態について]
以下、本発明の他の形態について説明する。図11には、図3に示すオブジェクトの構造のうち、「tenant」オブジェクトD1212の子孫のオブジェクトの構成を変更したものを示す。
図11に示されるように、「tenant」オブジェクトD1212には、「userInTenant」オブジェクトD12121、「tenantToken」オブジェクトD12122に加えて、「LicenseUsage」オブジェクトD12123、「LogScope」オブジェクトD12124が設けられている。
ここで、「LicenseUsage」オブジェクトD12123には、「userInTenant」オブジェクトD12121に対応するユーザのインストール処理、アプリケーションの起動、アプリケーションの動作等に関するログ情報が記録される。
そして、「LogScope」オブジェクトD12124は、認証処理に加えてログ情報を記録するための処理が定められたスコープである。
そして、「userInTenant」オブジェクトD12121の子オブジェクトである「licenseToken」オブジェクトD121211に対しては、スコープに「LogScope」オブジェクトD12124を設定する点で、図3に示したオブジェクトの例とは相違するが、他の点では共通する。
なお、図11に示したオブジェクトの構成例を採用する場合に、テナント内ユーザにライセンスを登録するときには、図10に示すシーケンス図において、ライセンストークンのスコープを「LogScope」オブジェクトD12124に設定するようにする点を除けば、図10のシーケンス図と同様の処理を採用することができる。
また、テナント内ユーザのインストール処理に関しても、ライセンストークンのスコープによる処理が異なるものの、図8と同様のシーケンスにより実現できるため省略する。
なお、以上説明した実施形態は具体例として示したものであり、本明細書にて開示される発明をこれら具体例の構成やデータ格納例そのものに限定するものではない。当業者はこれら開示された実施形態に種々の変形、例えば、データ構造、処理の実行順を変更したりしてもよい。本明細書にて開示される発明の技術的範囲は、そのようになされた変形をも含むものと理解すべきである。
例えば、上記の情報処理システム1においては、ライセンストークンを用いて、アプリケーションに対応するクラウドサービス(図1のクラウドサービスサーバ50)でのOAuth認証を行うようにしてもよい。
例えば、端末装置30のユーザが、クラウドサービスサーバ50のサービスを利用したい場合には、クラウドサービスとの連携を指示すると、認証情報をサーバ10から受け取ることに対する許可をユーザに求めることとする。ユーザにより許可されると、クラウドサービスサーバ50からサーバ10に対してリクエストに応じて、サーバ10は、ユーザ情報を返却することとする。
例えば、クラウドサービスサーバ50は、ユーザ情報を元に特定された対象フォルダの情報を、端末装置30に提供することとしてよい。例えば、端末装置30では、クラウドサービスとの連携フォルダに、ユーザ固有のクラウドサービスサーバ50で管理されるユーザのフォルダを表示するようにしてよい。上記の構成によれば、端末装置30にクラウドサービスのアカウント情報を保存する必要がないため、アカウント情報の漏洩リスクが低減する。また、初回認証以降は、クラウドサービスサーバ50からサーバ10に対して確認が行われる、ユーザが毎回IDやパスワードを入力する手間がなくなる。