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

Alibaba Cloud Service Mesh:イングレスゲートウェイでの JWT ベース認証の設定

最終更新日:Jan 13, 2025

ゲートウェイで JWT ベース認証を有効にして、集中認証と承認を実装できます。こうすることで、認証されたリクエストのみがバックエンドサービスにアクセスできます。JWT は JSON Web Token の略です。

背景情報

JWT は、一般的にユーザー認証に使用されます。JWT には、ユーザー情報と、暗号化されたユーザー情報を格納するフィールドが含まれています。JWT ベース認証を実装する場合、暗号化されたユーザー情報が復号化され、入力されたユーザー情報と比較されます。これにより、ユーザー ID が検証されます。詳細については、「JWT」をご参照ください。

前提条件

手順

  1. ASM コンソール にログインします。左側のナビゲーションペインで、[サービスメッシュ] > [メッシュ管理] を選択します。

  2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、[ASM ゲートウェイ] > [イングレスゲートウェイ] を選択します。

  3. [イングレスゲートウェイ] ページで、使用するイングレスゲートウェイの名前をクリックします。

  4. ゲートウェイの概要ナビゲーションペインで、[ゲートウェイセキュリティ] > [JWT 認証] を選択します。

  5. 設定ウィザードの [JWT 設定] ステップで、[ゲートウェイ JWT 認証を有効にする] をオンにし、関連パラメーターを設定して、[次へ] をクリックします。

    パラメーター

    説明

    発行者

    JWT の発行者。この例では、パラメーターは testing@secure.istio.io に設定されています。

    JWKS ソース

    JWT の検証に使用される JSON Web Key Set(JWKS)。この例では、[jwks] が選択されています。

    キー

    値の例:

    { "keys":[ {"e":"AQAB","kid":"DHFbpoIUqrY8t2zpA2qXfCmr5VO5ZEr4RzHU_-envvQ","kty":"RSA","n":"xAE7eB6qugXyCAG3yhh7pkDkT65pHymX-P7KfIupjf59vsdo91bSP9C8H07pSAGQO1MV_xFj9VswgsCg4R6otmg5PV2He95lZdHtOcU5DXIg_pbhLdKXbi66GlVeK6ABZOUW3WYtnNHD-91gVuoeJT_DwtGGcp4ignkgXfkiEm4sw-4sfb4qdt5oLbyVpmW6x9cfa7vs2WTfURiCrBoUqgBo_-4WTiULmmHSGZHOjzwa8WtrtOQGsAFjIbno85jp6MnGGGZPYZbDAa_b3y5u-YpW7ypZrvD8BgtKVjgtQgZhLAGezMt0ua3DRrWnKqTZ0BJ_EyxOGuHJrLsn00fnMQ"}]}

    詳細設定

    [詳細設定] をクリックします。[JWT ルールの詳細オプション] ダイアログボックスで、要件に基づいて JWT トークンの位置、JWT パススルー、およびヘッダーによるペイロードの送信を設定します。[OK] をクリックします。

  6. 設定ウィザードの [一致ルール] ステップで、パラメーターを設定し、[送信] をクリックします。

    パラメーター

    説明

    一致モード

    この例では、[一致した場合に認証] が選択されています。有効な値:

    • [一致した場合に認証]:指定されたリクエストに対して JWT ベース認証が実行されます。

    • [一致した場合に認証をバイパス]:指定されたリクエストに対して JWT ベース認証は不要です。

    一致ルール

    [カスタム一致ルール] を選択し、[パス] をオンにして、このパラメーターを /productpage に設定します。この設定は、/productpage パスへのリクエストが JWT ベース認証に合格する必要があることを示しています。他のパスへのリクエストは、JWT ベース認証に合格する必要はありません。

    説明

    この場合、他のパスにアクセスするためのリクエストは、JTW を持たない場合は許可され、無効な JWT を持つ場合は拒否されます。

    その後、[JWT ベース認証が正常に設定されました] というメッセージが表示され、ネイティブの Istio セキュリティリソースが表示されます。[YAML] をクリックして、リソース設定を表示できます。

  7. JWT ベース認証の設定が有効になっているかどうかを確認します。

    1. 次のコマンドを実行して、環境変数を設定します。

      TOKEN=eyJhbGciOiJSUzI1NiIsImtpZCI6IkRIRmJwb0lVcXJZOHQyenBBMnFYZkNtcjVWTzVaRXI0UnpIVV8tZW52dlEiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjQ2ODU5ODk3MDAsImZvbyI6ImJhciIsImlhdCI6MTUzMjM4OTcwMCwiaXNzIjoidGVzdGluZ0BzZWN1cmUuaXN0aW8uaW8iLCJzdWIiOiJ0ZXN0aW5nQHNlY3VyZS5pc3Rpby5pbyJ9.CfNnxWP2tcnR9q0vxyxweaF3ovQYHYZl82hAUsn21bwQd9zP7c-LS9qd_vpdLG4Tn1A15NxfCjp5f7QNBUo-KC9PJqYpgGbaXhaGx7bEdFWjcwv3nZzvc7M__ZpaCERdwU7igUmJqYGBYQ51vr2njU9ZimyKkfDe3axcyiBZde7G6dabliUosJvvKOPcKIWPccCgefSj_GNfwIip3-SsFdlR7BtbVUcqR-yv-XOxJ3Uc1MI0tz3uMiiZcyPV7sNCU4KRnemRIMHVOfuvHsU60_GhGbiSFzgPTAa9WTltbnarTbxudb_YEOx12JiwYToeX0DCPb43W1tzIBxgm8NxUg
    2. 次のコマンドを実行して、アクセステストを実行します。

      • テスト 1:有効な JWT を持つリクエストを送信して、/productpage パスにアクセスします。

        curl -I http://${ASM ゲートウェイの IP アドレス}/productpage -H "Authorization: Bearer $TOKEN"

        出力例:

        HTTP/1.1 200 OK
        content-type: text/html; charset=utf-8
        content-length: 4294
        server: istio-envoy
        date: Tue, 17 Jan 2023 08:47:34 GMT
        x-envoy-upstream-service-time: 17
      • テスト 2:JWT を持たないリクエストを送信して、/productpage パスにアクセスします。

        curl -I http://${ASM ゲートウェイの IP アドレス}/productpage

        出力例:

        HTTP/1.1 403 Forbidden
        content-length: 19
        content-type: text/plain
        date: Tue, 17 Jan 2023 08:50:31 GMT
        server: istio-envoy
      • テスト 3:無効な JWT を持つリクエストを送信して、/productpage パスにアクセスします。

        curl -I http://${ASM ゲートウェイの IP アドレス}/productpage -H "Authorization: Bearer invalid token"

        出力例:

        HTTP/1.1 401 Unauthorized
        www-authenticate: Bearer realm="http://114.55.XXX.XXX/productpage", error="invalid_token"
        content-length: 79
        content-type: text/plain
        date: Tue, 17 Jan 2023 08:51:47 GMT
        server: istio-envoy
      • テスト 4:JWT を持たないリクエストを送信して、別のパスにアクセスします。

        curl -I http://${ASM ゲートウェイの IP アドレス}/api/v1/products/1  
        HTTP/1.1 200 OK
        content-type: application/json
        content-length: 195
        server: istio-envoy
        date: Tue, 17 Jan 2023 08:55:10 GMT
        x-envoy-upstream-service-time: 16

      次の表に、テスト結果を示します。テスト結果は期待どおりであり、JWT ベース認証が有効になっていることを示しています。

      アクセステスト

      アクセス許可?

      有効な JWT を持つリクエストを送信して、/productpage パスにアクセスします。

      はい

      JWT を持たないリクエストを送信して、/productpage パスにアクセスします。

      いいえ

      無効な JWT を持つリクエストを送信して、/productpage パスにアクセスします。

      いいえ

      JWT を持たないリクエストを送信して、別のパスにアクセスします。

      はい

関連情報