第12章 OpenID Connect インテグレーション

3scale では、OpenID Connect 仕様と以下の機能を使用して、API リクエストの認証用にサードパーティーアイデンティティープロバイダー (IdP) を統合します。

  • OpenID Connect は OAuth 2.0 に追加する形で構築され、OAuth 2.0 の承認フレームワークを認証メカニズムにより補完します。
  • OpenID Connect authentication オプションが使用されると、API リクエストは JSON Web Token (JWT) 形式 (RFC 7519) のアクセストークンを使用して認証されます。

インテグレーションは、以下に示す 2 つの部分で構成されます。

Red Hat 3scale は、OpenID プロバイダーとして機能する Red Hat Single Sign-On (RH-SSO)により、両方のインテグレーションポイントを完全にサポートしています。サポートされる RH-SSO のバージョンについては、「Red Hat 3scale API Management のサポート対象構成」のアーティクルを参照してください。APIcast のインテグレーションは、ForgeRock でもテストされています。

どちらのケースでも、OpenID Connect の認証オプションを使用するサービスの Integration ページにおいて、APIcast Configuration の OpenID Connect Issuer フィールドを指定して、インテグレーションを設定することができます。手順については、「3 scale と Red Hat Single Sign-On の統合 」を参照してください。

12.1. APIcast による JWT の検証および解析

OpenID Connect の認証モードを使用するサービスに対する API リクエストは、OpenID プロバイダーにより発行された JWT 形式のアクセストークンを提供する必要があります。このトークンは、Bearer スキーマを使用して Authorization ヘッダーで提供されます。ヘッダーの例を以下に示します。

Authorization: Bearer <JWK>

例:

Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2lkcC5leGFtcGxlLmNvbSIsInN1YiI6ImFiYzEyMyIsIm5iZiI6MTUzNzg5MjQ5NCwiZXhwIjoxNTM3ODk2MDk0LCJpYXQiOjE1Mzc4OTI0OTQsImp0aSI6ImlkMTIzNDU2IiwidHlwIjoiQmVhcmVyIn0.LM2PSmQ0k8mR7eDS_Z8iRdGta-Ea-pJRrf4C6bAiKz-Nzhxpm7fF7oV3BOipFmimwkQ_-mw3kN--oOc3vU1RE4FTCQGbzO1SAWHOZqG5ZUx5ugaASY-hUHIohy6PC7dQl0e2NlAeqqg4MuZtEwrpESJW-VnGdljrAS0HsXzd6nENM0Z_ofo4ZdTKvIKsk2KrdyVBOcjgVjYongtppR0cw30FwnpqfeCkuATeINN5OKHXOibRA24pQyIF1s81nnmxLnjnVbu24SFE34aMGRXYzs4icMI8sK65eKxbvwV3PIG3mM0C4ilZPO26doP0YrLfVwFcqEirmENUAcHXz7NuvA

JWT トークンの受領者はトークンに含まれる署名を検証し、トークンが既知の発行者により署名されていること、およびその内容が変更されていないことを確認します。3scale では、公開/秘密鍵のペアに基づく RSA 署名がサポートされます。なお、発行者は秘密鍵を使用して JWT トークンに署名します。APIcast は公開鍵を使用してこのトークンを検証します。

APIcast では、JWT 署名の検証に使用する JSON Web Key (JWK) の取得に、OpenID Connect Discovery が使用されます。

それぞれのリクエストについて、APIcast は以下の処理を行います。

  1. 公開鍵を使用して JWT トークンを検証する。
  2. クレーム nbf および exp を検証する。
  3. クレーム iss (Issuer) で指定される発行者が OpenID Connect Issuer フィールドで設定される発行者と同じであることを検証する。
  4. azp または aud クレームの値を抽出し、それをクライアント ID (3scale 内のアプリケーションを識別する) として使用して Service Management API を通じて呼び出しを承認する。

JWT の検証または承認の確認のいずれかが失敗すると、APIcast はAuthenication failed エラーを返します。そうでなければ、APIcast は API バックエンドにリクエストをプロキシー処理します。Authorization ヘッダーはリクエストにそのまま残るので、API バックエンドは JWT トークンを使用してユーザーおよびクライアントの ID を確認することもできます。