JWT 認証により、Function Compute は、リクエストが関数に到達する前にゲートウェイレベルで受信リクエストを検証できます。カスタムドメイン名に公開 JSON Web Key Set (JWKS) を構成すると、Function Compute はそれを使用してすべてのリクエストのトークンを検証し、検証済みクレームを関数に直接転送します。関数はビジネスロジックのみを処理し、認証コードは不要です。
JWT 認証をエンドツーエンドで構成するには、次の手順を実行する必要があります。
JWKS キーペアを生成し、秘密鍵を機密保持します。
カスタムドメイン名で JWT 認証を有効化し、公開鍵をコンソールに貼り付けます。
Function Compute が各リクエストからトークンを読み取る場所を構成します。
(オプション) JWT クレームを関数パラメーターにマッピングします。
テストトークンを生成し、Postman で構成を検証します。
仕組み
カスタムドメイン名の JWT 認証は、HTTP トリガーの JWT 認証と同じフローに従います。このプロセスでは非対称暗号化を使用します。秘密鍵がトークンに署名し、公開鍵がそれを検証します。
フローは次のように機能します。
クライアントは、通常、ユーザー名とパスワードを使用して、カスタムオーソライザーに認証リクエストを送信します。
オーソライザーは認証情報を検証し、秘密鍵を使用して標準 JWT トークンを生成します。
オーソライザーはトークンをクライアントに返します。クライアントはそれをローカルにキャッシュします。
クライアントは、トークンを含むビジネスリクエストを HTTP トリガーに送信します。
Function Compute は、構成された公開鍵を使用して、リクエスト内のトークンを検証します。
検証が成功した場合、Function Compute は、マッピングされたクレームを含むリクエストを関数に転送します。
関数はリクエストを処理し、応答を返します。
Function Compute は応答をクライアントに転送します。
JWT とトークン認証の背景については、「JWT ベースのトークン認証」および「JSON Web トークンの概要」をご参照ください。
使用制限
Function Compute は、ドメイン用に構成した公開 JWKS を使用して JWT を認証します。ご利用のビジネスロジックに基づいて JWT を生成および配布します。
キー ID (
kid) がない JSON Web Keys (JWKs) がサポートされています。JWKS 内の最大 1 つの JWK は、未指定または空のkidを持つことができます。カスタムドメイン名には複数の JWK を構成できます。Function Compute は、トークンの
kidを正しい JWK に一致させ、そのキーを署名検証に使用します。トークンは、
header、query、form、およびcookieパラメーターから読み取ることができます。クレームは、
header、query、form、およびcookieパラメーターとして転送できます。
サポートされている署名アルゴリズム:
| 署名アルゴリズム | alg 値 |
|---|---|
| RSASSA-PKCS1-v1_5 | RS256, RS384, or RS512 |
| RSASSA-PSS | PS256, PS384, or PS512 |
| Elliptic Curve (ECDSA) | ES256, ES384, or ES512 |
| HMAC | HS256, HS384, or HS512 |
| EdDSA | EdDSA |
HMAC は対称暗号化を使用しますが、これは非対称暗号化よりもセキュリティが低いです。可能な場合は非対称アルゴリズムを使用してください。非対称暗号化を使用する場合は、公開鍵情報のみを JWKS に含めてください。HTTPS を使用して転送中のトークンを保護し、トークンの漏洩を防止してください。
前提条件
開始する前に、次のことを確認してください。
Function Compute でカスタムドメイン名が構成済みであること。「カスタムドメイン名の構成」をご参照ください。
JWT 認証の構成
ステップ 1: カスタムドメイン名設定を開く
Function Compute コンソールにログインします。 左側のナビゲーションウィンドウで、[高度な機能] > [カスタムドメイン] を選択します。
上部のナビゲーションバーで、ご利用のカスタムドメイン名が存在するリージョンを選択します。
[カスタムドメイン] ページで、設定するドメイン名をクリックします。
右上隅で、[変更] をクリックします。
ステップ 2: JWT 認証を有効化
「カスタムドメイン名の変更」ページで、[認証方法] を [JWT 認証] に設定します。

ステップ 3: JWKS の構成
JWT 認証では、公開鍵を含む有効な JWKS が必要です。オンライン ツール(例: mkjwk.org)を使用して生成できます。PEM 形式の秘密鍵をお持ちの場合は、jwx などのツールを使用して JWKS 形式に変換します。
mkjwk.org で JWKS を生成するには、[キー使用目的]、[アルゴリズム]、および [X.509 を表示] を設定し、[生成] をクリックします。このツールは 2 つのキーを生成します:
① 秘密鍵 — コードでこれを使用して JWT トークンに署名 (発行) します。機密保持してください。
② 公開鍵 — これを Function Compute コンソールの
keys配列に貼り付けます。


コンソールに貼り付ける JWKS は次の構造に従います。
{
"keys": [
{
"alg": "RS256",
"e": "AQAB",
"kty": "RSA",
"n": "u1LWgoomekdOMfB1lEe96OHehd4XRNCbZRm96RqwOYTTc28Sc_U5wKV2umDzolfoI682ct2BNnRRahYgZPhbOCzHYM6i8sRXjz9Ghx3QHw9zrYACtArwQxrTFiejbfzDPGdPrMQg7T8wjtLtkSyDmCzeXpbIdwmxuLyt_ahLfHelr94kEksMDa42V4Fi5bMW4cCLjlEKzBEHGmFdT8UbLPCvpgsM84JK63e5ifdeI9NdadbC8ZMiR--dFCujT7AgRRyMzxgdn2l-nZJ2ZaYzbLUtAWn_U2kfRVkDNa8d1g__2V5zjU6nfLJ1S2MoXMgRgDPeHpEehZVu2kNaSFvDUQ",
"use": "sig"
}
]
}ステップ 4: JWT トークンの場所を構成
「JWT トークンの設定」セクションで、「読み取り位置」(ヘッダー、Cookie、クエリパラメーター、またはフォームパラメーター)と、Function Compute がトークンを検索するパラメーター名を設定します。
[読み取り位置]を[Header]に設定する場合は、[プレフィックスの削除]の値を指定してください。Function Compute は、トークンを解析する前にこのプレフィックスを削除します。たとえば、プレフィックスを Bearer に設定すると、リクエストヘッダー Authorization: Bearer <token> によって、Function Compute は <token> を抽出して検証します。

ステップ 5: クレーム転送の構成 (オプション)
「[JWT クレーム変換]」セクションで、JWT クレームを関数パラメーターにマッピングします。各マッピングについて、以下の項目を指定します:
マッピングパラメーター位置 — クレームを転送する場所 (ヘッダー、Cookie、クエリパラメーター、またはフォームパラメーター)
トークン内の元のクレーム名
関数に渡されるパラメーター名

ステップ 6: 構成を保存
[保存] をクリックします。
構成の検証
前のセクションで生成した秘密鍵を使用してテスト JWT トークンを作成し、Postman を使用してドメイン名がリクエストを正しく認証することを確認します。
テストトークンの生成
PyJWT モジュールをインストールします。「PyJWT」をご参照ください。
次の Python スクリプトをローカルで実行してトークンを生成します。秘密鍵のプレースホルダーを、JWKS 生成ステップからの X.509 PEM 秘密鍵に置き換えます。
import jwt
import time
private_key = """
-----BEGIN PRIVATE KEY-----
<Your X.509 PEM private key>
-----END PRIVATE KEY-----
"""
headers = {
"alg": "RS256",
"typ": "JWT"
}
payload = {
"sub": "1234567890",
"name": "John Snow",
"iat": int(time.time()), # Token issuance time
"exp": int(time.time()) + 60 * 60, # Token expires in 1 hour
}
encoded = jwt.encode(payload=payload, key=private_key.encode(), headers=headers)
print("Generated token: %s" % encoded)Postman でテスト
Function Compute コンソールで、[高度な機能] > [カスタムドメイン] に移動します。カスタムドメイン名をコピーし、Postman の URL フィールドに貼り付けます。
リクエストヘッダーを追加して、[JWT トークン設定] の設定と一致させます。たとえば、パラメーター名が
Authenticationで、プレフィックスがBearerの場合:重要リクエストヘッダー内の JWT のフォーマットが、設定された [プレフィックスの削除] 設定と一致していることを確認してください。不一致がある場合、
無効または期限切れの JWTエラーが返されます。パラメーター 値 説明 Key AuthenticationJWT トークン設定 Value Bearer <your-jwt-token>構成されたプレフィックス、スペース、および前のステップで生成されたトークン 「[送信]」をクリックして、応答を確認します。

クレーム転送が構成されている場合、応答はクレームが関数に渡されたことを確認します。たとえば、nametofunction はクレームマッピングからの転送されたパラメーター名です。