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
- 標準フローである 認可コードフロー を選択します。
-
公開ベース URL:
3scale 開発者ポータルには、以下の特徴を持つアプリケーションがあります。このアプリケーションは、開発者ポータルの特定のアプリケーションプランで指定されている 3scale API プロダクトにアクセスできるように、API コンシューマーがサブスクライブした結果、作成されたものです。
-
クライアント ID:
myclientid
-
Client Secret:
myclientsecret
-
URL のリダイレクト:
https://myapp.example.com
-
クライアント ID:
RH-SSO のレルム
myrealm
に、以下の特性を持つクライアントがあります。-
クライアント ID:
myclientid
-
Client Secret:
myclientsecret
-
URL のリダイレクト:
https://myapp.example.com
-
クライアント ID:
myrealm
レルムには、以下のユーザーが含まれます。-
ユーザー名:
myuser
-
パスワード:
mypassword
-
ユーザー名:
-
myrealm
の 3scale Zync クライアントが正しい サービスアカウント ロールを持ちます。
フローは以下のようになります。
エンドユーザー (API コンシューマー) は、以下の例のエンドポイントで認証サーバーの RH-SSO に承認要求を送信します。
https://idp.example.com/auth/realms/myrealm/protocol/openid-connect/auth
この要求では、アプリケーションは以下のパラメーターを提供します。
-
クライアント ID:
myclientid
-
リダイレクト URL:
https://myapp.example.com
-
クライアント ID:
- アプリケーションはエンドユーザーを RH-SSO ログインウィンドウにリダイレクトします。
エンドユーザーは、以下の認証情報を使用して RH-SSO にログインします。
-
ユーザー名:
myuser
-
パスワード:
mypassword
-
ユーザー名:
- 設定およびエンドユーザーがこのアプリケーションで初めて認証されるかどうかに応じて、同意に関するウィンドウが表示されます。
- RH-SSO は、エンドユーザーに認可コードを発行します。
API コンシューマー アプリケーションは、次のエンドポイントを使用して、JWT の認可コードを交換する要求を送信します。
https://idp.example.com/auth/realms/myrealm/protocol/openid-connect/token
要求には、認可コードとこれらのパラメーターが含まれます。
-
クライアント ID:
myclientid
-
クライアントシークレット:
myclientsecret
-
リダイレクト URL:
https://myapp.example.com
-
クライアント ID:
-
RH-SSO は、
eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lk…xBArNhqF-A
などの access_token フィールドを使用して JSON Web Token (JWT) を返します。 API コンシューマーアプリケーションは、以下のようなヘッダーを使用して API 要求を
https://api.example.com
に送信します。Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lk…xBArNhqF-A.
-
アプリケーションは、
https://internal-api.example.com
から正常なレスポンスを受け取るはずです。