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のシステム設定値と一致する文字列を指定する。 |