すべてのプロダクト
Search
ドキュメントセンター

Function Compute:カスタムドメイン名に JWT 認証を設定

最終更新日:Apr 02, 2026

JWT 認証により、Function Compute は、リクエストが関数に到達する前にゲートウェイレベルで受信リクエストを検証できます。カスタムドメイン名に公開 JSON Web Key Set (JWKS) を構成すると、Function Compute はそれを使用してすべてのリクエストのトークンを検証し、検証済みクレームを関数に直接転送します。関数はビジネスロジックのみを処理し、認証コードは不要です。

JWT 認証をエンドツーエンドで構成するには、次の手順を実行する必要があります。

  1. JWKS キーペアを生成し、秘密鍵を機密保持します。

  2. カスタムドメイン名で JWT 認証を有効化し、公開鍵をコンソールに貼り付けます。

  3. Function Compute が各リクエストからトークンを読み取る場所を構成します。

  4. (オプション) JWT クレームを関数パラメーターにマッピングします。

  5. テストトークンを生成し、Postman で構成を検証します。

仕組み

カスタムドメイン名の JWT 認証は、HTTP トリガーの JWT 認証と同じフローに従います。このプロセスでは非対称暗号化を使用します。秘密鍵がトークンに署名し、公開鍵がそれを検証します。

image

フローは次のように機能します。

  1. クライアントは、通常、ユーザー名とパスワードを使用して、カスタムオーソライザーに認証リクエストを送信します。

  2. オーソライザーは認証情報を検証し、秘密鍵を使用して標準 JWT トークンを生成します。

  3. オーソライザーはトークンをクライアントに返します。クライアントはそれをローカルにキャッシュします。

  4. クライアントは、トークンを含むビジネスリクエストを HTTP トリガーに送信します。

  5. Function Compute は、構成された公開鍵を使用して、リクエスト内のトークンを検証します。

  6. 検証が成功した場合、Function Compute は、マッピングされたクレームを含むリクエストを関数に転送します。

  7. 関数はリクエストを処理し、応答を返します。

  8. 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_5RS256, RS384, or RS512
RSASSA-PSSPS256, PS384, or PS512
Elliptic Curve (ECDSA)ES256, ES384, or ES512
HMACHS256, HS384, or HS512
EdDSAEdDSA
重要

HMAC は対称暗号化を使用しますが、これは非対称暗号化よりもセキュリティが低いです。可能な場合は非対称アルゴリズムを使用してください。非対称暗号化を使用する場合は、公開鍵情報のみを JWKS に含めてください。HTTPS を使用して転送中のトークンを保護し、トークンの漏洩を防止してください。

前提条件

開始する前に、次のことを確認してください。

JWT 認証の構成

ステップ 1: カスタムドメイン名設定を開く

  1. Function Compute コンソールにログインします。 左側のナビゲーションウィンドウで、[高度な機能] > [カスタムドメイン] を選択します。

  2. 上部のナビゲーションバーで、ご利用のカスタムドメイン名が存在するリージョンを選択します。

  3. [カスタムドメイン] ページで、設定するドメイン名をクリックします。

  4. 右上隅で、[変更] をクリックします。

ステップ 2: JWT 認証を有効化

「カスタムドメイン名の変更」ページで、[認証方法][JWT 認証] に設定します。

image.png

ステップ 3: JWKS の構成

JWT 認証では、公開鍵を含む有効な JWKS が必要です。オンライン ツール(例: mkjwk.org)を使用して生成できます。PEM 形式の秘密鍵をお持ちの場合は、jwx などのツールを使用して JWKS 形式に変換します。

mkjwk.org で JWKS を生成するには、[キー使用目的][アルゴリズム]、および [X.509 を表示] を設定し、[生成] をクリックします。このツールは 2 つのキーを生成します:

  • ① 秘密鍵 — コードでこれを使用して JWT トークンに署名 (発行) します。機密保持してください。

  • ② 公開鍵 — これを Function Compute コンソールの keys 配列に貼り付けます。

imageimage

コンソールに貼り付ける 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> を抽出して検証します。

image.png

ステップ 5: クレーム転送の構成 (オプション)

[JWT クレーム変換]」セクションで、JWT クレームを関数パラメーターにマッピングします。各マッピングについて、以下の項目を指定します:

  • マッピングパラメーター位置 — クレームを転送する場所 (ヘッダー、Cookie、クエリパラメーター、またはフォームパラメーター)

  • トークン内の元のクレーム名

  • 関数に渡されるパラメーター名

image.png

ステップ 6: 構成を保存

[保存] をクリックします。

構成の検証

前のセクションで生成した秘密鍵を使用してテスト JWT トークンを作成し、Postman を使用してドメイン名がリクエストを正しく認証することを確認します。

テストトークンの生成

  1. PyJWT モジュールをインストールします。「PyJWT」をご参照ください。

  2. 次の 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 でテスト

  1. Function Compute コンソールで、[高度な機能] > [カスタムドメイン] に移動します。カスタムドメイン名をコピーし、Postman の URL フィールドに貼り付けます。

  2. リクエストヘッダーを追加して、[JWT トークン設定] の設定と一致させます。たとえば、パラメーター名が Authentication で、プレフィックスが Bearer の場合:

    重要

    リクエストヘッダー内の JWT のフォーマットが、設定された [プレフィックスの削除] 設定と一致していることを確認してください。不一致がある場合、無効または期限切れの JWT エラーが返されます。

    パラメーター説明
    KeyAuthenticationJWT トークン設定
    ValueBearer <your-jwt-token>構成されたプレフィックス、スペース、および前のステップで生成されたトークン
  3. [送信]」をクリックして、応答を確認します。

image.png

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

よくある質問

「invalid or expired jwt」というエラーが表示されるのはなぜですか?

Function Compute はトークンを受信しましたが、検証中に拒否しました。考えられる原因は次のとおりです。

  • トークンの署名またはフォーマットが無効です。

  • トークンの有効期限が切れています。新しいトークンを生成してください。

  • トークンのキー ID (kid) が、ご利用のカスタムドメイン名用に構成された JWKS と一致しないか、一致する JWK が正確ではありません。

「the jwt token is missing」というエラーが表示されるのはなぜですか?

Function Compute はリクエスト内でトークンを見つけられませんでした。リクエストにトークンが存在すること、および [JWT トークン設定][読み取り位置] とパラメーター名が、トークンの送信先と完全に一致していることを確認してください。[読み取り位置][ヘッダー] に設定されている場合、ヘッダー値には、トークンの前に [プレフィックスの削除] の値とスペースを含める必要があります。

JWT 認証は別途課金されますか?

いいえ。JWT 認証に追加料金はかかりません。Function Compute は、JWT 認証が有効になっているかどうかに関係なく、関数呼び出しの数に基づいて課金されます。