Skip to content

2. Specification

小林伸郎 edited this page Feb 1, 2017 · 17 revisions

はじめに

Device Connectシステムは、マルチOS、マルチプラットフォームのランタイム環境上において、スマートデバイスと接続するためのAPI (RESTful) を提供します。これにより、スマートデバイスとの接続方法・連携方法の利便性を向上することを目的としています。

Device Connectシステムが提供する機能一覧は以下の通りです。

  • 連携可能な周辺機器一覧を表示する機能
  • 接続I/F(Bluetooth, BLE, Wi-Fi, NFC)の違いのわかりにくさの解消
  • 機器プロファイルによる統一的なAPI
  • ユーザによるアプリケーション認可機能
  • etc.
構成図

APIアクセスデザインパターン

Device Connectシステムでは、シンプルで手軽なHTTP通信と、効率的なWebSocket通信によるイベント処理を行い操作できるようにします。
以下の3つのデザインパターンを元にAPIの設計を行っています。

  • One shot data
  • Event driven data
  • Streaming data

One shot data

シンプルなRESTでDevice Conenct Managerにアクセスすることで、ウェアラブルデバイスやIoTデバイスの情報を取得、操作を行います。

例) アクセスした瞬間の心拍センサーの値を取得
Sequence of One shot data

Event driven data

WebSocketを使用して、ウェアラブルデバイスやIoTデバイスで発生するイベントを連続的に受信します。

例) 心拍センサーの値に変化があった瞬間の値を連続的に自動取得
Sequence of Event data

Streaming data

Device Connect Managerは、各デバイスプラグインがWebサーバを立ち上げたURIをアプリケーションに中継します。
アプリケーションでは、受け取ったURIを直接参照することで、Device Connect Managerを経由せずに映像リソースなどのデータを受信します。

例) カメラ映像を要求した場合に、OSやGotAPIの内部構造を経由せずに映像リソースとしてアプリから直接利用
Sequence of Streaming data

アプリケーションと各デバイスプラグインが立ち上げたWebサーバ間の通信においては、特に規定は行なっていません。
デバイスプラグインの仕様に合わせて、アプリケーションが処理する必要があります。

Device Connect Manager

Device Connect Managerは、GotAPIで定義されているGotAPI Serverを実装したアプリケーションになります。

GotAPI

Device Connect Managerは OMA GotAPI v1.1 上で定義されている機能を実装しています。
詳しくは、GotAPIの資料を参照してください。

GotAPI Interface

GotAPIでは、標準化したAPIを定義しています。
Device Connectシステムでは、GotAPIが定義している以下のAPIを実装しています。

Availability API

GotAPIサーバ(Device Connect Manager)が起動しているか確認します。

Authorization API

GotAPI Auth Serverにユーザ認可を求めます。

ServiceDiscovery API

GotAPIサーバ(Device Connect Manager)に接続されているサービス(デバイス)を取得します。

ServiceInformation API

GotAPIサーバ(Device Connect Manager)からサービス(デバイス)の詳細な情報を取得します。

セキュリティ

リクエストの発行元を明示

OMA GotAPI v1.1 の規定に従い、アプリケーションは、リクエストメッセージのOriginヘッダを付加する必要があります。
GotAPIのセキュリティ機能であるアプリケーション認可機能やホワイトリスト機能は、Originヘッダの情報を元に実行されます。

HTMLアプリケーションとNativeアプリケーションで付加するヘッダは以下の通りになります。

  • HTMLアプリケーションの場合

RFC6454上で定義されるOriginをOriginヘッダに指定します。

GET /gotapi/availability HTTP/1.1
Host: 127.0.0.1:4035
Origin: http://xxx.example.com/
  • Nativeアプリケーションの場合

X-GotAPI-OriginヘッダにNativeアプリケーションの識別子(Androidの場合はパッケージ名等)を指定します。

GET /gotapi/availability HTTP/1.1
Host: 127.0.0.1:4035
X-GotAPI-Origin: com.example.android.app

なお、本機能はDevice Connect Managerの設定画面で有効/無効を切り替えることができます。
本機能を無効にした場合は、Originが不要になるためにアプリケーション認可機能やホワイトリスト機能も同時に無効になります。

アプリケーション認可機能

ユーザーが認可していないアプリケーションからのアクセスをブロックする機能です。

アプリケーションは、初めてDevice Connectシステムにアクセスする際、ユーザーからの認可とともに、アクセストークンを取得する必要があります。
アクセストークン無しでデバイスにアクセスしようとした場合、Device Connectシステムはアプリケーションに対してエラーを返却します。

なお、本機能はDevice Connect Managerの設定画面で有効/無効を切り替えることができます。

ホワイトリスト機能

ホワイトリストに含まれないアプリケーションからのアクセスを禁止する機能です。 また、ユーザに対してアプリケーションのホワイトリスト管理機能及びUIと本機能の有効/無効を操作するUIを提供します。
これによりユーザ操作によって切り替え可能にします。

本機能が有効になっている場合、アプリケーションから受信したリクエストメッセージのOriginヘッダをチェックし、Originがホワイトリストに含まれていない場合、エラーを返却します。

HMACサーバ検証機能

アプリケーション側で、Device Connectシステムの正当性を検証できるように、アプリケーションからのリクエストへの応答にHMACを付加します。
本機能の使用・不使用はアプリケーション側に委ねられています。

セキュリティ

Device Connect Managerでは、GotAPIのセキュリティ以外にもいくつかの制限を設けています。

外部IPを許可

Device Connect Managerは、127.0.0.1(localhost)以外の外部IPからのアクセスを許可することができます。

外部IPからのアクセスを許可している場合には、Device Connect Managerがインストールされている端末と同じネットワーク内のPC端末などから操作を行うことができます。

外部IPからのアクセスを許可する場合には、意図しない人からのアクセスが考えられますので、デフォルトでは無効に設定してあります。

ただし、機能にアクセスしようとした時点で、アプリケーション認可機能がDevice Connect Managerがインストールされている端末で実行され認可が求められます。
よって、認可を受けていない外部IPからのアクセスでは、操作することはできません。

ポート監視

Device Connect Managerで使用するポートを監視を行い、Device Connect Manager以外のアプリケーションが起動している場合には、警告を表示してユーザに確認を行います。

ユーザは、Device Connect Manager以外のアプリがポートを使用していることに気がつくことができ、Device Connect Managerになりすましをしているアプリケーションを発見することができるようになります。

iOSでは、バックグランドでアプリケーションが動作することができないため、他のアプリケーションがなりすましすることができません。よって、この機能はAndroidにのみ実装してあります。

デバイスプラグイン

Device Connect Managerと連携して周辺機器を操作、および、イベントを送信するアプリケーションになります。
スマートフォン内で周辺機器毎のAndroidもしくはiOSアプリケーションとして構成されます。

Clone this wiki locally