概要
Synthetic モニタリングでは、JavaScript のスクリプトから変数を生成できるので、カスタム認証を定義したり、パラメーターをエンコードしたりすることができます。
このガイドでは、スクリプトの変数を使用して、HMAC 署名付きの HTTP テストを作成する方法を説明します。
注: 標準的な HMAC 認証は存在しないため、実際にご利用になる HMAC 認証は若干異なる可能性があります。例えば、使用するヘッダー名が異なる場合があります。
セットアップ
ローカル変数を使って HMAC 認証の構成要素を作成する
Synthetic HTTP テストを作成し、Create a Local Variable をクリックして、以下の変数を追加します。
MY_SECRET_KEY
- メッセージの署名に使用される UTF-8 でエンコードされた鍵 (グローバル変数からインポートすることも可能)。
BODY
- リクエストの本文 (Request Body に設定)で、HMAC 認証の計算処理に使用されます。
DATETIME
- HMAC 署名を計算するためのパラメーター。ローカル変数として作成するか、
dd.variable.set('DATETIME', new Date().toISOString())
を使ってスクリプトからの変数内で作成してエクスポートすることができます。
テスト URL とリクエスト本文の定義
HTTP テストの URL とリクエストタイプを定義します。次に、Advanced Options > Request Body をクリックして、変数 {{ BODY }}
をリクエスト本文として追加します。
JavaScript で HMAC 署名を計算する
Variable From Script をクリックして、HTTP リクエストの HMAC 署名を生成します。
- 変数をスクリプトにインポートするには、
dd.variable.get("<variable_name>")
を使用します。 - 変数を定義するには、
dd.variable.set("<variable_name>", <value>)
またはdd.variable.setObfuscated("<variable_name>", <value>)
を使用します。
また、以下のようなヘルパー関数にもアクセス可能です。
std
ライブラリの大部分は、std.*
でアクセスできます。例えば、@std/encoding/hex.ts
で定義されている関数 encodeHex
を呼び出すには、std.encoding.hex.encodeHex
を使用します。- Web Crypto API などの標準的な JavaScript API。
注*: これらの API の一部はセキュリティ上の理由で無効になっています。
例:
const datetime = new Date().toISOString();
// "日付" の HTTP ヘッダーを設定し、DATETIME を UI におけるその値として使用します
dd.variable.set("DATETIME", datetime);
const message = "Hello, World!";
// BODY を UI におけるリクエスト本文として使用します
dd.variable.set("BODY", message);
const secretKeyUtf8 = dd.variable.get("MY_SECRET_KEY");
const key = await crypto.subtle.importKey(
"raw",
new TextEncoder().encode(secretKeyUtf8),
{ name: "HMAC", hash: "SHA-256" },
false,
["sign"]
);
const rawSignature = await crypto.subtle.sign(
{ name: "HMAC" },
key,
new TextEncoder().encode(datetime + "." + message)
);
// "認証" の HTTP ヘッダーを設定し、SIGNATURE を UI におけるその値として使用します
dd.variable.set("SIGNATURE", std.encoding.hex.encodeHex(rawSignature));
// 別の方法:
dd.variable.set("SIGNATURE_BASE64", std.encoding.base64.encode(rawSignature));
リクエストヘッダーに HMAC 署名を追加する
エクスポートされた変数 SIGNATURE
を使用して、HTTP リクエストヘッダーを構築します。
Request Options タブで、Name
を Authentication
に、Value
を {{ SIGNATURE }}
に設定したヘッダーと、Name
を Date
に、Value
を {{ DATETIME }}
に設定したヘッダーを追加します。Authorization
など別のヘッダーを定義することもできます。
HTTP テストの残りの部分を構成し、Create をクリックして保存します。
その他の参考資料