ここでは、マーケティングプラットフォームAPIにおける認証の仕組みについて説明します。 マーケティングプラットフォームAPIの認証には、APIのための認証と、ユーザ(管理者、リード)のための認証の2種類があります。 APIのための認証は、クライアントアプリケーションがマーケティングプラットフォームAPIを利用可能であることを確認するために行います。 確認方法として認証トークンの保持確認および検証を行います。 ユーザのための認証とは、あるユーザがマーケティングプラットフォームへアクセス可能であることを確認するために行います。確認方法としてユーザ認証APIを利用したユーザID/パスワード認証、認証ユーザトークンの保持確認および検証を行います。
マーケティングプラットフォームAPIでは、APIコール毎に認証トークンの確認を行います。 またAPIのリクエストには、認証トークンが改ざんされていないことを保証するためのシグネチャ(署名)を付加する必要があります。 認証トークンおよびシグネチャにより、認証されたクライアントアプリケーションからのアクセスであることを保証します。
認証トークンの利用方法について説明します。
(1) 文字エンコーディング マーケティングプラットフォームAPI へアクセスする際の情報は全て UTF-8 エンコードされたデータを使用します。
(2)クライアントアプリケーションの認証 マーケティングプラットフォームAPI を使用するためには、「マーケティングプラットフォームAPIキー」、「パスワード」、「秘密鍵」が必要です。
図1-1.認証トークンとAPIコールのシーケンス図
(1) 認証トークンの取得 クライアントアプリケーションは、マーケティングプラットフォームの authentication.get メソッドを マーケティングプラットフォームAPIキー(図1-1のapi_key)、パスワード(図1-1のpassword)、シグネチャ(図1-1のapi_sig)を付けてAPIコールします。返り値として認証トークン(図1-1のtoken)が返ってきます。
RESTで呼び出す際のURLは以下です。
https://{domainname}/services/rest/authentication
マーケティングプラットフォームAPIキー、パスワード、シグネチャは、リクエストパラメータに記載します。
api_key=[api_key]&password=[password]&api_sig=[api_sig]
(2)APIコール マーケティングプラットフォームAPIキー、認証トークン、シグネチャに必要な情報を付加してAPIコールします。
RESTで認証トークンの取得を呼び出すURLは以下です。
https://{domainname}/services/rest/authentication?api_key=[api_key]&token=[token]&api_sig=[api_sig]
マーケティングプラットフォーム API へのすべてのメソッドコールにはシグネチャと呼ばれる署名が必要です。 シグネチャの作成方法を以下に記載します。
本説明で使用する各値は次の通りとします。
api_key : 55b985f4994bf940b63f6bfb0aec3f70
password : le3eguhg
secret_key : a707e9a9cc663951e0f217030d5cce07
(1) すべての引数をパラメータの名前でアルファベット順に並び替えます。 マーケティングプラットフォームAPIキー(api_key)、パスワード(password)、を引数として使用する場合は、api_key, password の順です。
(2) (1) の並び順どおりにキーとバリューの組を連結します。
ex)api_key55b985f4994bf940b63f6bfb0aec3f70passwordle3eguhg
(3) secret_keyを用いて(2)の文字列の HMAC-SHA-1 ハッシュ値を計算します。
(4) (3)の結果を16進数表示します。
ex)44c477c44e599f6f4f303b4d41a002b03acb9b99
検索条件にOR検索を使用する場合、同じsearch_valueパラメータを連結する必要があります。 このとき、valueの値が数値の場合でも、以下のように文字列として並べ替えて結合してください。 (※OR検索については「APIコール」に関する節の「検索条件指定パラメータ」の項をご参照ください。)
visitor.id=800 or visitor.id=7520の検索をする場合、リクエストは以下のようになります。
https://sample.smartseminar.jp/services/rest/visitor?search_key1=Id&search_operator1=eq&search_value1=800&search_value1=7520&api_key=55b985f4994bf940b63f6bfb0aec3f70&token=xxxxxxxxx&api_sig=xxxxx
このリクエストのシグネチャ計算の種は以下のようにします。
api_key55b985f4994bf940b63f6bfb0aec3f70search_key1Idsearch_operator1eqsearch_value17520800tokenxxxxxxxx
この際、search_value1の箇所は下記が正しく
search_value17520800
下記は誤りになります。
search_value18007520
APIのセキュリティ強度は、シグネチャの強度に依存します。 同じトークン、同じパラメータでシグネチャを作成した場合、シグネチャは毎回同じ値になります。 セキュリティの観点から、シグネチャの値を毎回変えるために、可変パラメータを追加することが有効です。 例えば、実行時の時間をパラメータに追加します。この場合のシグネチャ計算の種は下記になります。
ex)api_keyxxxxxtime20100722160045tokenxxxxx
また、リクエストURLに可変パラメータ(この例ではtime)を付加します。 マーケティングプラットフォームは未知のパラメータがリクエストされた場合、パラメータ値を無視します。
https://sample.smartseminar.jp/services/rest/visitor?api_key=xxxxx&token=xxxxxx&api_sig=xxxxx&time=20100722160045