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

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

最終更新日:Jul 15, 2024

JSON Web Token (JWT) は、リクエストを認証するための使いやすいトークンベースの方法です。 JWT認証は、クライアントによって提供されるトークンを使用して、ユーザステータス情報を格納する。 関数はユーザーステータス情報を格納する必要はありません。 これにより、JWT認証はサーバーレスアプリケーションにとって理想的な方法になります。 Function Computeは、カスタムドメイン名にバインドされているパブリックJSON Webキーセット (JWKS) を使用して、カスタムドメイン名に送信されるリクエストのJWT認証を実装します。 Function Computeは、カスタムドメイン名の設定に基づいて関数にクレームを転送します。 このように、関数ではリクエスト認証は必要なく、ビジネスロジックのみに集中できます。

背景情報

概要

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

JWT认证プロセス

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

image

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

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

  2. カスタム承認者は、リクエスト内のユーザー名やパスワードなどの認証情報を読み取り、検証します。 リクエストが検証に合格した後、承認者は秘密鍵を使用して標準のトークンを生成します。

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

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

  5. HTTPトリガーは、設定された公開キーを使用して、リクエスト内のトークンを検証します。

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

  7. protected関数は、要求を処理して応答します。

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

制限事項

  • ビジネス要件に基づいてJWTを生成および配布できます。 Function Computeは、トリガー用に設定されたパブリックJWKSを使用してJWTを認証します。

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

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

  • ヘッダークエリ、フォーム、およびcookieパラメーターからトークンを読み取ることができます。

  • クレームは、ヘッダークエリ、フォーム、およびcookieパラメーターとして関数に転送できます。

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

    次の表に、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に含める必要があります。

  • リクエスト内のトークンなどの機密情報を保護するために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配列に入力できます。

      image

      次のサンプルコードは、設定された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

Verify the result

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

  1. [Configure JWT authentication] で生成された秘密鍵を使用して、JWTトークンを作成します。

  2. Postmanを使用して、カスタムドメイン名を使用して関数にアクセスできるかどうかを確認します。

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

    2. Postmanのヘッダーでトークンのパラメーターを設定します。 例:

      パラメーター

      説明

      Key

      認証

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

      ベアラーeyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiSm9uIFNub3ciLCJhZG1pbiI6dHJ1ZSwiZXhwIjo0ODI5NTk3NjQxfQ.eRcobbpjAd3OSMxcWbmbicOTLjO2vuLR9F2QZMK4rz1JqfSRHgwQVqNxcfOIO9ckDMNlF_3jtdfCfvXfka-phJZpHmnaQJxmnOA8zA3R4wF4GUQdz5zkt74cK9jLAXpokwrviz2ROehwxTCwa0naRd_N9eFhvTRnP3u7L0xn3ll4iOf8Q4jS0mVLpjyTa5WiBkN5xi9hkFxd__p98Pah_Yf0hVQ2ldGSyTtAMmdM1Bvzad-kdZ_wW0jcctIla9bLnOo-Enr14EsGvziMh_QTZ3HQtJuToSKZ11xkNgaz7an5de6PuF5ISXQzxigpFVIkG765aEDVtEnFkMO0xyPGLg

      [JWTトークン設定] セクションの [プレフィックスの削除] パラメーターに指定したベアラトークンと、前の手順で生成されたJWTトークン。 ベアラートークンとJWTトークンの間にスペースを残します。

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

FAQ

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

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

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

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

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

カスタムドメイン名のjwt認証を有効にした後、カスタムドメイン名にアクセスすると、「JWT token is missing」が返されるのはなぜですか。

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

JWT認証の料金はかかりますか?

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