アリババクラウドAPIゲートウェイでのJWTトークンを使用したAPIの保護

> 本記事は[こちらのブログ](https://www.alibabacloud.com/blog/securing-apis-with-jwt-tokens-in-alibaba-cloud-api-gateway_601935?spm=a2c65.11461433.0.0.4ee35355gP7SYc)を参考にしています。
> 翻訳にはアリババクラウドの[ModelStudio](https://www.alibabacloud.com/en/product/modelstudio)([Qwen](https://www.alibabacloud.com/en/solutions/generative-ai/qwen))を使用しております。

# Alibaba Cloud API GatewayとJWTトークン認証の統合

著者: Radityo Pradana, Alibaba Cloud Indonesia ソリューションアーキテクト

今日のデジタル環境において、APIセキュリティはこれまで以上に重要です。組織にとって重要な課題は、APIサービスへのアクセスを適切なユーザーに制限し、不正アクセスを防止することです。API認証で最も広く採用されている方法の一つがJSON Web Tokens (JWT)の使用です。このブログでは、Alibaba Cloudの<a href="https://www.alibabacloud.com/product/api-gateway?spm=a3c0i.247269.6791778070.565.529669598uDdmd" target="_blank">API Gateway</a>とJWTトークン認証を統合して、APIを保護し効果的にアクセス制御を行う方法について探ります。

## JWTとは？

JSON Web Token (JWT) は、JSONオブジェクトとして情報を取り扱うためのオープン標準です。現代のアプリケーションでユーザ認証や認可に広く使用されています。JWTは通常、以下の3つの部分から構成されます：

- **ヘッダー**：署名アルゴリズムなどのメタデータを含みます。
- **ペイロード**：送信される情報を含むクレーム（例：ユーザID、ロール、権限）を含みます。
- **署名**：トークンの整合性を確保し、その真正性を検証します。

JWTは秘密鍵または公開/秘密鍵ペアを使用して署名され、トークンの内容が改ざんされていないことを保証します。

## API GatewayでJWTを使用する理由

API GatewayでJWTトークンを使用することで以下のような利点があります：

- **ステートレス認証**：JWTはステートレスであり、トークンが発行された後はサーバー側でセッション情報を保持する必要がありません。これによりサーバー側のオーバーヘッドが軽減されます。
- **スケーラビリティ**：JWTトークンは自己完結型であり、サーバー側での保存が必要ないため、スケーラブルなマイクロサービスアーキテクチャに理想的です。
- **セキュリティ**：JWTを使用すると、ロール、権限、その他のクレームをトークンに直接埋め込むことで、各APIリクエストが適切に認証されることを簡単に管理できます。

## Alibaba Cloud API GatewayでJWTを使用する方法

Alibaba Cloud API GatewayとJWTを統合するには以下の手順があります：

![1](https://yqintl.alicdn.com/da610b81761d056082b0996f67fbc247bbdd2e04.png)

1. **JWKペアの生成**
   JWKペアを作成する方法はいくつかありますが、この例では<a href="https://mkjwk.org/" target="_blank">オンラインJWKジェネレータ</a>を使用します。この操作で秘密鍵と公開鍵を取得します。
   ![2](https://img.alicdn.com/imgextra/i3/O1CN01rbnfns1wtDzFGa2bg_! !6000000006365-0-tps-2582-1848.jpg)

2. **JWKペアの秘密鍵を使用してトークンを発行**
   JWKペアが生成されたら、公開鍵と秘密鍵を使用してトークンを発行します。トークンを生成する方法はいくつかありますが、この例では<a href="https://jwt.io/" target="_blank">オンライントークンジェネレータ</a>を使用します。エンコードされたトークンを取得し、APIに統合します。
   ![3](https://yqintl.alicdn.com/14572ea7707f8a3834bd0daa0e4b127a32ec4960.png)

3. **JWT認証プラグインの設定**
   - <a href="https://apigateway.console.aliyun.com/#/cn-hangzhou/plugins/list" target="_blank">API Gatewayコンソール</a>にログインします。
   - 左側のナビゲーションパネルで「Manage APIs > Plug-ins」を選択します。
   - 「Plug-ins」ページで右上にある「Create Plug-in」をクリックします。
   - 「Create Plug-in」ページで、「Plug-in Type」を「JWT Authorization」に設定します。以下はJWT認証プラグインの設定例です。
   ![4](https://img.alicdn.com/imgextra/i1/O1CN01M5EVm21DwkK7EQoYZ_! !6000000000281-0-tps-2928-1626.jpg)

4. **JWT認証プラグインをAPIにバインド**
   「Plug-in List」ページで作成したJWT認証プラグインを見つけ、「Actions」列の「Bind API」をクリックします。「Bind API」ダイアログボックスで、APIグループと環境を選択し、APIを「Selected APIs」パネルに追加し、「OK」をクリックします。
   ![5](https://img.alicdn.com/imgextra/i1/O1CN01hQnqiN1XCkrmRDy6O_! !6000000002888-0-tps-2058-1590.jpg)

5. **APIのテスト**
   JWTプラグインがバインドされたAPIは、リクエストヘッダーにエンコードされたトークンを含める必要があります。トークンを含めてAPIを呼び出すサンプルは以下の通りです：
   ![6](https://img.alicdn.com/imgextra/i3/O1CN01SGMj4B1qARZ8I3KIq_! !6000000005455-0-tps-2016-1472.jpg)

API GatewayとJWTに関するより詳細な情報とドキュメンテーションは以下のリンクをご覧ください：
<a href="https://www.alibabacloud.com/help/en/api-gateway/traditional-api-gateway/user-guide/jwt-based-authentication" target="_blank">https://www.alibabacloud.com/help/en/api-gateway/traditional-api-gateway/user-guide/jwt-based-authentication</a>