以下、図面に基づいて本発明の実施の形態を説明する。図2は、本発明の実施の形態におけるシステム構成例を示す図である。図2において、1以上のユーザ端末10は、無線LAN(Local Area Network)等の無線通信を介して連携管理サーバ20と通信可能である。また、各ユーザ端末10は、ガジェット30a及びガジェット30b等、1以上のガジェット30と、無線LAN又はBluetooth(登録商標)等の無線通信を介して通信可能である。なお、説明の便宜上、図2に示されるシステム構成は、或る企業内(以下、「企業A」という。)において構築されていることとする。
ユーザ端末10は、ユーザによって直接操作される端末である。ユーザ端末10の一例として、スマートフォン及びタブレット端末等のスマート端末が挙げられる。但し、PC(Personal Computer)等、他の種類の情報処理装置であって、無線通信が可能な情報処理装置が、ユーザ端末10として利用されてもよい。本実施の形態において、ユーザ端末10は、無線通信を介してガジェット30と連携した処理を実行する。なお、ユーザ端末10のユーザは、例えば、企業Aの従業員である。
ガジェット30は、ユーザ端末10と連携する外部機器の一例である。例えば、ユーザ端末10のカメラ機能、ストレージ機能、又はディスプレイ機能等を拡張可能な周辺機器が、ガジェット30として用いられてもよい。又は、エアコン等の家電機器が、ガジェット30として用いられてもよい。
本実施の形態において、一部のガジェット30は、他のガジェット30を収容可する能力を有するガジェット(以下、「拡張デバイス」という。)であるとする。他のガジェット30を収容する能力とは、例えば、ユーザ端末10と他のガジェット30との通信を中継する能力である。例えば、無線通信のアクセスポイントとして機能するガジェットが、拡張デバイスとされる。拡張デバイスの具体例として、ユーザ端末10の充電スタンドやWiFi(Wireless Fidelity)(登録商標)ルータ等が挙げられる。また、スマートフォンやタブレット端末等が拡張デバイスとして用いられてもよい。図2においては、ガジェット30zが、拡張デバイス30zである例が示されている。以下、ガジェット30zを、拡張デバイス30zという。但し、単に、ガジェット30というとき、ガジェット30には拡張デバイス30zも含まれる。
連携管理サーバ20は、各ユーザ端末10がガジェット30と(ガジェット30と接続)するために必要な情報や、各ユーザ端末10にインストールされたWebアプリケーション(以下、「Webアプリ」という。)との連携(アクセス)が許可されるガジェット30を示す情報等を管理するコンピュータである。すなわち、本実施の形態では、企業Aのシステム管理者によって、各ユーザ端末10にインストールされるWebアプリの中で、各ガジェット30との連携が許可されるWebアプリが判断される。
なお、Webアプリとは、HTML(HyperText Markup Language)、CSS(Cascading Style Sheets)、及びJavaScript(登録商標)等を構成要素とするアプリケーションである。本実施の形態において、Webアプリとは、Packaged Web apps形式のWebアプリをいう。
図3は、本実施の形態におけるユーザ端末のハードウェア構成例を示す図である。図3において、ユーザ端末10は、CPU101、メモリ102、補助記憶装置103、タッチパネル104、及び無線通信装置105等を有する。
補助記憶装置103は、ユーザ端末10にインストールされたプログラム等を記憶する。メモリ102は、プログラムの起動指示があった場合に、補助記憶装置103からプログラムを読み出して記憶する。CPU101は、メモリ102に記憶されたプログラムに従ってユーザ端末10に係る機能を実現する。
タッチパネル104は、入力機能と表示機能との双方を備えた電子部品であり、情報の表示や、ユーザからの入力の受け付け等を行う。タッチパネル104は、表示装置111及び入力装置112等を含む。
表示装置111は、液晶ディスプレイ等であり、タッチパネル104の表示機能を担う。入力装置112は、表示装置111に対する接触物の接触を検出するセンサを含む電子部品である。接触物の接触の検出方式は、静電方式、抵抗膜方式、又は光学方式等、公知の方式のいずれであってもよい。なお、接触物とは、タッチパネル104の接触面(表面)に接触する物体をいう。斯かる物体の一例として、ユーザの指や専用又は一般のペン等が挙げられる。
無線通信装置105は、無線通信を行うために必要とされる電子部品である。
図4は、本発明の実施の形態における連携管理サーバ及びユーザ端末の機能構成例を示す図である。図4において、連携管理サーバ20は、情報送信部21及び端末認証部22を有する。これら各部は、連携管理サーバ20にインストールされたプログラムが、連携管理サーバ20のCPUに実行させる処理により実現される。連携管理サーバ20は、また、端末情報記憶部23、許可リスト記憶部24、及びガジェット一覧記憶部25等を利用する。これら各記憶部は、連携管理サーバ20の補助記憶装置、又は連携管理サーバ20にネットワークを介して接続可能な記憶装置等を用いて実現可能である。
情報送信部21は、許可リスト記憶部24に記憶されている情報(以下、「許可リスト」という。)や、ガジェット一覧記憶部25に記憶されている情報(以下、「ガジェット一覧情報」という。)を、ユーザ端末10からの要求に応じて返信する。許可リストとは、ユーザ端末10にインストールされたWebアプリ13のうち、各ガジェット30との連携が許可される(各ガジェット30へのアクセスが許可される)Webアプリ13を示す情報である。ガジェット一覧情報は、ガジェット30ごとのガジェット情報の一覧である。ガジェット情報とは、ガジェット30の属性情報である。ガジェット情報には、ユーザ端末10がガジェット30と接続するために必要とされる情報も含まれる。例えば、SSID(Service Set Identifier)及びパスワード等がガジェット情報に含まれる。
端末認証部22は、許可リスト及びガジェット一覧情報を要求するユーザ端末10に関して認証を行う。認証は、端末情報記憶部23を参照して行われる。
ユーザ端末10は、アプリ起動部11、ブラウザ部12、Webアプリ13a及び13b等の1以上のWebアプリ13、ローカルサーバ部14a及び14b等のWebアプリ13ごとのローカルサーバ部14、ガジェット検出部15、設定部16、並びにAPIサーバ部17等を有する。これら各部は、ユーザ端末10にインストールされた1以上のプログラムがCPU101に実行させる処理により実現される。ユーザ端末10は、また、許可リストキャッシュ部121、ガジェット一覧キャッシュ部122、及び登録情報記憶部123等の記憶部を有する。これら各記憶部は、補助記憶装置103又はメモリ102等を用いて実現可能である。
アプリ起動部11は、ユーザ端末10にインストールされているWebアプリ13のうち、起動対象として選択されたWebアプリ13の起動処理を実行する。アプリ起動部11は、Webアプリ13の起動処理の過程において、起動対象のWebアプリ13のコンテンツデータにIPアドレス及びボート番号との組み合わせ(すなわち、URL(Uniform Resource Locator))を割り当てる。Webアプリ13のコンテンツデータとは、HTMLファイル、CSSファイル、及びJavaScript(登録商標)ファイル等の集合であり、補助記憶装置103に記憶されている。アプリ起動部11は、また、起動処理において、起動対象のWebアプリ13に対応するローカルサーバ部14のスレッドを生成する。
ブラウザ部12は、Webブラウザとして機能する。ブラウザ部12は、Webアプリ13の実行環境でもある。すなわち、ブラウザ部12は、Webアプリ13のコンテンツデータの内容を解析し、当該コンテンツデータに基づく画像の表示や、当該コンテンツデータに基づく処理の実行等を行う。なお、ブラウザ部12は、CSP(Content Security Policy)に基づいて、各Webアプリ13による外部へのアクセスを制限してもよい。すなわち、各Webアプリ13による外部へのアクセス先は、基本的に、Webアプリ13ごとのホワイトリストに含まれているIPアドレスに制限されてもよい。
ローカルサーバ部14は、ユーザ端末10内においてWebサーバとして機能する。すなわち、ローカルサーバ部14は、ソケット通信用のポート(以下、「サーバポート」という。)を生成(オープン)し、サーバポートへのHTTP(HyperText Transfer Protocol)リクエストを待機する。ローカルサーバ部14は、サーバポートを介して、ブラウザ部12からのWebアプリ13のコンテンツデータの取得要求(HTTPリクエスト)が受信されると、当該コンテンツデータを含む応答(HTTPレスポンス)をブラウザ部12に返信する。或るローカルサーバ部14のサーバポートのIPアドレスは、当該ローカルサーバ部14に対応するWebアプリ13のコンテンツデータに対して割り当てられたIPアドレスと同じである。したがって、コンテンツデータの取得要求には、当該コンテンツデータに割り当てられたIPアドレスが指定される。その結果、ブラウザ部12は、当該コンテンツデータのダウンロード元が、当該IPアドレスに係るドメインに属するWebアプリ13であると認識する。なお、本実施の形態において、各ローカルサーバ部14のサーバポートのIPアドレスは共通する。
APIサーバ部17は、無線通信を介してガジェットと接続し、各Webアプリ13によるガジェット30へのアクセスを仲介又は代行する。具体的には、APIサーバ部17は、Webアプリ13からのガジェット30へのアクセス要求を受け付けるためのインタフェースとして、ソケット通信用のポート(以下、「APIポート」という。)を生成(オープン)する。APIポートは、ガジェット30ごとに生成される。APIポートには、当該APIポートのオープンを要求したWebアプリ13のコンテンツデータと同じIPアドレスが割り当てられてもよい。
CSPに基づいて、Webアプリ13のアクセス先が制限される場合、Webアプリ13のアクセス先は、ブラウザ部12によって、基本的には当該Webアプリ13に対応するホワイトリスト(CSPのホワイトリスト)の範囲に制限される。但し、CSPにおいても、同一オリジンポリシー(Same-Origin Policy)が有効である。すなわち、ブラウザ部12は、Webアプリ13のオリジン(コンテンツデータのダウンロード元)のIPアドレスに係るドメインの範囲内であれば、ホワイトリストに拘わらず、当該Webアプリ13によるアクセスを許可する。したがって、或るWebアプリ13が、APIポートにアクセスしようとした場合、当該APIポートのIPアドレスが、当該Webアプリ13のコンテンツデータのIPアドレスと同じであれば、当該アクセスは、ブラウザ部12によって許可される。ブラウザ部12から見れば、当該アクセスは、当該Webアプリ13のオリジンと同じドメイン内に対するアクセスに該当するからである。
APIサーバ部17は、Webアプリ13によって或るAPIポートがアクセスされると、当該APIポートに対応するガジェット30にアクセスする。すなわち、当該ガジェット30が公開しているAPIを構成するメソッドの呼び出しが行われる。その結果、Webアプリ13は、実質的にガジェット30にアクセスすることができる。なお、ガジェット30が公開しているAPIを構成するメソッドのうち、APIサーバ部17が呼び出すべきメソッドは、Webアプリ13によって指定される。
ガジェット検出部15は、無線通信を介してガジェット30の存在を検出する。設定部16は、ガジェット検出部15によってガジェット30が検出されると、連携管理サーバ20から許可リスト及びガジェット一覧情報をダウンロードする。ダウンロードされた情報は、許可リストキャッシュ部121又はガジェット一覧キャッシュ部122に記憶される。設定部16は、また、検出されたガジェット30に対応するAPIポートの生成を、APIサーバ部17に要求する。登録情報記憶部123は、拡張デバイス30zに関する属性情報を記憶する。
図5は、本発明の実施の形態における拡張デバイスの機能構成例を示す図である。図5において、拡張デバイス30zは、ビーコン生成部31、デバイス管理部32、拡張サーバ部33、中継サーバ部34、及び仲介部35等を有する。これら各部は、拡張デバイス30zにインストールされた1以上のプログラムが、拡張デバイス30zのCPUに実行させる処理により実現される。拡張デバイス30zは、また、ドライバ記憶部36、共通鍵記憶部37、及びポート対応記憶部38等を有する。これら各記憶部は、拡張デバイス30zのメモリ又は補助記憶装置等を用いて実現可能である。
ビーコン生成部31は、拡張デバイス30zの存在をユーザ端末10に通知するためのビーコンを生成し、生成されたビーコンを送信する。デバイス管理部32は、拡張デバイス30zにガジェット30を収容するための処理を制御する。拡張サーバ部33は、拡張デバイス30zに収容されたガジェット30のAPIを呼び出すためのソケット通信用のポート(以下、「拡張ポート」という。)を生成する。拡張ポートは、ユーザ端末10におけるAPIポートと同様の役割を担い、拡張デバイス30zに収容されたガジェット30ごとに生成される。
中継サーバ部34は、ユーザ端末10と、拡張デバイス30zに収容されたガジェット30に対応するAPIポートとを中継するためのソケット通信用のポート(以下、「中継ポート」という。)を生成する。すなわち、中継ポートは、拡張ポートに対するインタフェースをユーザ端末10に提供するためのポートであり、ガジェット30ごとに生成される。仲介部35は、拡張ポートと中継ポートとの対応関係を管理し、拡張ポートに対するメッセージを、中継ポートに伝達する。当該対応関係を示す情報は、ポート対応記憶部38に記憶される。
ドライバ記憶部36は、拡張デバイス30zのドライバを記憶する。ドライバについては、後述される。共通鍵記憶部37は、ユーザ端末10との間で共有される暗号鍵(共通鍵)を記憶する。
以下、ユーザ端末10が実行する処理手順について説明する。本実施の形態において、ユーザ端末10は、「登録モード」及び「運用モード」の二つの状態を有する。登録モードとは、拡張デバイス30zとの連携の準備のための処理が実行されるモードである。運用モードとは、ガジェット30との連携が行われるモードである。そこで、まず、登録モードにおいて実行される処理について説明する。本実施の形態では、不正な拡張デバイス30zとの連携が回避されるようにするために、ユーザ端末10と拡張デバイス30zとの間に信頼関係を構築するための処理が、登録モードにおいて実行される。当該処理を、「登録処理」という。
図6及び図7は、登録処理の処理手順の一例を説明するための図である。拡張デバイス30zのビーコン生成部31は、定期的に、ビーコンによって送信するデータ(以下、「ビーコンデータ」という。)を生成し(S101〜S103)、生成されたビーコンデータをビーコンによって送信(ブロードキャスト)している(S104)。より詳しくは、共通鍵記憶部37に1以上の共通鍵が記憶されている場合(S101でYes)、ビーコン生成部31は、当該共通鍵に基づいて生成されるワンタイムコードを含むビーコンを生成する(S102)。一方、共通鍵記憶部37に共通鍵が記憶されていない場合(S101でNo)、ビーコン生成部31は、ワンタイムコードを生成できないため、ワンタイムコードを含まないビーコンを生成する(S103)。ワンタイムコードとは、一定期間に限り有効なパスワードである。
図8は、ビーコンデータの構成例を示す図である。図8において、ビーコンデータは、MACアドレス、データ長、データ部、及びCRC(Cyclic Redundancy Check)等を含む。MACアドレスは、ビーコンの宛先のMACアドレスである。データ長は、データ部のデータサイズである。データ部は、ビーコンデータの本体部分であり、例えば、ドライバ名、ID、MAC値、収容可能属性、収容可能数、及びワンタイムコード等を含む。
ドライバ名は、ビーコンの送信元の拡張デバイス30zの識別名であると共に、当該拡張デバイス30zに対するドライバの識別名でもある。ドライバとは、当該拡張デバイス30zと接続するために必要な情報を含むデータである。IDは、無線通信において当該拡張デバイス30zを識別するための情報である。例えば、SSID(Service Set Identifier)がIDとして用いられてもよい。MAC値は、当該拡張デバイス30zのMACアドレスである。収容可能属性は、他のガジェット30の収容の可否を示す情報であり、true又はfalseの値をとる。trueは、他のガジェット30を収容可能であることを示す。falseは、他のガジェットを収容できないことを示す。拡張デバイス30zの場合、収容可能属性の値は、trueである。収容可能数は、現時点において収容可能なガジェット30の残りの数であり、収容可能数の値は、収容可能属性の値がtrueである場合に有効である。収容可能数は、例えば、接続方法ごとに値を含む。接続方法とは、例えば、WiFi(登録商標)、Bluetooth、BLE(Bluetooth(登録商標) Low Energy)等、無線通信の種別である。ワンタイムコードは、上記したワンタイムコードである。すなわち、共通鍵が既に記憶されている場合に、ワンタイムコードが生成されて、ビーコンデータに含められる。なお、ビーコンデータの構造は、例えば、ビーコンの送信元の拡張デバイス30zの接続方法に応じて異なる。また、共通鍵は、登録処理が行われたユーザ端末10(登録済みのユーザ端末10)ごとに生成される。したがって、共通鍵が記憶されていないということは、拡張デバイス30zとの間で登録処理が行われたユーザ端末10が一つも無いことを示す。なお、複数の共通鍵が記憶されている場合(複数のユーザ端末10との間で既に登録処理が行われている場合)、各共通鍵によって生成されるワンタイムコードを含むビーコンが、一定周期で順番に(又は交互に)送信されてもよい。
一方、ユーザ端末10のユーザが、登録モードへの移行指示を所定の操作によってユーザ端末10に対して入力すると、ユーザ端末10の設定部16は、ガジェット検出部15に対し、登録モードへの移行を指示する(S122)。ガジェット検出部15は、当該要求に応じ、登録モードをONにする(S123)。ガジェット検出部15は、登録モードがONである状態においてビーコンを検出すると(S124)、検出されたビーコンのビーコンデータのリスト(以下、「ビーコンリスト」という。)を、設定部16に通知する(S125)。ビーコンを発している拡張デバイスは、一つであるとは限らないため、検出された全てのビーコンデータのリストが、検出リストとして設定部16に通知される。
設定部16は、例えば、ビーコンリストを表示して、登録対象とする拡張デバイスの選択をユーザから受け付ける。各ビーコンデータの全部が表示されるのは煩雑であるため、各ビーコンデータに含まれているドライバ名が表示されてもよい。ユーザに選択の機会を与えることにより、連携対象とする拡張デバイスを、ユーザによって許可された拡張デバイスに限定することができる。ユーザによって、ビーコンリストの中のいずれかの選択肢が選択されると、設定部16は、選択された選択肢に係るMACアドレスを指定して、拡張デバイスの登録を、ガジェット検出部15に要求する(S126)。ここでは、拡張デバイス30zが選択されたこととする。
ガジェット検出部15は、当該MACアドレス宛に、登録要求を示すビーコンを送信する(S127)。当該登録要求には、ビーコン生成部31によってこれから生成される共通鍵を受信するためのチャネル(媒体)の一覧情報(以下、「チャネルリスト」という。)が含まれる。斯かるチャネルの一例としては、カメラ、NFC(Near field communication)、超音波等が挙げられる。カメラによる共通鍵の受信は、拡張デバイス30zにおいて表示される、共通鍵を示す画像(例えば、2次元コード)を、ユーザ端末10のカメラによって撮像することにより実現される。
登録要求の宛先に係る拡張デバイス30zのビーコン生成部31は、当該登録要求を受信すると(S105)、チャネルリストの中から、当該拡張デバイス30zが対応可能なチャネルを選択する(S106)。続いて、ビーコン生成部31は、選択されたチャネルを示す情報を、ビーコンによってユーザ端末10に送信する(S107)。ユーザ端末10のガジェット検出部15は、当該情報を受信すると(S128でYes)、当該情報が示すチャネルによる共通鍵の受信の準備を設定部16に要求する(S129)。設定部16は、当該チャネルを起動し、共通鍵の受信の態勢を整える(S130)。
一方、拡張デバイス30zのビーコン生成部31は、チャネルを示す情報の送信後、新たな共通鍵を生成する(S108)。すなわち、仮に、ステップS104においてワンタイムコード付きのビーコンが送信されていた場合には、当該ワンタイムコードの生成に用いられた共通鍵とは異なる共通鍵が新たに生成される。共通鍵は、ユーザ端末10ごとに生成されるからである。
続いて、ビーコン生成部31は、ステップS106において選択されたチャネルを介して、新たに生成された共通鍵を送信する(S109)。例えば、NFC又は超音波によって共通鍵が送信される。または、カメラがチャネルとして選択された場合には、共通鍵を示す画像が表示される。また、他のチャネルによって共通鍵が送信(伝達)されてもよい。
ユーザ端末10の設定部16は、共通鍵を受信すると(S131)、当該共通鍵を用いてワンタイムコードを生成する(S132)。設定部16によるワンタイムコードの生成方法は、拡張デバイス30zによるワンタイムコードの生成方法と同じである。続いて、設定部16は、ステップS132において生成されたワンタイムコードを、ガジェット検出部15に通知する(S133)。ガジェット検出部15は、当該ワンタイムコードを含む登録完了通知を、ビーコンによって拡張デバイス30zに送信する(S134)。
図9は、登録完了通知の構成例を示す図である。図9に示されるように、登録完了通知には、MACアドレス、時刻、アクセス情報要否、及びワンタイムコード等が含まれる。MACアドレスは、ユーザ端末10のMACアドレスである。時刻は、現在時刻である。アクセス情報要否は、拡張デバイス30zのアクセス情報の要否を示す情報である。trueは、アクセス情報が必要であることを示し、falseは、アクセス情報が不要であることを示す。アクセス情報とは、無線通信によって拡張デバイス30zにアクセスするために必要な情報をいい、例えば、WiFi(登録商標)であれば、SSID及びパスワードがアクセス情報に該当する。ワンタイムコードは、ステップS132において生成されたワンタイムコードである。
拡張デバイス30zのビーコン生成部31は、登録完了通知を受信すると(S110でYes)、ステップS108において生成された共通鍵を用いてワンタイムコードを生成する(S111)。続いて、ビーコン生成部31は、生成されたワンタイムコードが、登録完了通知に含まれているワンタイムコードに一致するか否かを判定する(S112)。二つのワンタイムコードが一致しない場合(S112でNo)、ビーコン生成部31は、登録処理の失敗を示す情報を、ユーザ端末10にビーコンによって送信する(S113)。
一方、二つのワンタイムコードが一致する場合(S112でYes)、ビーコン生成部31は、ステップS108において生成された共通鍵を、ユーザ端末10のMACアドレスに対応付けて共通鍵記憶部37に保存する(図7のS113)。続いて、ビーコン生成部31は、登録完了通知に含まれているアクセス情報要否の値がtrueであるか否かを判定する(S114)。アクセス情報要否の値がtrueである場合(S114でYes)、ビーコン生成部31は、拡張デバイス30zのアクセス情報(例えば、接続方法、SSID、及びパスワード等)を共通鍵で暗号化して、ビーコンによってユーザ端末10に送信する(S115)。
ユーザ端末10のガジェット検出部15は、当該アクセス情報を受信すると(S135)、当該アクセス情報を設定部16に通知する(S136)。続いて、ガジェット検出部15は、登録モードをOFFにする(S137)。
一方、設定部16は、通知されたアクセス情報を、ステップS131において受信された共通鍵を用いて復号する(S138)。続いて、設定部16は、当該アクセス情報に基づいて、拡張デバイス30zとの無線通信を確立し、当該無線通信を介してドライバの取得要求を拡張デバイス30zに送信する(S139)。
拡張デバイス30zの中継サーバ部34は、当該取得要求に応じ、ドライバ記憶部36に記憶されているドライバを取得して(S140)、当該ドライバを設定部16に返信する(S141)。設定部16は、当該ドライバを受信すると、当該ドライバを補助記憶装置103に記憶すると共に、拡張デバイス30zに関する登録情報を登録情報記憶部123に保存する(S142)。
図10は、登録情報記憶部の構成例を示す図である。図10に示されるように、登録情報記憶部123は、登録された拡張デバイス30zごとに登録情報を記憶する。登録情報には、ドライバ名、SSID、パスワード、MACアドレス、接続方法、ドライバ名、及び共通鍵等が含まれる。
ドライバ名は、拡張デバイス30zの識別名であると共に、拡張デバイス30zのドライバの識別名である。SSIDは、拡張デバイス30zに対するSSIDである。パスワードは、拡張デバイス30zに対するパスワードである。MACアドレスは、拡張デバイス30zのMACアドレスである。接続方法は、無線通信での拡張デバイス30zとの接続方法である。共通鍵は、ステップS132において受信された共通鍵である。
なお、ドライバ名及びMACアドレスは、ビーコン(図9)から取得可能である。SSID,パスワード、及び接続情報は、ステップS135において受信されたアクセス情報から取得可能である。なお、ここでのパスワードは、ワンタイムコードとは異なる。
続いて、ワンタイムコードの生成方法の一例について説明する。図11は、ワンタイムコードの生成方法の一例を説明するための図である。なお、図11では、OAUTH TOTP(Time-based One-Time Password)、RFC6238に従って、ワンタイムコードを算出する例が示されているが、他の方法によってワンタイムコードが生成されてもよい。
まず、UNIX(登録商標)時間による現在時刻を得る(S151)。続いて、現在時刻を30秒で除した結果を得る(S152)。但し、小数点以下は削除される。これにより、ワンタイムコードの生成時期が30秒ずれたとしても、同じワンタイムコードを生成することができる。
続いて、現在時刻を30秒で除した結果を16バイトの16進数のデータに変換する(S153)。続いて、共通鍵とビーコン(図9)のデータ部(但し、ワンタイムコードの部分は除く)とをBASE64でデコードした結果と、16進数のデータとに基づいてHMAC(Hash-based Message Authentication Code)演算を行う(S154)。
続いて、HMAC演算の結果が格納されている配列であるhmacの19番目の値をオフセット値(offset)とする(S155)。続いて、以下の演算結果を得る(S156)。
hmax[offset]&0x7f
hmax[offset+0]&0xff
hmax[offset+1]&0x7f
hmax[offset+2]&0x7f
演算結果を順番に接続した値を、10の4乗で除した余りをワンタイムパスコードとする(S157)。
続いて、運用モードにおいて実行される処理手順について説明する。まず、ガジェット30と連携するWebアプリ13の起動処理について説明する。図12は、Webアプリの起動処理の処理手順の一例を説明するための図である。
例えば、ユーザ端末10の表示装置111に表示されているアイコンの選択等によって、当該アイコンに係るWebアプリ13の起動指示が入力されると(S201でYes)、アプリ起動部11は、起動対象のWebアプリ13(ここでは、Webアプリ13aとする。)のコンテンツデータの格納場所の識別名を特定する(S202)。格納場所の識別名とは、例えば、ファイル名又はフォルダ名である。ここでは、コンテンツデータを格納した書庫ファイルのファイル名が、格納場所の識別名として用いられることとする。なお、当該ファイル名は、Webアプリ13のアイコンに関連付けられてユーザ端末10に記憶されている。
続いて、アプリ起動部11は、Webアプリ13aに対応するIPアドレス、ポート番号、及びCookie(クッキー)を生成する(S203)。IPアドレスは、各Webアプリ13に関して共通でよい。ポート番号は、各Webアプリ13間で重複しない値が割り当てられる。Cookieは、Webアプリ13aの認証に利用される、パスワードのような情報である。したがって、Cookieについても、各Webアプリ13間で重複しない値が生成される。なお、Webアプリ13aに対応するIPアドレス及びポート番号は、Webアプリ13aのコンテンツデータに対するIPアドレス及びポート番号としての意味を有する。
続いて、アプリ起動部11は、Webアプリ13aに対応するローカルサーバ部14aのスレッドを生成する(S204)。当該ローカルサーバ部14aには、ステップS202において特定されたファイル名、並びにステップS203において生成されたIPアドレス、ポート番号、及びCookieが設定される。ローカルサーバ部14aは、起動されると、設定されたIPアドレス及びポート番号に対応するサーバポートを生成(開設)し(S231)、当該サーバポートへのアクセスを待機する。
続いて、アプリ起動部11は、Webアプリ13aのIPアドレス、ポート番号、及びCookieを指定して、Webアプリ13aの起動をブラウザ部12に要求する(S205)。
ブラウザ部12は、Webアプリ13aの起動要求に応じ、Webアプリ13aとして機能するプロセスを生成する(S211)。当該プロセスには、Webアプリ13aのIPアドレス、ポート番号、及びCookieが設定される。なお、当該プロセスは、ブラウザ部12としてのプロセスの子プロセスである。したがって、当該プロセスは、ブラウザ部12の一部(ブラウザ部12においてWebアプリ13aとして機能する部分)であるといえる。但し、以下では、便宜上、当該プロセスが実行する処理について、Webアプリ13aが実行主体であるとして説明する。なお、各Webアプリ13は、スレッドとして起動されてもよい。ブラウザ部12が、Webアプリ13ごとにプロセスを起動するのか又はスレッドを起動するのかについては、ブラウザ部12の実装に依存する。
Webアプリ13aは、起動されると、ブラウザ部12から設定されたIPアドレス及びポート番号に係るサーバポート宛に、コンテンツデータの取得要求(HTTPリクエスト)を送信する(S221)。ローカルサーバ部14aは、サーバポートを介して当該取得要求を受信すると、ステップS204において設定されているファイル名に係るファイルから、コンテンツデータを読み出す(S232)。なお、当該ファイル名が、書庫ファイルである場合、当該書庫ファイルに書庫化されているファイル群から、コンテンツデータが読み出される。続いて、ローカルサーバ部14aは、読み出されたコンテンツデータを含む応答(HTTPレスポンス)を、Webアプリ13aに返信する(S233)。なお、ステップS221における取得要求には、Webアプリ13aに設定されたCookieが含まれてもよい。ローカルサーバ部14aは、当該Cookieが、自らに設定されたCookieに一致する場合に、コンテンツデータを返信するようにしてもよい。
Webアプリ13aは、コンテンツデータを受信すると(S222)、当該コンテンツデータに基づいて、Webアプリ13aの画像を表示させる(S223)。続いて、Webアプリ13aは、ガジェット30との連携処理を開始する(S224)。
続いて、ガジェット30の検出に応じて実行される処理手順について説明する。図13は、ガジェットの検出時に実行される処理手順の一例を説明するための図である。
ガジェット検出部15は、一定時間ごとに(S301でYes)、電波スキャンを実行する(S302)。電波スキャンでは、各ガジェット30から送信されているビーコンのうち、ユーザ端末10に到達可能なビーコンが検出される。各ガジェット30のビーコンの形式は、ガジェット30が対応する接続方法等に応じて異なっていてもよい。電波スキャンの結果、検出されたビーコンごとに、当該ビーコンの送信元のガジェット30のSSID及びMACアドレス等のリスト(以下、「検出リスト」という。)が得られる。続いて、ガジェット検出部15は、検出リストを設定部16に送信する(S303)。
図14は、検出リストの一例を示す図である。図14に示されるように、検出リストは、検出されたガジェット30ごとに、接続方法、SSID、パスワード、及びMACアドレスを含む。但し、ビーコンにSSID又はパスワードが含まれていないガジェット30について、SSID又はパスワードの値は無効である。
なお、拡張デバイス30zが送信しているビーコン(図9)も、ステップS302において検出される。登録モードにおいて登録された拡張デバイス30zが、現時点において、ユーザ端末10と通信可能な範囲内に位置するとは限らないからである。したがって、拡張デバイス30zのビーコンに含まれている情報も、検出リストに含められる。例えば、図14に示される検出リストにおいて、3番目のレコードは、拡張デバイス30zに対応するレコードである。
設定部16は、検出リストを受信すると(S311)、許可リスト及びガジェット一覧情報に関して、連携管理サーバ20との同期をとる(S312)。例えば、設定部16は、当該ユーザ端末10の端末IDを含む、許可リスト及びガジェット一覧情報の取得要求を連携管理サーバ20に送信する。端末IDとは、ユーザ端末10ごとの識別情報であり、例えば、補助記憶装置103に記憶されている。連携管理サーバ20の情報送信部21は、許可リスト記憶部24に記憶されている許可リストの中で、当該ユーザ端末10に対応する許可リストを返信する。
図15は、許可リスト記憶部の構成例を示す図である。図15に示されるように、許可リスト記憶部24は、各端末IDに対応付けて、当該端末IDに係るユーザ端末10に連携が許可されるガジェット30を示す情報を記憶する。すなわち、「○」が記録されているセルは、当該セルが属する行に係るユーザ端末10の全てのWebアプリ13に、当該セルが属する列に係るガジェット30との連携が許可されることを示す。また、「○(XXXのみ)」が記録されているセルは、当該セルが属する行に係るユーザ端末10のWebアプリ13のうち「XXX」に該当するWebアプリ13のみに、当該セルが属する列に係るガジェット30と連携が許可されることを示す。なお、「XXX」には、複数のWebアプリ13の識別情報が列挙されてもよい。また、「X」が記録されているセルは、当該セルが属する行に係るユーザ端末10の全てのWebアプリ13に、当該セルが属する列に係るガジェット30との連携が許可されないことを示す。
ステップS312において、情報送信部21は、情報の取得要求に含まれている端末IDに対応する行に係る許可リストを返信する。
また、図16は、ガジェット一覧記憶部の構成例を示す図である。図16に示されるように、ガジェット一覧記憶部25は、ガジェット30ごとにガジェット情報を記憶する。ガジェット情報には、ドライバ名、SSID、パスワード、MACアドレス、接続方法、及びドライバ名等が含まれる。
ドライバ名は、ガジェット30の識別名であると共に、当該ガジェット30に対応するドライバの識別名でもある。SSIDは、ガジェット30に対するSSIDである。パスワードは、ガジェット30に対するパスワードである。MACアドレスは、ガジェット30のMACアドレスである。接続方法は、無線通信でのガジェット30との接続方法である。なお、接続方法における「BLT」は、Bluetooth(登録商標)を示す。
ステップS312において、情報送信部21は、ガジェット一覧記憶部25に記憶されているガジェット一覧情報と、各ガジェット情報のドライバ名によって識別されるドライバのファイルとを返信する。なお、ユーザ端末10からの取得要求に、検出されたガジェット30のSSID又はMACアドレスの一覧が含まれてもよい。情報送信部21は、当該SSID又は当該MACアドレスに対応するガジェット情報及びドライバのみを返信してもよい。
設定部16は、返信された許可リストを許可リストキャッシュ部121に記憶し、返信されたガジェット一覧情報及びドライバ群を、ガジェット一覧キャッシュ部122に記憶する。なお、許可リスト及びガジェット一覧情報において、拡張デバイス30zに関するレコードは含まれていなくてもよい。本実の形態において、拡張デバイス30zは、登録処理が行われるため、信頼できる拡張デバイス30zは、登録モードにおいて確認されているからである。
なお、許可リスト及びガジェット一覧情報が返信される前に、端末認証部22が、端末情報記憶部23を参照して、取得要求に係る認証が行を行う。認証が成功した場合に、許可リスト及びガジェット一覧情報が返信される。
図17は、端末情報記憶部の構成例を示す図である。図17に示されるように、端末情報記憶部23は、端末IDに対応付けて、認証方式及び認証情報を記憶する。認証方式は、認証の方式を示す。認証情報は、認証方式に基づく認証において利用される情報である。例えば、図17に示される例では、ユーザ端末10が有するRSA(Rivest Shamir Adleman)鍵が、認証情報に登録されている公開鍵に対応するものであるか否かが、チャレンジ&レスポンスで検証される。
続いて、設定部16は、許可リストキャッシュ部121に記憶されている許可リストにおいて、いずれかのWebアプリに連携が許可されているガジェット30であって、かつ、検出リストに対応するレコードが含まれているガジェット30に係るガジェット情報の一覧をガジェット一覧キャッシュ部122から取得する(S313)。この際、設定部16は、登録情報記憶部123に記憶されている登録情報の中で、検出リストに含まれているいずれかのSSID又はMACアドレスを含む登録情報を取得し、当該登録情報を、当該ガジェット情報の一覧に追加する。以下、当該一覧に追加された登録情報もガジェット情報という。但し、拡張デバイス30zについては、ステップS302において検出されたビーコンに含まれているワンタイムコードが、当該登録情報に含まれている共通鍵によって検証されてもよい。具体的には、ビーコンに含まれているワンタイムコードが、当該共通鍵に基づいて生成されるワンタイムコードに一致するか否かが検証されてもよい。比較されたワンタイムコードが一致しない場合、当該登録情報は、ガジェット情報の一覧に追加されなくてもよい。
続いて、設定部16は、ステップS313において取得された一覧に基づいて、検出ガジェットリストを更新する(S314)。検出ガジェットリストとは、現在検出されている各ガジェットのガジェット情報の一覧である。
図18は、検出ガジェットリストの構成例を示す図である。検出ガジェットリストの各レコードは、基本的に、ガジェット情報(図16)を構成する項目に対して、ポート番号の項目が追加されたものである。ポート番号は、当該ガジェット30と連携するためのAPIポートのポート番号である。また、拡張デバイス30zに対応するレコードについては、収容可能数の項目が有効である。収容可能数は、拡張デバイス30zのビーコンから取得可能である。以下において、検出ガジェットリストの各レコードを、ガジェット情報という。
なお、ステップS314が初めて実行される場合には、ステップS313において取得されたガジェット情報の一覧の全てが検出ガジェットリストに追加される。この際、各レコードのポート番号の値は、空である。まだAPIポートは生成されていないからである。一方、ステップS314が2回目以降に実行される場合には、ステップS313において取得されたガジェット情報の一覧に含まれており、検出ガジェットリストに含まれていないガジェット情報に対応するレコードが、検出ガジェットリストに追加される。また、ステップS313において取得されたガジェット情報の一覧に含まれておらず、検出ガジェットリストに含まれているガジェット情報に対応するレコードが、検出ガジェットリストから削除される。また、拡張デバイス30zに対応するレコードについて、収容可能数が最新の値(ステップS302において検出されたビーコンに含まれている値)に更新される。すなわち、ステップS314は、一定時間ごとに実行される。したがって、検出ガジェットリストは、一定時間ごとに更新される。なお、設定部16は、最新の検出ガジェットリストを、例えば、メモリ102に記憶しておく。
続いて、設定部16は、ガジェット30に対応するAPIの生成を、APIサーバ部17に要求する(S315)。当該要求には、検出ガジェットリストに新たに追加されたガジェット情報と、検出ガジェットリストから削除されたガジェット情報とが指定される。
APIサーバ部17は、APIの生成要求に応じ、検出ガジェットリストから削除されたガジェット情報が有る場合は(S321でYes)、当該各ガジェット情報に含まれているポート番号に係るAPIポートのそれぞれをクローズする(S322)。また、検出ガジェットリストに追加されたガジェット情報が有る場合は(S323でYes)、APIサーバ部17は、当該ガジェット情報のそれぞれに対応するポート番号を生成する(S324)。当該ポート番号は、現時点においても有効なAPIポートのポート番号と重複しない値であればよい。また、ステップS324において複数のポート番号が生成される場合、生成される各ポート番号は、相互に重複しない値であればよい。
続いて、APIサーバ部17は、ステップS324において生成されたポート番号ごとに、APIポートを生成する(S325)。この際、各ローカルサーバ部14のサーバポートのIPアドレスと同じIPアドレスが、生成される各APIポートに割り当てられる。続いて、APIサーバ部17は、ステップS325において生成されたAPIポートに対応付けて、当該APIポートに対応するガジェット情報を、例えば、メモリ102に記憶する(S326)。また、APIサーバ部17は、生成されたAPIポートに対応するガジェット情報に係るガジェットとの連携が許可されているWebアプリ13に関してアプリ起動部11によって生成されたCookieを、生成されたAPIポートに対応付ける。生成されたAPIポートに対応するガジェット情報に係るガジェットとの連携が許可されているWebアプリ13は、許可リストに基づいて特定可能である。
続いて、APIサーバ部17は、検出ガジェットリストに新たに追加されたガジェット情報ごとにAPIポートのポート番号を含む応答を、設定部16に返却する(S327)。設定部16は、当該応答に含まれている各ガジェット情報に対応するポート番号を、当該各ガジェット情報に対応付けて、検出ガジェットリストに記録する(S316)。
続いて、図12のステップS224の詳細について説明する。図19は、第一の連携処理の処理手順の一例を説明するための図である。図19は、図12のステップS223に続いて実行される処理であるため、図19におけるWebアプリ13は、便宜上、Webアプリ13aであるとする。但し、図19に示される処理手順は、起動中の各Webアプリ13によって並列的に実行されてもよい。
ステップS401において、Webアプリ13aは、設定部16から、最新の検出ガジェットリストを取得する。この際、設定部16は、許可リストに基づいて、Webアプリ13aに対して連携が許可されているガジェット30に対するガジェット情報のみを検出ガジェットリストから抽出する。
続いて、Webアプリ13aは、今回取得された検出ガジェットリストに含まれていて、前回のステップS401において取得された検出ガジェットリストに含まれていないガジェット情報の有無を判定する(S402)。すなわち、新たなガジェット情報の有無が判定される。
新たなガジェット情報が有る場合(S402でYes)、Webアプリ13aは、当該各ガジェット情報に含まれているポート番号に係る各APIポート宛に、ドライバの取得要求を送信する(S403)。APIサーバ部17は、当該各APIポートに対応付けられているガジェット情報に含まれているドライバ名に基づいて、当該ドライバ名に係るドライバを取得して、当該ドライバをWebアプリ13aに返信する(S404)。なお、ステップS403及びS404においては、複数のドライバが取得される可能性も有る。
図20は、ドライバの構成例を示す図である。図20に示されるように、各ドライバは、ドライバ名、接続方法、アクセス情報、プログラム部、使用プロトコル、及環境情報等の項目を含む。図20には、便宜上、4つのドライバの内容が例示されている。
ドライバ名は、ドライバの識別名であると共に、当該ドライバに対応するガジェット30の識別名である。接続方法は、当該ドライバに対応するガジェット30が対応可能な接続方法(通信方法)である。アクセス情報は、SSID及びパスワード、又はMACアドレス等、当該ドライバに対応するガジェット30にアクセスするために必要な情報である。プログラム部は、APIポートの呼び出しをWebアプリ13に実行させ、その結果として、ガジェット30が公開するAPIの呼び出しに必要な情報を、APIサーバ部17に伝達するためのプログラムコードである。本実施の形態において、プログラム部は、JavaScript(登録商標)によって実装される。使用プロトコルは、当該ドライバのプログラム部が、APIポートの呼び出しをWebアプリ13に実行させる際に利用される通信プロトコルである。ベースプログラム情報は、当該ドライバを用いてガジェット30と連携するために前提となるソフトウェア環境を示す情報である。
続いて、Webアプリ13aは、新たなガジェット情報に係る各ガジェット30のアイコンの表示指示の入力を待機する(S405)。ユーザによって、当該アイコンの表示指示が入力されると(S405Yes)、Webアプリ13aは、新たなガジェット情報に係るガジェット30ごとに、当該ガジェット30に対するドライバを表現するオブジェクト(以下、「ドライバオブジェクト」という。)を生成する(S406)。すなわち、ドライバオブジェクトは、検出ガジェットリストに含まれるガジェット情報ごとに生成される。なお、各ドライバオブジェクトには、それぞれに対応するガジェット情報と、ドライバと、Webアプリ13aに設定されているCookieとが設定される。また、各ドライバオブジェクトは、それぞれに対応するガジェット情報に含まれているポート番号に係るAPIポートに対応付けられる。
各ドライバオブジェクトは、生成されると初期化処理を実行する(S407)。当該初期化処理によって、各ドライバオブジェクトに対応するドライバのアイコンが表示される。
図21は、ドライバに対応するアイコンの第一の表示例を示す図である。図21では、WiFi(登録商標)対応のレンズカメラであるガジェット30aと、拡張デバイス30zとが検出された例が示されている。
例えば、ステップS405では、アイコンの表示指示を受け付けるためのボタンb1が表示される。ボタンb1が選択されると、ガジェット30aに対応するアイコンc1と、拡張デバイス30zに対応するアイコンc2とが、例えば、画面の上方から落下してきて画面下部に表示される。なお、アイコンc2の右上の数値は、収容可能数を示す。
又は、拡張デバイス30zの操作方法を示す情報が出力されてもよい。図22は、ドライバに対応するアイコンの第二の表示例を示す図である。
図22では、メッセージmes1が表示された例が示されている。メッセージmes1は、拡張デバイス30zに対応するドライバオブジェクトによって表示されてもよい。例えば、当該ドライバオブジェクトの初期化処理の一部として、メッセージmes1の表示処理が組み込まれていてもよい。又は、メッセージmes1の内容が音声出力されてもよい。メッセージmes1の出力形態は、ユーザ端末10に対する設定に従ってもよい。
ところで、各ドライバオブジェクトは、初期化処理において、当該ドライバオブジェクトに設定されたドライバのプログラム部の一部を、現在の環境に合わせて改変する。具体的には、現在のAPIサーバ部17のIPアドレスと、当該ドライバオブジェクトに設定されたガジェット情報に含まれているポート番号とが、プログラム部に適用される。
図23は、ドライバのプログラム部の定義内容の一例を示す図である。図23において、プログラム部510は、WiFi(登録商標)対応レンズカメラであるガジェット30aに対応するドライバである。
プログラム部510の記述511にける「ip port」のうち、「ip」は、初期化処理において、APIサーバ部17のIPアドレスに置換される。また、「port」は、初期化処理において、プログラム部510を含むドライバに対応するAPIポートのポート番号に置換される。すなわち、当該IPアドレス及び当該ポート番号は、静的な値では無いため、プログラム部510には、具体的な値ではなく記号によって記述されている。
記述512は、プログラム部510が提供するメソッド群のうちの一つのメソッドの名前が、「Takephoto」であることを示す。記述513は、当該メソッドが実行された場合のアクセス先が、括弧内に指定されたURLであることを示す。当該URLにおいて、「this.ip」の値は、記述511においてipに対して適用されたIPアドレスとなる。また、当該URLにおいて、「this.port」の値は、記述511においてportに対して適用されたポート番号となる。記述514は、括弧内の情報が、記述513において指定されたURL(すなわち、APIポート)へ送信対象とされることを示す。当該括弧内のパラメータは、ガジェット30aのAPIを構成する情報である。
記述515は、プログラム部510が提供するメソッド群のうちの一つのメソッドの名前が、「StartRecording」であることを示す。
図19に戻る。ステップS406に続いて、Webアプリ13aは、前回のステップS401において取得された検出ガジェットリストに含まれていて、今回取得された検出ガジェットリストに含まれていないガジェット情報の有無を判定する(S408)。すなわち、検出されなくなったガジェット30の有無が判定される。該当するガジェット情報が有る場合(S408でYes)、Webアプリ13aは、当該ガジェット情報に対応するドライバオブジェクトを削除する(S409)。ドライバオブジェクトは、削除される際に、当該ドライバオブジェクトに対応するドライバのアイコンを消去する。
図24は、ドドライバオブジェクトの削除に伴ってアイコンが消去される例を示す図である。図24では、拡張デバイス30zが検出されなくなった結果、拡張デバイス30zに対応するアイコンc2が上昇して消去される例が示されている。
なお、図19において、ステップS401以降は、繰り返し実行される。例えば、ステップS401以降は、一定時間間隔で実行されてもよい。
続いて、図12のステップS224において、図19の処理と並行して実行される処理について説明する。図25は、第二の連携処理の処理手順の一例を説明するための図である。
ドライバのアイコンが操作されて、ドライバのプログラム部に含まれるメソッドのうちのいずれかのメソッドの実行指示が入力されると(S501でYes)、当該ドライバに対応するドライバオブジェクトは、選択されたメソッドを実行する(S502)。
図26は、ドライバのアイコンの操作例を示す図である。図26では、アイコンc1が選択されて、メニューm1が表示されている例が示されている。メニューm1には、アイコンc1に対応するドライバのプログラム部510に含まれている各メソッドがメニュー項目として含まれている。すなわち、メニューm1には、「TakePhoto」メソッドと、「Startrecording」メソッドとが、メニュー項目として含まれている。ユーザは、所望のメソッドを選択することにより、当該メソッドの実行指示を入力することができる。
例えば、「TakePhotho」が選択された場合、図23のプログラム部510におけるTakePhotoに関する定義が実行される。その結果、記述513において特定されるURLに係るAPIポートに対して、記述514の括弧内に指定されたパラメータを含むHTTPリクエストが送信される。なお、当該HTTPリクエストには、Webアプリ13aに設定されたCookieが含まれる。
APIサーバ部17は、オープン中のAPIポートのうちのいずれかのAPIポート(以下、「対象ポート」という。)を介してHTTPリクエストが受信されると(S511でYes)、当該HTTPリクエストに含まれているCookieの正当性を検証する(S512)。具体的には、当該HTTPリクエストに含まれているCookieが、対象ポートに対応付けられているいずれかのCookieに一致するか否かが判定される。当該HTTPリクエストに含まれているCookieが、対象ポートに対応付けられているいずれのCookieにも一致しない場合(S512でNo)、APIサーバ部17は、エラーの発生を検出する(S516)。この場合、ステップS516において、APIサーバ部17は、エラーを示すHTTPレスポンスを返信する。
一方、当該HTTPリクエストに含まれているCookieが、対象ポートに対応付けられているいずれかのCookieに一致する場合(S512でYes)、APIサーバ部17は、対象ポートに対応付けられて記憶されているドライバオブジェクトに設定されているドライバに基づくガジェット30との接続処理を実行する(S513)。その結果、当該ガジェット30のアドレス(例えば、IPアドレス等)が判明する。そこで、APIサーバ部17は、ステップS511において受信されたHTTPリクエストに含まれているパラメータに基づいて、当該ガジェット30に対するAPIを呼び出して、当該APIの応答を受信する(S514)。当該APIの呼び出しにおいて、ステップS513において判明したアドレスが、当該APIの宛先となる。また、応答の内容は、APIの呼び出し先のガジェット30と、呼び出されたAPIとに応じて異なる。例えば、WiFi(登録商標)対応レンズカメラに対して撮像を要求するAPIが呼び出された場合、撮像結果である画像データが応答に含まれているかもしれない。
続いて、APIサーバ部17は、ステップS511において受信されたHTTPリクエストに対するHTTPレスポンスを返信する(S515)。当該HTTPレスポンスには、ガジェット30からの応答が含まれる。ドライバオブジェクトは、当該HTTPレスポンスを受信すると(S503)、例えば、当該HTTPレスポンスに含まれているガジェット30からの応答を利用した処理を実行する。
続いて、ステップS413の詳細について説明する。図27は、ドライバに基づくガジェットとの接続処理の処理手順の一例を説明するためのフローチャートである。図27の処理が呼び出される時点において処理対象とされるドライバを、「対象ドライバ」という。また、図27の処理が呼び出される時点において接続対象のガジェット30を、「対象ガジェット」という。
ステップS601において、対象ドライバに指定されているペースプログラムがインストール済みであるか否かが判定される。ペースプログラムがインストールされていない場合(S601でNo)、ペースプログラムのインストールが実行される(S602)。
続いて、対象ガジェットと接続済みであるか否かが判定される(S603)。対象ガジェットと接続されていない場合(S603でNo)、対象ドライバに指定されている接続方法に応じた接続処理が実行される(S604)。例えば、接続方法が、「WiFi(登録商標) AP」であれば、SSIDとパスワードとに基づいて、対象デバイスとの接続が実行される。
続いて、対象ドライバのアクセス情報に、アドレス判別方法が指定されているか否かが判定される(S605)。アドレス判別方法とは、対象ガジェットのアドレス(IPアドレス又はMACアドレス等)の判別方法である。アドレス判別方法が指定されている場合(S605)、当該アドレス判別方法に従って、対象ガジェットのアドレスが特定される(S606)。当該アドレスは、対象ガジェットのAPIを呼び出す際に利用される。
続いて、ユーザ端末10と、各ガジェット30との接続形態の変更について説明する。図28は、ユーザ端末とガジェットとの接続形態の変更を説明するための図である。図28において、(1)は、ユーザ端末10において、図21に示されるようにアイコンc1及びc2が表示される状態に対応する。すなわち、(1)では、ガジェット30aと拡張デバイス30zとが、直接的にユーザ端末10に接続されている。
一方、(2)は、ガジェット30aが、拡張デバイス30zの配下に移行された状態(拡張デバイス30zに収容された状態)を示す。すなわち、(2)では、ガジェット30aは、拡張デバイス30zを経由してユーザ端末10に接続される。まず、接続形態が(1)の状態から(2)の状態に変更される際に実行される処理について説明する。
図29、図30、及び図31は、接続形態の変更処理の処理手順の一例を説明するための図である。なお、図29、図30、及び図31の処理は、図19及び図29と並列的な関係に有る。また、図29の初期状態において、ユーザ端末10には、図21に示されように、アイコンc1及びアイコンc2が表示されていることとする。
ガジェット30aを、拡張デバイス30zの配下に移行したい場合、ユーザは、アイコンc1をドラッグして、アイコンc2の領域内にドロップする。
図32は、アイコンのドラッグ・アンド・ドロップの一例を示す図である。図32には、アイコンc1が、アイコンc2に対してドラッグ・アンド・ドロップされている様子が示されている。なお、アイコンc1についての操作であって、アイコンc2に関係した操作であれば、ドラッグ・アンド・ドロップ以外の操作が、ガジェット30aを拡張デバイス30zの配下に移行させるための操作として割り当てられてもよい。例えば、アイコンc1及びアイコンc2が選択された状態において、アイコンc1に対するコンテキストメニューから移行指示が入力されてもよい。
Webアプリ13aは、アイコンc1がアイコンc2に対してドラッグ・アンド・ドロップされたことを検知すると(S701でYes)、アイコンc1に対応するドライバオブジェクトaと、アイコンc2に対応するドライバオブジェクトzとのそれぞれから、ガジェット情報を取得する(S702)。すなわち、ドラッグされたドライバ(ガジェット30)に対応するガジェット情報と、ドロップ先のドライバ(拡張デバイス30z)に対応するガジェット情報とが取得される。
続いて、Webアプリ13aは、取得されたそれぞれのガジェット情報を比較して、ドロップ先の拡張デバイス30zに、ドラッグされたガジェット30aを収容可能か否か(拡張デバイス30zについて、ガジェット30aとの接続の可否)を判定する(S703)。具体的には、ドロップ先の拡張デバイス30zのガジェット情報において、ドラッグされたガジェット30のガジェット情報の接続方法に対応する収容可能数が、1以上であれば、収容は可能であると判定される。そうでなければ、収容は不可能であると判定される。収容が不可能であると判定された場合(S703でNo)、Webアプリ13aは、ドラッグされたアイコンc1を元の位置に戻す(S704a)。収容が可能であると判定された場合(S703でYes)、Webアプリ13aは、ガジェット30aのドライバを指定して、当該ドライバのロードをドライバオブジェクトzに要求する(S704b)。
ドライバオブジェクトzは、自らに設定されているポート番号に係るAPIポート(以下、「ポートz」という。)宛に、ガジェット30aのドライバを含む、ドライバのロード要求を送信する(S705)。APIサーバ部17は、ポートzに対応付けられているガジェット情報のMACアドレス(拡張デバイス30zのMACアドレス)と、ガジェット30aのドライバとを指定して、当該ドライバの暗号化を設定部16に要求する(S706)。設定部16は、当該MACアドレスに対応付けられて登録情報記憶部123に記憶されている共通鍵によって、当該ドライバを暗号化する(S707)。続いて、設定部16は、暗号化されたドライバを、APIサーバ部17に出力する(S708)。
続いて、APIサーバ部17は、ポートzに対応するドライバ(拡張デバイス30zのドライバ)のアクセス情報を用いて、拡張デバイス30zに接続する(S709)。続いて、APIサーバ部17は、拡張デバイス30zのデバイス管理部32に対して、暗号化されたガジェット30aのドライバを送信する(S710)。なお、当該ドライバと共に、当該ユーザ端末10のMACアドレスも、デバイス管理部32に通知される。
デバイス管理部32は、暗号化されたドライバを受信すると、当該ドライバと共に通知されたMACアドレスに対応付けられて共通鍵記憶部37に記憶されている共通鍵を用いて、当該ドライバを復号する(S711)。デバイス管理部32は、復号されたドライバを、例えば、ファイルに格納して保存する。
続いて、デバイス管理部32は、ガジェット30aに対応する中継ポート及び拡張ポートのそれぞれのポート番号を生成する(図30のS712)。続いて、デバイス管理部32は、拡張ポートのポート番号を指定して、拡張ポートの生成を拡張サーバ部33に要求する(S713)。拡張サーバ部33は、指定されたポート番号に係る拡張ポートを生成する(S714)。続いて、デバイス管理部32は、中継ポートのポート番号を指定して、中継ポートの生成を中継サーバ部34に要求する(S715)。中継サーバ部34は、指定されたポート番号に係る中継ポートを生成する(S716)。
続いて、デバイス管理部32は、拡張ポートのポート番号と、中継ポートのポート番号とを指定して、ステップS714において生成された拡張ポートとステップS716において生成された中継ポートとの対応付けを、仲介部35に要求する(S717)。仲介部35は、二つのポート番号の対応情報をポート対応記憶部38に記憶する(S718)。
続いて、デバイス管理部32は、拡張ポート(すなわち、ガジェット30a)へのアクセスを認証するためのCookieを生成する(S719)。続いて、デバイス管理部32は、当該Cookieと、ステップS711において保存されているドライバのドライバ名とを、ステップS714において生成された拡張ポートに設定する(S720)。続いて、デバイス管理部32は、当該Cookieと、ステップS716において生成された中継ポートのポート番号とを、APIサーバ部17のポートz宛に返信する(S721)。続いて、APIサーバ部17は、ポートzに対するURLであって、当該中継ポートに対応するURLを生成する(S722)。当該URLは、例えば、以下の形式で生成される。
<APIサーバ部17のIPアドレス>:<ポートzのポート番号>/1
上記のURLにおいて、末尾の「1」は、当該中継ポートに対応する識別子である。以下、当該URLを「中継URL」という。
続いて、APIサーバ部17は、ステップS721において受信されたCookieと、中継URLとをドライバオブジェクトzに返却する(S723)。オブジェクトzは、当該Cookie及び中継URLを、Webアプリ13aに返却する(図31のS724)。
Webアプリ13aは、当該Cookie及び中継URLを指定して、接続先の切り替えを、ドライバオブジェクトaに要求して(S725)、アイコンc1の表示状態を更新する(S726)。すなわち、ガジェット30aが拡張デバイス30zに収容された状態を示すように、アイコンc1の表示状態が更新される。
図33は、ガジェットが拡張デバイスに収容された状態を示すアイコンの表示例を示す図である。図33に示されるように、アイコンc1が、アイコンc2に重畳されて表示される。なお、アイコンc2について、収容可能数が2に減少している。これは、拡張デバイス30zに対してガジェット30aが収容されたためである。
一方、接続先の切り替えが要求されたドライバオブジェクトaは、当該Cookie及び中継URLを含む接続先の切り替え要求を、ドライバオブジェクトaに対して設定されているガジェット情報に含まれているポート番号に係るポートa宛に送信する(S727)。APIサーバ部17は、当該切り替え要求に応じ、ポートaについて、ガジェット30aとの接続を切断する(S728)。続いて、APIサーバ部17は、ポートaに対するメッセージが中継URLに転送されるようにポートaに対して設定する(S729)。また、APIサーバ部17は、ポートaに対応付けて、当該切り替え要求に含まれているCookieを保持する。続いて、APIサーバ部17は、接続先の切り替えの完了を、Webアプリ13aに通知する(S730)。
Webアプリ13aは、接続先の切り替えの完了の通知に応じ、ドライバオブジェクトaに対して、(拡張デバイス30zへの)接続を要求する(S731)。ドライバオブジェクトaは、自ら(ドライバオブジェクトa)に対して設定されているガジェット情報に含まれているポート番号に係るポートa宛に接続要求を送信する(S732)。APIサーバ部17は、ポートaに対する接続要求に応じ、ポートaに対応付けられて保持されているCookieを指定して、中継URL宛に、接続要求を送信する(S733)。ポートaに対するメッセージは、中継URLに転送するように設定されているからである。なお、中継URLは、ポートzに対するURLである。したがって、当該接続要求は、ポートzにおいて受信される。
APIサーバ部17は、中継URL宛の接続要求がポートzにおいて受信されると、中継URLに対応する中継ポート宛に当該接続要求を送信する(S734)。拡張デバイス30zの中継サーバ部34は、当該中継ポートを介して当該接続要求を受信すると、当該接続要求を仲介部35に転送する(S735)。仲介部35は、ポート対応記憶部38を参照して、当該中継ポートに対応する拡張ポートを特定し、当該拡張ポートに対して当該接続要求を転送する(S736)。その結果、当該接続要求は、拡張サーバ部33によって受信される。
拡張サーバ部33は、当該接続要求に指定されているCookieと、当該拡張ポートに対して設定されているCookieとを照合する(S737)。二つのCookieが一致しない場合、以降の処理は実行されずにエラーが返却される。二つのCookieが一致した場合、拡張サーバ部33は、当該拡張ポートに対して設定されているドライバ名に係るドライバに基づいて、ガジェット30aとの接続処理を実行する(S738)。その結果、拡張デバイス30zとガジェット30aとが接続される。なお、ステップS738の詳細は、図27において説明した通りである。
続いて、拡張サーバ部33は、接続の完了を示す応答を、中継ポートに対して返信する(S739)。続いて、中継サーバ部34は、当該応答をユーザ端末10のポートzに対して転送する(S740)。当該応答は、接続要求の伝達経路を逆に辿って、Webアプリ13aに通知される(S741〜S743)。
以上により、ユーザ端末10、ガジェット30a、及び拡張デバイス30zの接続形態は、図28の(2)に示した通りとなる。この状態においても、アイコンc1は、図26に示した通りの操作が可能である。例えば、ユーザが、「TakePhoto」メソッドを選択すると、図25のステップS502以降が実行される。但し、ポートa宛のメッセージは、ポートzを経由して、拡張デバイス30zの中継サーバ部34の中継ポートに転送される。更に、当該メッセージは、仲介部35によって当該中継ポートに対応する拡張ポートに転送される。したがって、図25のステップS513以降は、拡張サーバ部33によって実行される。その結果、「TakePhoto」メソッドに対応する、ガジェット30aのAPIは、拡張サーバ部33によって呼び出される。
続いて、図28の(2)の状態から(1)の状態に復帰させるために実行される処理について説明する。図34は、接続形態の復帰処理の処理手順の一例を説明するための図である。
ドライバオブジェクトaは、収容状態の解除指示の入力を検知すると(S801でYes)、ドライバオブジェクトaに設定されているガジェット情報に含まれているポート番号に係るポートa宛に、解除要求を送信する(S802)。解除指示は、例えば、図35に示されるように入力される。
図35は、解除指示の入力例を示す図である。図35では、アイコンc1が選択されて、メニューm1が表示されている例が示されている。アイコンc1に係るガジェット30aは、拡張デバイス30zに収容されているため、メニューm1には、解除指示を受け付けるためのメニュー項目が含まれている。ユーザは、当該メニュー項目を選択することにより、収容状態の解除指示を入力することができる。
ポートaに対する解除要求は、ポートzに係る中継URLに転送される(S803)。したがて、当該解除要求は、ポートzから拡張デバイス30zの中継サーバ部34の中継ポートに転送される(S804)。中継サーバ部34は、当該中継ポートを介して当該解除要求を受信すると、当該解除要求を仲介部35に転送する(S805)。仲介部35は、ポート対応記憶部38を参照して、当該中継ポートに対応する拡張ポートを特定すると共に、当該中継ポートのポート番号と、当該拡張ポートのポート番号との対応情報をポート対応記憶部38から削除する(S806)。続いて、仲介部35は、特定された拡張ポートに対して当該解除要求を転送する(S807)。その結果、当該解除要求は、拡張サーバ部33によって受信される。
拡張サーバ部33は、当該拡張ポートについて、ガジェット30aとの通信の切断処理を実行する(S809)。続いて、拡張サーバ部33は、中継ポートに対して、解除の完了を示す応答を中継ポートに対して返信する(S810)。続いて、中継サーバ部34は、当該応答をユーザ端末10のポートzに対して転送する(S811)。当該応答は、ポートaに転送される(S812)。
APIサーバ部17は、ポートaに対応付けられているドライバに基づいて、ガジェット30aとの接続処理を実行する(S813)。ステップS813の詳細は、図27において説明した通りである。その結果、ユーザ端末10とガジェット30aとが接続される。続いて、APIサーバ部17は、ポートaに対するメッセージが中継URLへの転送されるようにするための設定を解除する(S814)。続いて、APIサーバ部17は、解除の完了を示す応答を、ドライバオブジェクトaに返却する(S815)。当該応答は、Webアプリ13aに返却される(S816)。Webアプリ13aは、当該応答に応じ、アイコンc1の表示状態を更新する(S817)。具体的には、アイコンc1の表示位置が、図21に示した位置に復帰する。
以上により、ユーザ端末10、ガジェット30a、及び拡張デバイス30zの接続形態は、図28の(1)に説明した状態に復帰する。
上述したように、本実施の形態によれば、ユーザ端末10に接続されているガジェット30を、アイコンのドラッグ・アンド・ドロップのような直感的な操作によって、拡張デバイス30zに収容させることができる。したがって、ユーザ端末とガジェット30との接続関係(接続形態)を変更するための操作負担を軽減することができる。
また、図28の(2)に示した接続形態が実現されている状態において、ユーザ端末10とガジェット30aとを持ち出したい場合、解除操作を行うことで、容易にユーザ端末10とガジェット30aとの接続状態を復帰させることができる。
なお、拡張デバイス30zには、複数のガジェット30が収容されてもよい。また、複数の拡張デバイスが、ユーザ端末10に接続されてもよい。
また、拡張デバイス30zは、階層的に接続されてもよい。すなわち、或る拡張デバイスが、他の拡張デバイスに収容されてもよい。
また、接続形態の変更は、過去の接続形態の変更操作の履歴に基づいて、自動的に行われてもよい。例えば、ガジェット30aのみが検出されている状態では、ユーザ端末10にガジェット30aを接続させ、拡張デバイス30zが検出された時点で、自動的に、図29、図30、及び図31に示した処理が実行されてもよい。
また、或るユーザ端末10に接続されている拡張デバイス30zに他のユーザ端末10が接続しようとした場合に、当該或るユーザ端末10において、当該他のユーザ端末10による接続の許可又は許否の選択が可能とされてもよい。接続が許可された場合、当該拡張デバイス30zに収容されているガジェット30についても、当該他のユーザ端末10から利用可能とされてもよい。
また、BaaS(Backend as a Service)機能を提供するクラウドサービスとガジェット30との連携が行われてもよい。すなわち、当該クラウドサービスに対応するアイコンがユーザ端末10に表示され、当該アイコンに対して、センサ機能を有するガジェット30のアイコンがドラッグ・アンド・ドロップされると、当該ガジェット30による計測値が、当該クラウドサービスによって統計処理されてもよい。
図36は、BaaS機能を提供するクラウドサービスとの連携例を示す図である。図36において、(1)は、ユーザ端末10にアイコンc3とアイコンc4とが表示されている状態を示す。アイコンc3は、気温のセンサであるガジェット30bに対応するアイコンである。アイコンc4は、気温の計測値について統計処理を行うBaaS機能を提供するクラウドサービスに対応するアイコンである。すなわち、(1)は、ガジェット30bが、直接的にユーザ端末10に接続されている状態に対応する。この状態において、アイコンc3を操作することにより表示されるメニューm2を介してデータ表示が指示されると、ガジェット30bによる計測値が刻々と領域a1に表示される。
続いて、(2)に示されるように、アイコンc3が、アイコンc4に対してドラッグ・アンド・ドロップされると、(3)に示される状態が実現される。(3)に示される状態において、ユーザ端末10は、ガジェット30bが、クラウドサービスに関連付けられていることを示す情報を保持する。但し、ガジェット30bは、ユーザ端末10に接続されたままである。ユーザ端末10は、当該情報に基づいて、ガジェット30bから得られる計測値を、クラウドサービスに転送する。ユーザ端末10は、クラウドサービスによって統計処理された結果を、領域a1に表示する。
また、本実施の形態では、企業内における利用シーンを想定したが、個人的な利用に関して本実施の形態が適用されてもよい。この場合、連携管理サーバ20は設けらずに、許可リストキャッシュ部121及びガジェット一覧キャッシュ部122には、予め当該ユーザ端末10に関連する情報が記憶されていてもよい。この場合、各Webアプリ13による各ガジェット30へのアクセスの許否は、ユーザ端末10のユーザによって設定されてもよい。
なお、本実施の形態において、ユーザ端末10は、情報処理装置の一例である。ガジェット30aは、第1の外部機器の一例である。拡張デバイス30zは、第2の外部機器の一例である。APIサーバ部17は、接続部の一例である。Webアプリ13は、判定部及び切替部の一例である。ドライバは、接続情報の一例である。ガジェット情報は、属性情報の一例である。
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
以上の説明に関し、更に以下の項を開示する。
(付記1)
情報処理装置が、
外部機器ごとに記憶部に記憶されている、外部機器と無線通信を介して接続するために必要な接続情報を用いて、外部機器と無線通信を介して接続する処理と、
接続された外部機器のうちの第1の外部機器の属性情報と、接続された外部機器のうちの第2の外部機器との属性情報とを比較し、前記第2の外部機器について、前記第1の外部機器との接続の可否を判定する処理と、
前記判定する処理において接続が可能であると判定された場合に、前記第1の外部機器と当該情報処理装置との接続を切断して、前記第1の外部機器に対する前記接続情報を前記第2の外部機器に送信して、前記第1の外部機器との接続を前記第2の外部機器に実行させる処理と、
を実行することを特徴とする通信方法。
(付記2)
前記情報処理装置が、
前記接続する処理において接続された外部機器ごとに、当該外部機器に対応するアイコンを表示する処理を実行し、
前記判定する処理は、前記第1の外部機器に対応するアイコンについて、前記第2の外部機器に対応するアイコンに関係した所定の操作が行われると実行される、
ことを特徴とする付記1記載の通信方法。
(付記3)
前記情報処理装置が、
前記第2の外部機器から暗号鍵を受信する処理を実行し、
前記実行させる処理は、前記暗号鍵によって暗号化された前記接続情報を前記第2の外部機器に送信する、
ことを特徴とする付記1又は2記載の通信方法。
(付記4)
前記情報処理装置が、
前記第1の外部機器が前記第2の外部機器に接続されている状態において、所定の操作が行われると、前記第2の外部機器に前記第1の外部機器との接続を切断させ、前記第1の外部機器に対する前記接続情報を用いて当該情報処理装置と前記第1の外部機器とを接続する処理を実行する、
ことを特徴とする付記1乃至3いずれか一項記載の通信方法。
(付記5)
情報処理装置であって、
外部機器ごとに記憶部に記憶されている、外部機器と無線通信を介して接続するために必要な接続情報を用いて、外部機器と無線通信を介して接続する接続部と、
接続された外部機器のうちの第1の外部機器の属性情報と、接続された外部機器のうちの第2の外部機器との属性情報とを比較し、前記第2の外部機器について、前記第1の外部機器との接続の可否を判定する判定部と、
前記判定する処理において接続が可能であると判定された場合に、前記第1の外部機器と当該情報処理装置との接続を切断して、前記第1の外部機器に対する前記接続情報を前記第2の外部機器に送信して、前記第1の外部機器との接続を前記第2の外部機器に実行させる切替部と、
を有することを特徴とする情報処理装置。
(付記6)
前記接続部によって接続された外部機器ごとに、当該外部機器に対応するアイコンを表示する表示制御部を有し、
前記判定部は、前記第1の外部機器に対応するアイコンについて、前記第2の外部機器に対応するアイコンに関係した所定の操作が行われると、前記第2の外部機器について、前記第1の外部機器との接続の可否を判定する、
ことを特徴とする付記5記載の情報処理装置。
(付記7)
前記第2の外部機器から暗号鍵を受信する受信部を有し、
前記切替部は、前記暗号鍵によって暗号化された前記接続情報を前記第2の外部機器に送信する、
ことを特徴とする付記5又は6記載の情報処理装置。
(付記8)
前記第1の外部機器が前記第2の外部機器に接続されている状態において、所定の操作が行われると、前記第2の外部機器に前記第1の外部機器との接続を切断させ、前記第1の外部機器に対する前記接続情報を用いて当該情報処理装置と前記第1の外部機器とを接続する、
ことを特徴とする付記5乃至7いずれか一項記載の情報処理装置。
(付記9)
情報処理装置に、
外部機器ごとに記憶部に記憶されている、外部機器と無線通信を介して接続するために必要な接続情報を用いて、外部機器と無線通信を介して接続する処理と、
接続された外部機器のうちの第1の外部機器の属性情報と、接続された外部機器のうちの第2の外部機器との属性情報とを比較し、前記第2の外部機器について、前記第1の外部機器との接続の可否を判定する処理と、
前記判定する処理において接続が可能であると判定された場合に、前記第1の外部機器と当該情報処理装置との接続を切断して、前記第1の外部機器に対する前記接続情報を前記第2の外部機器に送信して、前記第1の外部機器との接続を前記第2の外部機器に実行させる処理と、
を実行させることを特徴とするプログラム。
(付記10)
前記情報処理装置に、
前記接続する処理において接続された外部機器ごとに、当該外部機器に対応するアイコンを表示する処理を実行させ、
前記判定する処理は、前記第1の外部機器に対応するアイコンについて、前記第2の外部機器に対応するアイコンに関係した所定の操作が行われると実行される、
ことを特徴とする付記9記載のプログラム。
(付記11)
前記情報処理装置に、
前記第2の外部機器から暗号鍵を受信する処理を実行させ、
前記実行させる処理は、前記暗号鍵によって暗号化された前記接続情報を前記第2の外部機器に送信する、
ことを特徴とする付記9又は10記載のプログラム。
(付記12)
前記情報処理装置に、
前記第1の外部機器が前記第2の外部機器に接続されている状態において、所定の操作が行われると、前記第2の外部機器に前記第1の外部機器との接続を切断させ、前記第1の外部機器に対する前記接続情報を用いて当該情報処理装置と前記第1の外部機器とを接続する処理を実行させる、
ことを特徴とする付記9乃至11いずれか一項記載のプログラム。