3. 認証

BaaS REST API では、以下2種類のクライアント認証を実施する。

  • アプリケーション認証
  • ユーザ認証

3.1. アプリケーション認証

「アプリケーション認証」は、BaaSサーバが個々のアプリケーションを認証するものである。

BaaSを利用するすべてのアプリケーションには、アプリケーションIDとキー(アプリケーションキー、マスターキー)が発行される。これらはデベロッパーコンソール上で確認できる。

API 実行時には、このアプリケーションIDとキーをそれぞれ X-Application-Id, X-Application-Key HTTP ヘッダに指定することで、アプリケーションを認証する。 アプリケーションID/キーは、通常クライアントアプリケーション内に埋め込む形となる。

キーのうち、通常使用するのはアプリケーションキーのほうである。

マスターキーはいわゆるスーパーユーザ権限を持つ強力なキーであり、ACLによるアクセス制御をスキップしてリソースにアクセスできる。 取扱には注意すること。

3.2. ユーザ認証

「ユーザ認証」は、BaaSアプリケーションを利用する個々のユーザを認証するものである。

3.2.1. ログイン認証・セッショントークン

ユーザは通常ログインAPIを使用して ID とパスワードをサーバに提示し認証を行う。認証が完了すると、BaaSサーバはセッショントークンをクライアントに払い出す。 クライアントは以後の API 呼び出しでセッショントークンを提示することで、API認証を行う。 セッショントークンの提示には、X-Session-Token HTTP ヘッダを使用する。

3.2.2. Basic認証

ユーザはBasic認証を使用してAPI認証を行うこともできる。

Basic認証を使用する場合は、Authorizationヘッダを使用し、auth-scheme にBasicを、basic-credentials にユーザ名とパスワードを ':' で連結し Base64エンコードしたものを指定する。 詳細は RFC2617 を参照すること。

なお、ユーザ名に ':' を含めることはできない。またBasic認証ではE-mailをユーザの認証子に使用することはできない。

Basic認証を使用する場合は、ログインAPIを使用したセッショントークンの払い出しは不要であり、また「X-Session-Token」ヘッダも不要である。

注意

Basic認証は、その性質上API呼び出しのたびにパスワード照合を行うため、セッショントークンを使用する場合に比べて性能が低下する。

3.2.3. クライアント証明書認証

「クライアント証明書認証」は、クライアント証明書を使用してBaaSアプリケーションを利用する個々のユーザを認証するものである。

「ユーザ認証」ではIDとパスワードを提示するのに対し、「クライアント証明書認証」では、認証局(CA)から発行される証明書を用いてユーザを認証する。 IDとパスワードが不要になるため、従来のサインアップ/ログイン処理無しで該当するユーザの権限でAPIを呼び出すことができる。

ただし、クライアント証明書認証を利用するためには、APサーバの前段にTLSを終端するロードバランサ・リバースプロキシに相当する機能の設置が必須となる。

クライアント証明書認証利用時は、各APIの 「X-Session-Token」ヘッダが不要となる。 その代りリバースプロキシでの認証情報を以下のヘッダに格納してBaaSの各APIへ渡されるよう、リバースプロキシ側で設定を行う必要がある。

ヘッダ名 説明
X-SSL-Client-CertAuth-Validated

0 = 無効

1 = 有効

クライアント証明書認証が行われた場合に1を付与する。 本ヘッダが無い場合、またはその他の値の場合は、0と同様とみなす。
X-SSL-Client-Serial 文字列 クライアント証明書のシリアルナンバー。ユーザ名の要素として使用可能。
X-SSL-Client-CN 文字列 クライアント証明書のSubjectに設定されたCN(Common Name)を設定する。 ユーザ名の要素として使用可能。
X-SSL-Client-UID 文字列 クライアント証明書のSubjectに設定されたUID要素を設定する。 ユーザ名の要素として使用可能。デバイスの製造番号などの固有値を割り当てること。
X-SSL-Issuer-DN 文字列 クライアント証明書のIssuerフィールドの値。 テナントの設定にIssuerが登録されていない場合、比較は行われず正常とみなす。
X-SSL-Validate-Token 文字列 BaaSのシステム設定値と一致する文字列を指定する。