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

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

最終更新日:Jun 11, 2025

JSON Web トークン(JWT)は、リクエストを認証するための使いやすいトークンベースの方法です。JWT 認証では、クライアントから提供されるトークンを使用して、ユーザーのステータス情報を保存します。関数はユーザーのステータス情報を保存する必要はありません。このため、JWT 認証はサーバーレス アプリケーションに最適な方法です。Function Compute は、カスタムドメイン名にバインドされている公開 JSON Web Key Set(JWKS)を使用して、カスタムドメイン名に送信されたリクエストの JWT 認証を実装します。また、Function Compute は、カスタムドメイン名の構成に基づいて、クレームを関数に転送します。このように、関数でリクエスト認証は不要になるため、ビジネスロジックのみに集中できます。

背景情報

概要

JWT は、リクエストを認証するための使いやすいトークンベースの方法です。詳細については、「RFC 7519」をご参照ください。JWT 認証では、クライアントから提供される tokens を使用して、ユーザーのステータス情報を保存します。関数はユーザーのステータス情報を保存する必要はありません。このため、JWT 認証はサーバーレス アプリケーションに最適な方法です。Function Compute は、カスタムドメイン名にバインドされている公開 JWKS を使用して、カスタムドメイン名に送信されたリクエストの JWT 認証を実装します。また、Function Compute は、カスタムドメイン名の構成に基づいて、クレームを関数に転送します。このように、関数でリクエスト認証は不要になるため、ビジネスロジックのみに集中できます。認証プロセスと JWT tokens の基本については、「JWT ベースの認証」および「JSON Web トークンの概要」をご参照ください。

JWT 認証プロセス

カスタムドメイン名の JWT 認証プロセスは、HTTP トリガーの JWT 認証プロセスと同じです。

上記の図は、Function Compute における HTTP トリガーの JWT 認証プロセスを示しています。このプロセスでは、非対称暗号化アルゴリズムが使用されます。次の項目では、プロセスの詳細について説明します。

  1. クライアントは、カスタムオーソライザーに認証リクエストを送信します。ほとんどの場合、リクエストにはユーザーのユーザー名とパスワードが指定されています。

  2. カスタムオーソライザーは、リクエスト内のユーザーのユーザー名やパスワードなどの認証情報を読み取って検証します。リクエストが検証に合格すると、オーソライザーは秘密鍵を使用して標準の token を生成します。

  3. カスタムオーソライザーは、token を含むレスポンスをクライアントに転送します。クライアントは token をオンプレミスのマシンにキャッシュします。

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

  5. HTTP トリガーは、構成済みの公開鍵を使用して、リクエスト内の token を検証します。

  6. 検証に合格すると、リクエストは保護された関数に渡されます。

  7. 保護された関数は、リクエストを処理して応答します。

  8. HTTP トリガーは、ビジネスレスポンスをクライアントに転送します。

制限

  • ビジネス要件に基づいて JWT を生成および配布できます。Function Compute は、トリガーに構成されている公開 JWKS を使用して JWT を認証します。

  • キー ID(kid)を含まない JSON Web Key(JWK)がサポートされています。

  • トリガーに複数の JWK を構成できます。

  • headerQuery、form、および cookie パラメーターからトークンを読み取ることができます。

  • claimsheaderQuery、form、および cookie パラメーターとして関数に転送できます。

  • Function Compute では、カスタムドメイン名に JWKS を構成できます。カスタムドメイン名に JWKS を構成すると、Function Compute はトークンと同じキー ID を持つ JWK 公開鍵を検索し、その公開鍵を使用してトークンの署名検証を実行します。カスタムドメイン名の JWKS では、最大 1 つの JWK のキー ID を未指定のままにするか、空の文字列に設定できます。

    次の表は、Function Compute の JWT でサポートされている署名アルゴリズムを示しています。

    署名アルゴリズム

    alg

    RSASSA-PKCS1-V1_5

    RS256、RS384、または RS512

    RSASSA-PSS

    PS256、PS384、または PS512

    楕円曲線(ECDSA)

    ES256、ES384、または ES512

    HMAC

    HS256、HS384、または HS512

    EdDSA

    EdDSA

重要
  • ハッシュベースのメッセージ認証コード(HMAC)署名アルゴリズムは、対称暗号化を使用します。非対称暗号化と比較して、対称暗号化は安全性に劣ります。セキュリティを向上させるために、非対称暗号化アルゴリズムを使用することをお勧めします。

  • 非対称暗号化アルゴリズムを使用する場合は、セキュリティ上の理由から、JWT に公開鍵に関する情報のみを含める必要があります。

  • リクエスト内の tokens などの機密情報を保護するために HTTPS を使用することをお勧めします。これは、トークンの漏洩を防ぐのに役立ちます。

JWT 認証を構成する

前提条件

カスタムドメイン名が作成されていること。詳細については、「カスタムドメイン名を構成する」をご参照ください。

手順

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

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

  3. 表示されるページの右上隅にある [変更] をクリックします。「カスタムドメイン名を変更」ページで、次の項目を構成し、[保存] をクリックします。

    1. [認証方法][JWT 認証] に設定します。

      image.png

    2. JWKS を構成します。

      カスタムドメイン名に JWT 認証を設定するには、有効な JWKS が必要です。JWKS は自分で生成できます。また、JSON Web Key Generator を検索して、mkjwk.org などのオンラインジェネレーターを検索して、JWKS を生成することもできます。PEM 形式の秘密鍵がある場合は、jwx などのツールを使用して、鍵の形式を JWKS 形式に変換できます。

      次の例では、mkjwk.org を使用して JWKS を生成します。次の操作を実行します。[キーの使用][アルゴリズム]、および [X.509 を表示] パラメーターを構成し、[生成] をクリックします。コードで秘密鍵(次の図の①)を使用して JWT トークンを発行する必要があります。秘密鍵は機密にしてください。公開鍵(次の図の②)をコピーして、Function Compute コンソールの JWKS の keys 配列に入力できます。

      imageimage

      次のサンプルコードは、構成済みの JWKS を示しています。

      {
          "keys": [
              {
                  "alg": "RS256",
                  "e": "AQAB",
                  "kty": "RSA",
                  "n": "u1LWgoomekdOMfB1lEe96OHehd4XRNCbZRm96RqwOYTTc28Sc_U5wKV2umDzolfoI682ct2BNnRRahYgZPhbOCzHYM6i8sRXjz9Ghx3QHw9zrYACtArwQxrTFiejbfzDPGdPrMQg7T8wjtLtkSyDmCzeXpbIdwmxuLyt_ahLfHelr94kEksMDa42V4Fi5bMW4cCLjlEKzBEHGmFdT8UbLPCvpgsM84JK63e5ifdeI9NdadbC8ZMiR--dFCujT7AgRRyMzxgdn2l-nZJ2ZaYzbLUtAW5_U2kfRVkDNa8d1g__2V5zjU6nfLJ1S2MoXMgRgDPeHpEehZVu2kNaSFvDUQ",
                  "use": "sig"
              }
          ]
      }
    3. JWT トークンを構成します。

      トークンの読み取り位置と名前を選択します。[読み取り位置] パラメーターは、[ヘッダー]、[Cookie]、[クエリパラメーター]、または [フォームパラメーター] に設定できます。[読み取り位置] パラメーターを [ヘッダー] に設定する場合は、ヘッダーのプレフィックスを指定する必要があります。Function Compute がトークンを取得すると、プレフィックスは削除されます。

      image.png

    4. JWT クレーム変換を構成します。

      「JWT クレーム変換」セクションで、関数にパラメーターを渡す位置、パラメーターの元の名前、および関数に渡された後のパラメーターの新しい名前を選択します。[マッピングパラメーター位置] は、[ヘッダー]、[Cookie]、[クエリパラメーター]、または [フォームパラメーター] に設定できます。

      image.png

結果を確認する

カスタムドメイン名の JWT 構成に基づいて、テストツールにカスタムドメイン名とトークンを入力して、ドメイン名を使用して関数にアクセスできるかどうかを確認します。このトピックでは、Postman を使用します。

  1. 前のステップ(JWT 認証を構成する)で生成した秘密鍵(X.509 PEM 形式)を使用して、JWT トークンを作成します。

    1. PyJWT モジュールをインストールします。詳細については、「PyJWT」をご参照ください。

    2. 次のサンプル Python スクリプトをローカルで実行して、JWT トークンを生成します。詳細については、「PyJWT」をご参照ください。

      import time
      
      private_key = """
      -----BEGIN PRIVATE KEY-----
      <JWT 認証を構成したときに生成された X.509 PEM 形式の秘密鍵を使用します>
      -----END PRIVATE KEY-----
      """
      
      headers = {
          "alg": "RS256",
          "typ": "JWT"
      }
      
      payload = {
          "sub": "1234567890",
          "name": "John Snow",
          "iat": int(time.time()),   # トークンの発行時間
          "exp": int(time.time()) + 60 * 60,   # トークンの有効期間を 1 時間に設定
      }
      
      
      encoded = jwt.encode(payload=payload, key=private_key.encode(), headers=headers)
      print("Generated token: %s" % encoded)
      
  2. Postman を使用して、カスタムドメイン名を使用して関数にアクセスできるかどうかを確認します。

    1. Function Compute コンソール にログインします。左側のナビゲーションウィンドウで、[高度な機能] > [カスタムドメイン] を選択します。[カスタムドメイン] ページで、管理するカスタムドメイン名を見つけます。ドメイン名をコピーして、Postman の URL フィールドに貼り付けます。

    2. Postman のヘッダーにトークンのパラメーターを構成します。例:

      パラメーター

      説明

      キー

      Authentication

      [JWT トークン構成] セクションで構成したパラメーターの名前。

      Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiSm9uIFNub3ciLCJhZG1pbiI6dHJ1ZSwiZXhwIjo0ODI5NTk3NjQxfQ.eRcobbpjAd3OSMxcWbmbicOTLjO2vuLR9F2QZMK4rz1JqfSRHgwQVqNxcfOIO9ckDMNlF_3jtdfCfvXfka-phJZpHmnaQJxmnOA8zA3R4wF4GUQdz5zkt74cK9jLAXpokwrviz2ROehwxTCwa0naRd_N9eFhvTRnP3u7L0xn3ll4iOf8Q4jS0mVLpjyTa5WiBkN5xi9hkFxd__p98Pah_Yf0hVQ2ldGSyTtAMmdM1Bvzad-kdZ_wW0jcctIla9bLnOo-Enr14EsGvziMh_QTZ3HQtJuToSKZ11xkNgaz7an5de6PuF5ISXQzxigpFVIkG765aEDVtEnFkMO0xyPGLg

      [JWT トークン構成] セクションの [プレフィックスを削除] パラメーターに指定したベアラトークンと、前のステップで生成した JWT トークン。

      重要

      リクエストヘッダーの JWT のフォーマットが、[JWT トークン構成] セクションで構成した [プレフィックスを削除] 設定と一致していることを確認してください。不一致がある場合、トリガーがトークンの解析を試みると、「無効または期限切れの jwt」というエラーメッセージが返されます。

    3. [送信] をクリックして、返された情報を表示します。image.pngnametofunction は、クレームが関数に渡された後のパラメーターの名前です。

よくある質問

カスタムドメイン名に JWT 認証を有効にした後、カスタムドメイン名にアクセスすると、「無効または期限切れの jwt」が返されるのはなぜですか?

このメッセージは、JWT 認証に失敗したことを示しています。考えられる原因は次のとおりです。

  • トークンの署名または形式が無効です。

  • トークンの期限が切れています。

  • トークンのキー ID が、カスタムドメイン名に構成した JWKS と一致しないか、一致した JWK が正しくありません。

カスタムドメイン名に JWT 認証を有効にした後、カスタムドメイン名にアクセスすると、「jwt トークンがありません」が返されるのはなぜですか?

このメッセージは、Function Compute がカスタムドメイン名の JWT トークンの構成に基づいてトークンを見つけられないことを示しています。リクエストにトークンが含まれているかどうか、または読み取り位置または名前が正しく指定されているかどうかを確認してください。[JWT トークン構成] セクションの [読み取り位置] パラメーターを [ヘッダー] に設定した場合は、トークンを構成するときに、[プレフィックスを削除] パラメーターの値を追加し、値と JWT トークンの間にスペースを空ける必要があります。そうしないと、エラーが返されます。

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

いいえ、JWT 認証は課金されません。デフォルトでは、Function Compute によって提供されるゲートウェイ関連の機能は、関数の呼び出し回数 に基づいて課金されます。したがって、JWT 認証を有効にするかどうかにかかわらず、JWT 認証は課金されません。