すべてのリクエストに対して、リクエストを承認するために、リクエストヘッダーの Authorization
フィールドを Function Compute (FC) がチェックします (HTTPトリガーに承認を匿名( anonymous )を設定した場合を除き)。FC サーバーと同じ署名アルゴリズムを使用するクライアントからのリクエストだけが検証に合格できます。署名ヘッダーがなく、有効な署名もないリクエストに関しては、Function Compute は HTTP 403
エラーを返します。
署名アルゴリズム
signature = base64(hmac-sha256(HTTP_METHOD + "\n"
+ CONTENT-MD5 + "\n"
+ CONTENT-TYPE + "\n"
+ DATE + "\n"
+ CanonicalizedFCHeaders
+ CanonicalizedResource))
Authorization = "FC " + accessKeyID + ":" + signature
HTTP_METHOD
: 大文字の HTTP メソッド (PUT、GET、POST、DELETE など)。CONTENT-MD5
:リクエストコンテンツの MD5 値。リクエストヘッダーに Content-MD5 が含まれていない場合は、このフィールドを空白のままにします。CONTENT-TYPE
:リクエストコンテンツタイプ。DATE
:発生したリクエストの時間を示します。この値は空白にすることはできず、現在 GMT 形式のみをサポートしています。- 注:クライアントが提供する DATE と FC サーバーがリクエストを処理するシステム時刻の差は 15 分未満でなければなりません。そうでない場合、FC はリクエストを拒否します。
CanonicalizedFCHeaders
:x-fc-
で始まるすべての HTTP ヘッダーで構成される文字列です。次のセクションでは、文字列の生成方法について説明します。CanonicalizedResource
:リクエスト URL のパスです。例:/2016-08-15/services/my-service/functions?limit=100
hmac-sha256
:お客様の AccessKeySecret をキーとして使います。
CanonicalizedFCHeaders
次の手順を使用して CanonicalizedFCHeaders を生成できます。
- リクエストヘッダで
x-fc-
で始まるすべてのフィールドを探します (大文字と小文字は区別しません)。- 指定された接頭辞に一致するフィールドの場合、まずフィールド名を小文字に変換し、これらのフィールド名を昇順でソートします。
- 各フィールドに
${key}:${value}\n
という形式の文字列を生成します。${key}
は HTTP ヘッダーのキー (小文字) です。${value}
は HTTP ヘッダーの値です。- たとえば、
X-Fc-Invocation-Type: Sync
はx-fc-invocation-type:Sync\n
に変換されます。
- これまでに生成されたすべての文字列を新しい文字列に結合します。
以下の擬似コードで CanonicalizedFCHeaders の生成を説明します。
// javascript
// prefix = 'x-fc-'
function buildCanonicalHeaders(headers, prefix) {
var list = [];
var keys = Object.keys(headers);
for (let i = 0; i < keys.length; i++) {
var key = keys[i];
if (key.startsWith(prefix)) {
list.push(key);
}
}
list.sort();
var canonical = '';
for (let i = 0; i < list.length; i++) {
const key = list[i];
canonical += `${key}:${headers[key]}\n`;
}
return canonical;
}
サンプルリクエスト
リクエスト:
GET /2016-08-15/services?limit=100&nextToken=&prefix=&startKey= HTTP/1.1
Host: 1237050315505682.fc.cn-shanghai.aliyuncs.com
User-Agent: go-sdk-0.1
Accept: application/json
Authorization: FC LTAIUyt0Yeq1rgqo:GBmoz6OwC7bobTlD1jboBZ9PkaZ1e4cKsQ+5/dlLTns=
Date: Mon, 08 May 2017 03:08:31 GMT
X-User-Agent: go-resty v0.11 - https://github.com/go-resty/resty
Accept-Encoding: gzip
レスポンス:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
X-Fc-Request-Id: ab7c7602-0922-f04f-b4ee-923cd7df7fb0
Date: Mon, 08 May 2017 03:08:31 GMT
Transfer-Encoding: chunked
サンプルコード
また、FC シグニチャ生成について、リリースされた SDK を見ることもできます。