HTTP(S)
要求Audience Manager では、HTTP(S)
サーバー間要求をデジタル署名して有効性を確保する必要があります。ここでは、HTTP(S)
要求に秘密鍵で署名する方法について説明します。
ユーザーから提供され Audience Manager と共有される秘密鍵を使用して、IRIS と HTTP(S) サーバーの間で送信される HTTP(S)
要求にデジタル署名することができます。これにより、以下が保証されます。
HTTP(S)
メッセージをパートナーに送信できます。HTTP
の場合でも、中間者攻撃でメッセージが改変されるのを防ぐことができます。秘密鍵のローテーションの節で示すように、IRIS には、ダウンタイムなしで鍵をローテーションする機能が組み込まれています。
HTTP(S)
リアルタイムサーバー間宛先の場合は、担当の Audience Manager コンサルタントに連絡して、次の情報を指定してください。
HTTP(S)
ヘッダーの名前(以下のヘッダー例では X-Signature)。* Connected to partner.website.com (127.0.0.1) port 80 (#0)
> POST /webpage HTTP/1.1
> Host: partner.host.com
> Accept: */*
> Content-Type: application/json
> Content-Length: 20
> X-Signature: +wFdR/afZNoVqtGl8/e1KJ4ykPU=
POST message content
HTTP(S)
メッセージを IRIS が作成します。HTTP(S)
メッセージと秘密鍵に基づいて、IRIS が署名を作成します。HTTP(S)
要求をパートナーに送信します。このメッセージには、上記の例に示すように、署名と実際のメッセージが含まれています。HTTP(S)
要求を受信します。IRIS から受信したメッセージ本文と署名を読み取ります。IRIS でメッセージ署名に使用されている方法は、HMAC(ハッシュベースのメッセージ認証コード)です。実装とライブラリは、基本的にどのようなプログラミング言語でも入手可能です。HMAC に対する既知の長さ拡張攻撃はありません。次の Java コードの例を参照してください。
// Message to be signed.
// For GET type HTTP(S) destinations, the message used for signing will be the REQUEST_PATH + QUERY_STRING
// For POST type HTTP(S) destinations, the message used for signing will be the REQUEST_BODY.
// String getData = "/from-aam-s2s?sids=1,2,3";
String postData = "POST message content";
// Algorithm used. Currently supported: HmacSHA1, HmacSHA256, HmacMD5.
String algorithm = "HmacSHA1";
// Private key shared between the partner and Adobe Audience Manager.
String key = "sample_partner_private_key";
// Perform signing.
SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), algorithm);
Mac mac = Mac.getInstance(algorithm);
mac.init(signingKey);
byte[] result = mac.doFinal(postData.getBytes());
String signature = Base64.encodeBase64String(result).trim();
// signature = +wFdR/afZNoVqtGl8/e1KJ4ykPU=
HMACハッシュ実装の RFC は https://www.ietf.org/rfc/rfc2104.txt です。テストサイトは https://asecuritysite.com/encryption/hmac です(Hex エンコーディングを base64 に変換する必要があることに注意してください)。
秘密鍵のローテーションをおこなうため、パートナーは、新しい秘密鍵を Adobe Audience Manager コンサルタントに伝える必要があります。古い鍵は Audience Manager から削除され、IRIS は新しい署名ヘッダーのみ送信します。これで鍵がローテーションされました。
GET
タイプの宛先の場合、署名に使用するメッセージは REQUEST_PATH + QUERY STRING(例:/from-aam-s2s?=1,2,3)になります。IRIS ではホスト名や HTTP(S)
ヘッダーを考慮しません。これらは、経路の途中で改変されたり誤って設定されたりするおそれがあります。また、間違って通知される可能性もあります。
POST
タイプの宛先の場合、署名に使用されるメッセージは REQUEST_BODY になります。この場合もやはり、ヘッダーやその他の要求パラメーターは無視されます。