OpenID Connect (OIDC)
概要
OIDC (OpenID Connect) Policy は、OIDCプロバイダーと統合することにより、APIの認証と認可を可能にします。これにより、認証されたユーザーのみがトークンベースのアプローチまたは認可フローを通じてAPIにアクセスできるようになります。
設定の詳細
必須パス / 必須でないパス
- Required Path: OIDC認証は、リストされたパスに対してのみ強制されます。
- Not Required Path: OIDC認証は、リストされたパスではスキップされますが、他のすべてのパスには強制されます。
- パスが指定されていない場合、OIDC認証はすべてのパスに適用されます。
- パスオプションの切り替えには確認が必要です。


グラントタイプの設定
OIDCポリシーは、認証フローを決定する2つのGrant Typesをサポートしています:
- Authorization Code Grant: ユーザーをOIDCプロバイダーにリダイレクトして認証を行います。
- Password Grant: ユーザーの資格情報をIDトークンと直接交換します。
各グラントタイプには独自の設定があります:
Authorization Code Grant:このフローは主にweb applicationsに使用され、ユーザーはログインページを介して認証します。
| Configuration Field | Description |
|---|---|
| レルム | 認証レルムの名前。例: realms_name |
| クライアントID | OIDCプロバイダーによって割り当てられた一意の識別子。 |
| クライアントシークレット | 認証に必要なクライアントシークレット。 |
| ディスカバリー | プロバイダーのディスカバリーエンドポイントのURL(例: https://oidcprovider/.well-known/openid-configuration)。 |
| ログアウトパス | ユーザーのためのログアウトエンドポイント (例: /logout)。 |
| ログアウト後のリダイレクトURI | ログアウトパスのためのリダイレクトURIパラメータと値 |
| ベアラーのみ | ベアラートークンが必要かどうかを定義します: はい(トークン認証のみ)またはいいえ(トークンとログインリダイレクションの両方を許可)。 |
| スコープ | アクセスレベルを指定します(デフォルト: openid)。 |
| インストロスペクションエンドポイント | トークン検証のためのURL。 |
| ログインURL | ユーザーログインのためのAPIエンドポイント。 |
| クッキードメイン | 認証クッキーに関連付けられたドメイン (例: skapim.com)。 |
| バイパスヘッダー名 | 特定のリクエストに対してヘッダーキーを使用して認証をスキップすることを許可します (例: x-oidc-api-key)。 |
| バイパスキー | 実際のバイパスキーの値。 |
| リフレッシュトークンの有効期限 | トークンの有効期限 (デフォルト: 3600秒)。 |
| SameSite | クロスサイトリクエスト処理を制御するためのクッキー設定。オプション: Lax, Strict, または None。 |
| セキュア | セキュアクッキーを有効または無効にします (デフォルト: false)。 |
| 認証失敗時のアクション | 認証が失敗したときの動作を定義します。オプション: ログインページにリダイレクトまたは401を返す(拒否)。 |
| 許可IP / 拒否IP | 特定のIPをOIDC認証から許可またはブロックします。 |

このフローは通常、machine-to-machine authenticationまたは信頼されたクライアントに使用されます。
| Configuration Field | Description |
|---|---|
| レルム | 認証レルムの名前。例: auth |
| クライアントID | OIDCプロバイダーによって割り当てられた一意の識別子 (例: account)。 |
| クライアントシークレット | 認証に必要なクライアントシークレット。 |
| ディスカバリー | プロバイダーのディスカバリーエンドポイントへのURL (例: https://oidcprovider/.well-known/openid-configuration)。 |
| ログアウトパス | ユーザーのためのログアウトエンドポイント (例: /Logout)。 |
| リダイレクトURIパス | ログイン後にユーザーをリダイレクトするためのエンドポイント (例: /auth/api/login)。 |
| スコープ | アクセスレベルを指定します (デフォルト: openid)。 |
| SameSite | クロスサイトリクエスト処理を制御するためのクッキー設定。オプション: Lax, Strict, または None。 |
| セキュア | セキュアオプションのオン/オフを切り替えます |
| リフレッシュトークンの有効期限 | トークンの有効期限 (デフォルト: 3600秒)。 |
| ログインURL | ユーザーログインのためのAPIエンドポイント。 |
| セッション名 | セッションストレージ名を定義します (例: apim_prod_session)。 |
| クッキードメイン | 認証クッキーに関連付けられたドメイン (例: skapim.com)。 |
| バイパスヘッダー名 | 特定のリクエストに対してヘッダーキーを使用して認証をスキップすることを許可します (例: x-oidc-api-key)。 |
| バイパスキー | 実際のバイパスキーの値。 |
| ログイン後のリダイレクトURI | 成功したログイン後にユーザーをリダイレクトするためのURL。 |
| ログアウト後のリダイレクトURI | ログアウト後にユーザーをリダイレクトするためのURL。 |

注意:
- Authorization Code Grant はログインページのリダイレクトを必要とし、Password Grant は直接APIリクエストです。
- Bearer Only Mode:
- yesに設定されている場合、トークンベースの認証のみが許可されます。
- noに設定されている場合、ログインリダイレクトとトークン認証の両方がサポートされます。
Redisデータベースの選択
セッションデータは、異なるタイプのRedisデータベースに保存できます。選択された Redis type によって、設定する必要がある構成が決まります。
APIM Redis (Default)- セッションストレージのために組み込みのAPIM Redisを使用します。
- 追加の構成は必要ありません。
- 外部Redisインスタンスへの接続を許可します。
| Configuration Field | Description |
|---|---|
| Redis Host | Redisサーバーのアドレス (例: 127.0.0.1)。 |
| Redis Port | Redisサーバーのポート番号 (例: 6379)。 |
| Redis Password | 認証用のパスワード。 |
| Redis Database | 使用するデータベースインデックスを指定します(例:1)。 |
| Redis Pool Size | Redis接続プールの最大接続数(デフォルト:1000)。 |
| Redis Pool Backlog | 利用可能な接続を待っているリクエストの最大数(デフォルト:30)。 |

- セッションストレージのために分散Redisセットアップを使用します。
| Configuration Field | Description |
|---|---|
| Redis Cluster Nodes | クラスターのノードアドレス(例:redis-cluster.apim:6379)。 |
| Redis Cluster Password | 認証用のパスワード。 |
| Redis Cluster Name | クラスター名を指定します(例:kong_redis_cluster)。 |
| Redis Connect Timeout | Redis接続を確立するためのタイムアウト(デフォルト:1000ms)。 |
| Redis Read Timeout | Redisからデータを読み取るためのタイムアウト(デフォルト:1000ms)。 |
| Redis Send Timeout | Redisにデータを送信するためのタイムアウト(デフォルト:1000ms)。 |
| Redis Pool Size | Redis接続プールの最大接続数(デフォルト:1000)。 |
| Redis Pool Backlog | 保留中の接続の最大数(デフォルト:30)。 |
| Redis Keepalive Timeout | Redis接続が閉じられる前の最大アイドル時間(デフォルト:55000ms)。 |

OIDC認証動作に関する追加の注意事項
OIDC(OpenID Connect)は、クライアントアプリケーションが外部のOIDCプロバイダーを介してユーザーを認証できるようにします。
ログアウトパスとログアウト後のリダイレクトURIの動作
ログアウトパスとログアウト後のリダイレクトURIを設定する際の動作は、APIゲートウェイの構造に依存します:
- ゲートウェイのURLが https://your.domain.com で、APIのベースパスが /basePath の場合を考えてください。
- OIDCポリシーでログアウトパスを /logout に設定した場合、完全なログアウトURLは次のようになります: https://your.domain.com/basePath/logout
- このURLが呼び出されると、ログアウトはOIDCプロバイダーによって内部的に処理されます。
- ログアウト後、ブラウザはログアウト後のリダイレクトURI(つまり、redirect_uriの値)にリダイレクトされます。これはリクエスト内で明示的に定義する必要があります。
注記
完全なログアウトURLとredirect_uriが正しく設定されていない場合、ログアウトプロセスは期待通りにリダイレクトされない可能性があります。
サポートされている二つの認証方法
OIDCは認証を行うための二つの方法を提供します:
- ブラウザリダイレクトによるログイン画面:ブラウザがOIDCログインページにリダイレクトされ、ユーザー認証が行われます。
- リクエスト内のIDトークン:クライアントはユーザーをリダイレクトせずにHTTP経由でIDトークンを直接送信します。
これらの方法の動作はbearerOnly設定に依存します:
| bearerOnlyの値 | 動作 |
|---|---|
| no | (1)および(2)の両方の方法が許可されます。 |
| yes | 方法(2)のみが許可されます。システムはログインページにリダイレクトしません。 |
トークンの検証とヘッダー形式
- 方法(2)を使用してIDトークンを検証するには、イントロスペクションエンドポイントを構成する必要があります。これはトークンの有効性をチェックするエンドポイントです。
- IDトークンを使用してAPIを呼び出す際は、次の形式でリクエストヘッダーにトークンを含めてください:
Authorization: bearer your_ID_token
