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:
- はいに設定されている場合、トークンベースの認証のみが許可されます。
- いいえに設定されている場合、ログインリダイレクトとトークン認証の両方がサポートされます。
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