12.7. OpenID Connect アイデンティティープロバイダーとの 3scale インテグレーションの例

以下の例は、3scale を OpenID Connect アイデンティティープロバイダーとして Red Hat Single Sign-On (RH-SSO) と統合する場合のフローを示しています。この例には、以下の特徴があります。

  • 管理ポータルで、API プロバイダーが 3scale API プロダクトを定義し、そのプロダクトが OpenID Connect ID プロバイダーとして RH-SSO を使用するように設定されています。
  • このプロダクトの OpenID Connect 設定には以下が含まれます。

    • 公開ベース URL: https://api.example.com
    • プライベートベース URL: https://internal-api.example.com
    • OpenID Connect 発行者: https://zync:41dbb98b-e4e9-4a89-84a3-91d1d19c4207@idp.example.com/auth/realms/myrealm
    • 標準フローである 認可コードフロー を選択します。
  • 3scale 開発者ポータルには、以下の特徴を持つアプリケーションがあります。このアプリケーションは、開発者ポータルの特定のアプリケーションプランで指定されている 3scale API プロダクトにアクセスできるように、API コンシューマーがサブスクライブした結果、作成されたものです。

    • クライアント ID: myclientid
    • Client Secret: myclientsecret
    • URL のリダイレクト: https://myapp.example.com
  • RH-SSO のレルム myrealm に、以下の特性を持つクライアントがあります。

    • クライアント ID: myclientid
    • Client Secret: myclientsecret
    • URL のリダイレクト: https://myapp.example.com
  • myrealm レルムには、以下のユーザーが含まれます。

    • ユーザー名: myuser
    • パスワード: mypassword
  • myrealm の 3scale Zync クライアントが正しい サービスアカウント ロールを持ちます。

フローは以下のようになります。

  1. エンドユーザー (API コンシューマー) は、以下の例のエンドポイントで認証サーバーの RH-SSO に承認要求を送信します。

    https://idp.example.com/auth/realms/myrealm/protocol/openid-connect/auth

    この要求では、アプリケーションは以下のパラメーターを提供します。

    • クライアント ID: myclientid
    • リダイレクト URL: https://myapp.example.com
  2. アプリケーションはエンドユーザーを RH-SSO ログインウィンドウにリダイレクトします。
  3. エンドユーザーは、以下の認証情報を使用して RH-SSO にログインします。

    • ユーザー名: myuser
    • パスワード: mypassword
  4. 設定およびエンドユーザーがこのアプリケーションで初めて認証されるかどうかに応じて、同意に関するウィンドウが表示されます。
  5. RH-SSO は、エンドユーザーに認可コードを発行します。
  6. API コンシューマー アプリケーションは、次のエンドポイントを使用して、JWT の認可コードを交換する要求を送信します。

    https://idp.example.com/auth/realms/myrealm/protocol/openid-connect/token

    要求には、認可コードとこれらのパラメーターが含まれます。

    • クライアント ID: myclientid
    • クライアントシークレット: myclientsecret
    • リダイレクト URL: https://myapp.example.com
  7. RH-SSO は、eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lk…xBArNhqF-A などの access_token フィールドを使用して JSON Web Token (JWT) を返します。
  8. API コンシューマーアプリケーションは、以下のようなヘッダーを使用して API 要求を https://api.example.com に送信します。

    Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lk…xBArNhqF-A.
  9. アプリケーションは、https://internal-api.example.com から正常なレスポンスを受け取るはずです。