1. 背景
HTTPDNS は、不正な使用による課金への影響を防ぐための認証メカニズムを提供します。この機能を実装するには、このドキュメントの指示に従ってください。
2. 認証スキーム
既存のユーザーは、非認証アクセス方式を使用するプロダクトを公開しています。これらのユーザーは、引き続き非認証 API 操作を使用する必要があります。
新しい認証 API 操作が利用可能です。新しいプロダクトバージョンでは、この新しい API 操作に徐々に移行できます。古いアプリバージョンのユーザー数が許容レベルまで減少したら、署名付きアクセスを有効にして、次の図に示すように課金への影響を防ぐことができます。

2.1 既存ユーザーの移行プラン
署名付きアクセスを有効にすると、古いプロダクトバージョンの既存ユーザーは HTTPDNS サービスにアクセスできなくなります。
既存のユーザーは、アプリのバージョンを更新し、徐々に認証 API 操作に移行するように誘導する必要があります。
非認証 API 操作のユーザー数が、潜在的な損失が許容できるレベルまで減少したら、手動で署名付きアクセスを有効にできます。
2.2 新規ユーザー向けの利用計画
追加の統合コストを避けるため、署名付きアクセスはデフォルトで無効になっています。
署名付きアクセス機能のみが必要な場合は、手動で署名付きアクセス権限を有効にしてください。
2.3 署名付きアクセススイッチの管理
署名付きアクセスを無効にすると、セキュリティ上の脅威が発生する可能性があります。
攻撃による課金を避けるために、署名付きアクセスを有効にしてください。
3. 署名生成と認証メカニズム
HTTP API を使用する場合は、ベストプラクティスの推奨事項を読む必要があります。そうしないと、サービス障害のリスクがあります。
3.1 署名生成アルゴリズムと例
認証 API 操作
http://47.74.XXX.XXX/{account_id}/sign_d
http://47.74.XXX.XXX/{account_id}/sign_resolve
{account_id} を HTTPDNS アカウント ID に置き換えてください。アカウント ID は HTTPDNS コンソールで確認できます。
認証 API 操作に IP パラメーターを追加できます。このパラメーターの有無や内容は、署名計算に影響しません。
サービス IP アドレスのリストを取得するには、「スケジューリングサービス API 操作」をご参照ください。
署名アルゴリズム
sign = md5sum(host-secret-timestamp)
認証フィールドの説明
フィールド | 説明 |
host | 解決するホスト。URL の host パラメーターと同じ値を使用します。 |
secret | サーバーによって生成されます。[コンソール] > [設定] > [開発者設定] から取得できます。 |
timestamp | 署名の有効期限。1970 年 1 月 1 日からの秒数で表します。これは 10 桁の正の整数です。 説明 署名の最大有効期間は 24 時間です。 |
署名の例
例 1 (標準解決 API 操作):
元のリクエスト: http://47.74.XXX.XXX/{account_id}/d?host=www.aliyun.com
キーが `IAmASecret` で、署名が 2018 年 8 月 15 日 15:00:00 (UTC + 08:00) に有効期限切れになると仮定します。UNIX タイムスタンプは 1534316400 です。
sign = md5sum("www.aliyun.com-IAmASecret-1534316400") = 60c71e98b6d7fcbb366243e224eab457
認証リクエスト: http://47.74.XXX.XXX/{account_id}/sign_d?host=www.aliyun.com&t=1534316400&s=60c71e98b6d7fcbb366243e224eab457
例 2 (バッチ解決 API 操作):
元のリクエスト:
http://47.74.XXX.XXX/{account_id}/resolve?host=www.aliyun.com,www.taobao.com
キーが `IAmASecret` で、署名が 2018 年 8 月 15 日 15:00:00 (UTC + 08:00) に有効期限切れになると仮定します。UNIX タイムスタンプは 1534316400 です。
sign = md5sum("www.aliyun.com,www.taobao.com-IAmASecret-1534316400") = 12a3f6b1b14a46ca813ca6439beb59a4
認証リクエスト: http://47.74.XXX.XXX/{account_id}/sign_resolve?host=www.aliyun.com,www.taobao.com&t=1534316400&s=12a3f6b1b14a46ca813ca6439beb59a4
このスキームの長所と短所
短所
クライアント側の時計が同期していない可能性があります。
クライアント側にキーを保存すると、キーが漏洩した場合にセキュリティリスクが生じます。
長所
サーバーからデータを取得する必要がありません。
3.2 認証応答
認証が成功すると、HTTP 応答ステータスコードは 200 になり、応答は 単一ドメイン名解決 の [API 応答の説明] セクションで説明されているものと同じになります。
認証に失敗した場合、HTTP 応答ステータスコードは 403 または 400 になります。応答本文は、JSON フォーマットで特定のエラーコードを返します。
{ "code": "InvalidSignature" }
3.3 ステータスコードの説明
HTTP ステータスコード | エラーコード | 説明 |
403 | SignatureExpired | タイムスタンプが期限切れです。 |
403 | InvalidSignature | 署名が正しくありません。 |
400 | InvalidDuration | 署名の有効期間が長すぎます。最大は 86,400 秒です。 |
400 | InvalidSignature | 署名のフォーマットが正しくありません。 |
400 | InvalidTimestamp | タイムスタンプのフォーマットが正しくありません。 |
400 | AccountNotExists | アカウントが存在しないか、無効になっています。 |