edit-icon download-icon

Authorization

最終更新日: Dec 10, 2018

すべてのリクエストに対して、リクエストを承認するために、リクエストヘッダーの Authorization フィールドを Function Compute (FC) がチェックします (HTTPトリガーに承認を匿名( anonymous )を設定した場合を除き)。FC サーバーと同じ署名アルゴリズムを使用するクライアントからのリクエストだけが検証に合格できます。署名ヘッダーがなく、有効な署名もないリクエストに関しては、Function Compute は HTTP 403 エラーを返します。

署名アルゴリズム

  1. signature = base64(hmac-sha256(HTTP_METHOD + "\n"
  2. + CONTENT-MD5 + "\n"
  3. + CONTENT-TYPE + "\n"
  4. + DATE + "\n"
  5. + CanonicalizedFCHeaders
  6. + CanonicalizedResource))
  7. Authorization = "FC " + accessKeyID + ":" + signature
  • HTTP_METHOD : 大文字の HTTP メソッド (PUT、GET、POST、DELETE など)。
  • CONTENT-MD5 :リクエストコンテンツの MD5 値。リクエストヘッダーに Content-MD5 が含まれていない場合は、このフィールドを空白のままにします。
  • CONTENT-TYPE:リクエストコンテンツタイプ。
  • DATE:発生したリクエストの時間を示します。この値は空白にすることはできず、現在 GMT 形式のみをサポートしています。
    • 注:クライアントが提供する DATE と FC サーバーがリクエストを処理するシステム時刻の差は 15 分未満でなければなりません。そうでない場合、FC はリクエストを拒否します。
  • CanonicalizedFCHeadersx-fc- で始まるすべての HTTP ヘッダーで構成される文字列です。次のセクションでは、文字列の生成方法について説明します。
  • CanonicalizedResource:リクエスト URL のパスです。例: /2016-08-15/services/my-service/functions?limit=100
  • hmac-sha256 :お客様の AccessKeySecret をキーとして使います。

CanonicalizedFCHeaders

次の手順を使用して CanonicalizedFCHeaders を生成できます。

  1. リクエストヘッダで x-fc- で始まるすべてのフィールドを探します (大文字と小文字は区別しません)。
    • 指定された接頭辞に一致するフィールドの場合、まずフィールド名を小文字に変換し、これらのフィールド名を昇順でソートします。
  2. 各フィールドに ${key}:${value}\n という形式の文字列を生成します。
    • ${key} は HTTP ヘッダーのキー (小文字) です。
    • ${value} は HTTP ヘッダーの値です。
    • たとえば、X-Fc-Invocation-Type: Syncx-fc-invocation-type:Sync\n に変換されます。
  3. これまでに生成されたすべての文字列を新しい文字列に結合します。

以下の擬似コードで CanonicalizedFCHeaders の生成を説明します。

  1. // javascript
  2. // prefix = 'x-fc-'
  3. function buildCanonicalHeaders(headers, prefix) {
  4. var list = [];
  5. var keys = Object.keys(headers);
  6. for (let i = 0; i < keys.length; i++) {
  7. var key = keys[i];
  8. if (key.startsWith(prefix)) {
  9. list.push(key);
  10. }
  11. }
  12. list.sort();
  13. var canonical = '';
  14. for (let i = 0; i < list.length; i++) {
  15. const key = list[i];
  16. canonical += `${key}:${headers[key]}\n`;
  17. }
  18. return canonical;
  19. }

サンプルリクエスト

リクエスト:

  1. GET /2016-08-15/services?limit=100&nextToken=&prefix=&startKey= HTTP/1.1
  2. Host: 1237050315505682.fc.cn-shanghai.aliyuncs.com
  3. User-Agent: go-sdk-0.1
  4. Accept: application/json
  5. Authorization: FC LTAIUyt0Yeq1rgqo:GBmoz6OwC7bobTlD1jboBZ9PkaZ1e4cKsQ+5/dlLTns=
  6. Date: Mon, 08 May 2017 03:08:31 GMT
  7. X-User-Agent: go-resty v0.11 - https://github.com/go-resty/resty
  8. Accept-Encoding: gzip

レスポンス:

  1. HTTP/1.1 200 OK
  2. Content-Type: application/json; charset=utf-8
  3. X-Fc-Request-Id: ab7c7602-0922-f04f-b4ee-923cd7df7fb0
  4. Date: Mon, 08 May 2017 03:08:31 GMT
  5. Transfer-Encoding: chunked

サンプルコード

また、FC シグニチャ生成について、リリースされた SDK を見ることもできます。