メインコンテンツまでスキップ

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 FieldDescription
レルム認証レルムの名前。例: realms_name
クライアントIDOIDCプロバイダーによって割り当てられた一意の識別子。
クライアントシークレット認証に必要なクライアントシークレット。
ディスカバリープロバイダーのディスカバリーエンドポイントの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認証から許可またはブロックします。

Authorization Code Grant

Password Grant:

このフローは通常、machine-to-machine authenticationまたは信頼されたクライアントに使用されます。

Configuration FieldDescription
レルム認証レルムの名前。例: auth
クライアントIDOIDCプロバイダーによって割り当てられた一意の識別子 (例: 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を使用します。
  • 追加の構成は必要ありません。
Custom Redis
  • 外部Redisインスタンスへの接続を許可します。
Configuration FieldDescription
Redis HostRedisサーバーのアドレス (例: 127.0.0.1)。
Redis PortRedisサーバーのポート番号 (例: 6379)。
Redis Password認証用のパスワード。
Redis Database使用するデータベースインデックスを指定します(例:1)。
Redis Pool SizeRedis接続プール内の最大接続数(デフォルト:1000)。
Redis Pool Backlog利用可能な接続を待っている最大リクエスト数(デフォルト:30)。

Redis Cluster
  • セッションストレージのために分散Redisセットアップを使用します。
Configuration FieldDescription
Redis Cluster Nodesクラスターノードのアドレス(例:redis-cluster.apim:6379)。
Redis Cluster Password認証用のパスワード。
Redis Cluster Nameクラスタ名を指定します(例:kong_redis_cluster)。
Redis Connect TimeoutRedis接続を確立するためのタイムアウト(デフォルト:1000ms)。
Redis Read TimeoutRedisからデータを読み取るためのタイムアウト(デフォルト:1000ms)。
Redis Send TimeoutRedisにデータを送信するためのタイムアウト(デフォルト:1000ms)。
Redis Pool SizeRedis接続プール内の最大接続数(デフォルト:1000)。
Redis Pool Backlog最大保留接続数(デフォルト:30)。
Redis Keepalive TimeoutRedis接続が閉じられる前の最大アイドル時間(デフォルト: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は認証を行うための二つの方法を提供します:

  1. ブラウザリダイレクトによるログイン画面:ブラウザがOIDCログインページにリダイレクトされ、ユーザー認証が行われます。
  2. リクエスト内のIDトークン:クライアントはユーザーをリダイレクトせずに、HTTP経由でIDトークンを直接送信します。

これらの方法の動作は、bearerOnly設定に依存します:

bearerOnlyの値動作
no(1)および(2)の両方の方法が許可されます。
yes方法(2)のみが許可されます。システムはログインページにリダイレクトしません。

トークンの検証とヘッダー形式

  • 方法(2)を使用してIDトークンを検証するには、トークンの有効性をチェックするエンドポイントであるイントロスペクションエンドポイントを構成する必要があります。
  • IDトークンを使用してAPIを呼び出す際は、次の形式でリクエストヘッダーにトークンを含めてください:
Authorization: bearer your_ID_token