第12章 3scale と OpenID Connect アイデンティティープロバイダーの統合
API 要求を認証するために、3scale は OpenID Connect 仕様 に準拠するアイデンティティープロバイダーと統合できます。3scale との互換性を確保するために、アイデンティティープロバイダーは Red Hat Single Sign-On(RH-SSO) または デフォルトの Keycloak クライアント登録 を実装するサードパーティーのアイデンティティープロバイダーに指定できます。3scale API ゲートウェイ (APIcast) との互換性のために、OpenID Connect を実装するアイデンティティープロバイダーを使用できます。
3scale では、RFC 7591 Dynamic Client Registration Mechanism は使用されません。3scale と OpenID Connect アイデンティティープロバイダー間で互換性を完全に確保するため、デフォルトの Keycloak クライアント登録の依存関係があります。
OpenID Connect のベースは OAuth 2.0 Authorization Framework (RFC 6749) です。OpenID Connect は API 要求で JSON Web Token(JWT)(RFC 7519) を使用してその要求を認証します。3scale を OpenID Connect アイデンティティープロバイダーと統合する場合に、プロセスには 主要な部分が 2 つあります。
- APIcast は要求内の JWT を解析して検証します。成功すると、APIcast は API コンシューマークライアントアプリケーションの ID を認証します。
- 3scale Zync コンポーネントは、3scale アプリケーションの詳細を OpenID Connect アイデンティティープロバイダーと同期します。
RH-SSO が OpenID Connect アイデンティティープロバイダーの場合には、3scale ではこれらのインテグレーションポイントの両方がサポートされます。サポートされる RH-SSO のバージョンについては、Red Hat 3scale API Management のサポート対象設定 のアーティクルを参照してください。ただし、RH-SSO は必須ではありません。OpenID Connect 仕様およびデフォルトの Keycloak クライアント登録をサポートするアイデンティティープロバイダーを使用できます。APIcast のインテグレーションは、RH-SSO および ForgeRock でテストされています。
以下のセクションでは、OpenID Connect アイデンティティープロバイダーを使用するように 3scale を設定する方法について説明します。
- 3scale と OpenID Connect アイデンティティープロバイダーのインテグレーションの概要
- APIcast が JSON Web トークンを処理する方法
- 3scale Zync がアプリケーションの情報を OpenID Connect アイデンティティープロバイダーと同期する方法
- OpenID Connect アイデンティティープロバイダーとしての 3scale と Red Hat Single Sign-On のインテグレーション
- 3scale とサードパーティー OpenID Connect アイデンティティープロバイダーの統合
- OpenID Connect アイデンティティープロバイダーを使用した 3scale のテスト
- OpenID Connect アイデンティティープロバイダーおよび OpenID Connect アイデンティティープロバイダーとの 3scale インテグレーションの例
12.1. 3scale と OpenID Connect アイデンティティープロバイダーのインテグレーションの概要
主要な 3scale コンポーネントはそれぞれ、以下のように認証に参加します。
- APIcast は、API コンシューマーアプリケーションが提供する認証トークンの信頼性を検証します。デフォルトの 3scale デプロイメントでは、APIcast は API プロダクトの OpenID Connect 設定の自動検出を実装するので、このような検証が可能です。
- API プロバイダーは管理ポータルを使用して認証フローを設定します。
- 3scale マネージドの API が標準の API キーまたはアプリケーション ID とキーペアで要求を認証しない場合には、API プロバイダーは 3scale を OpenID Connect アイデンティティープロバイダーと統合する必要があります。以下の図は、OpenID Connect アイデンティティープロバイダーは Red Hat Single Sign-On (RH-SSO) です。
- 認証設定とライブの開発者ポータルにより、API コンシューマーは開発者ポータルを使用して特定の 3scale API プロダクトにアクセスできるようにするアプリケーションプランにサブスクライブします。
- OpenID Connect が 3scale と統合されると、サブスクリプションは API コンシューマーアプリケーションに設定されたフローをトリガーして、OpenID Connect アイデンティティープロバイダーから JSON Web Tokens (JWT) を取得します。API プロバイダーは OpenID Connect を使用するように API プロダクトを設定するタイミングで、このフローを指定します。
図12.1 OpenID Connect アイデンティティープロバイダーと主要な 3scale コンポーネントを示しています。
アプリケーションプランにサブスクライブした後に、API コンシューマーは統合された OpenID Connect アイデンティティープロバイダーから認証情報を取得します。これらの認証情報により、API コンシューマー アプリケーションがアップストリーム API (API コンシューマーがアクセスできる 3scale API プロダクトによって提供される API) に送信する要求の認証が可能になります。
認証情報には、クライアント ID とクライアントシークレットが含まれます。API コンシューマーによって作成されたアプリケーションは、これらの認証情報を使用して、OpenID Connect ID プロバイダーから JSON Web Token (JWT) を取得します。OpenID Connect で 3scale インテグレーションを設定する場合には、API コンシューマーアプリケーションが JWT を取得する方法のフローを選択します。RH-SSO でデフォルトの Authorization Code フローを使用する API コンシューマーアプリケーションでは、アプリケーションが以下を実行する必要があります。
- アップストリーム API バックエンドへの最初の要求の前に、OpenID Connect アイデンティティープロバイダーで OAuth 承認フローを開始します。認可コードフローはエンドユーザーを RH-SSO にリダイレクトします。エンドユーザーはログインして認可コードを取得します。
- JWT の認可コードを交換します。
- 認証時に RH-SSO から JWT を受信します。
- JWT が含まれる API 要求をアップストリーム API バックエンドに送信します。
- 有効期限が切れるまで、同じ JWT で後続の API 要求を送信します。
- JWT を更新するか、OpenID Connect アイデンティティープロバイダーに新しい要求を送信し、新しい JWT を取得します。必要なアクションは OpenID Connect アイデンティティープロバイダーによって異なります。
APIcast は API コンシューマーから要求を受け取り、その要求内の JWT を確認します。APIcast が JWT を検証する場合には、APIcast は JWT などの要求をアップストリーム API バックエンドに送信します。
図12.2 OpenID Connect アイデンティティープロバイダーは RH-SSO ですが、他の OpenID Connect アイデンティティープロバイダーの設定が可能です。