サード・パーティー OAuth プロバイダーの OAuth イントロスペクション

OAuth トークンの検証は、イントロスペクション URL を使用することにより、サード・パーティーの Open Authorization (OAuth)/Open ID Connect (OIDC) プロバイダーにオフロードすることができます。 クライアントは、サードパーティのOAuthまたはOIDCプロバイダを使って、API Connectで保護されたトークンを取得することができます。 IBM® API Connectは、APIへのアクセスを保護するために、前述のプロバイダとともにこの機能を使うことができます。

API Connect を使用すると、 RFC 7662に定義されているイントロスペクション仕様に従って、サード・パーティー OAuth アクセス・トークンを使用して保護されている API を保護できます。 この仕様に加えて、必要に応じてその他のコンテンツをサード・パーティーに渡すための x-Introspect- ヘッダーも用意されています。

基本認証要求ヘッダーを構成することで、認証情報を要求に組み込むことができます。

以下のシーケンス図は、要求と応答のフロー全体を説明しています。 この図はフローの特性の概略を可視化することのみを目的としているため、正確な詳細については図の後の説明を参照してください。

OAuthとIntrospectのフロー図 URL

イントロスペクト URL は、サード・パーティー OAuth プロバイダー構成で設定されます。 サード・パーティー OAuth プロバイダーの構成を参照してください。

API がサードパーティの OAuth プロバイダによって保護されている場合、 API Connect はベアラートークンを抽出し、 Introspect URL フィールドで指定されたエンドポイントに HTTP POST リクエストを発行します。

GET 要求は、この機能を使用して API Connect によって保護されます。

ヘッダー接頭部を使用して、サード・パーティー・プロバイダーに情報を渡すことができます。 ヘッダー接頭部には正規表現を含めることができ、 x-introspect-*などの追加情報を送信するために使用するヘッダーの名前パターンを指定します。
     GET /petstore/pet/123 HTTP/1.1
     Host: apiconnect.com
     x-Introspect-type: dog
     x-Introspect-name: simon
     x-custom-apic: petstore123
     Authorization: Bearer tGzv3JOkF0XG5Qx2TlKWIA
     x-IBM-Client-Id: xxx-xxx

ただし、別のヘッダー接頭部を使用する場合は、サード・パーティー OAuth プロバイダー構成の「カスタム・ヘッダーのパターン」フィールドに、必要な値を指定します。 サード・パーティー OAuth プロバイダーの構成について詳しくは、 サード・パーティー OAuth プロバイダーの構成を参照してください。 「カスタム・ヘッダー・パターン」 機能は、 DataPower® API Gatewayでのみ使用可能です。 DataPower Gateway (v5 compatible) を使用している場合、ヘッダー接頭部は x-Introspect-でなければなりません。

API Connect コード・サンプルに示されているように、 で指定された introspection エンドポイントにこの POST リクエストを発行します: x-tokenIntrospect
     POST /oauth/introspectURL HTTP/1.1
     Host: apiconnect.ibm.com
     Content-Type: application/x-www-form-urlencoded
     x-Introspect-type: dog
     x-Introspect-name: simon
     x-custom-apic: petstore123
     token_type_hint=access_token&token=tGzv3JOkF0XG5Qx2TlKWIA

サードパーティのOAuth/OIDCプロバイダは、次のように応答しますHTTP 200要求が成功したこと、およびペイロードにトークン情報が含まれていることを示します。 API Connect は、RFC 仕様に定義されているアクティブ・クレームを受け入れます。

アクティブ・クレームの値が以下の場合trueトークンは有効として扱われます。
   HTTP/1.1 200 OK
    Content-Type: application/json;charset=UTF-8
    Cache-Control: no-store
    Pragma: no-cache

    { “active”:true,
       “token_type”:“bearer”,
       “client_id”:“xxx-xxx”,
       “username”:“John Smith”,
       ...
    }
アクティブ・クレームの値が以下の場合falseトークンは無効として扱われます。
     HTTP/1.1 200 OK
     Content-Type: application/json;charset=UTF-8
     Cache-Control: no-store
     Pragma: no-cache

     {
       "active":false
     }

HTTP 200 以外の応答コードは、要求の処理が失敗したことを示します。

OAuth トークンが有効かつアクティブである場合、コンテキスト変数がイントロスペクト JSON 応答からの情報を使用して設定されます。 詳しくは、 API Connect コンテキスト変数を参照してください。

イントロスペクションエンドポイントに接続する際、 API Connectclient_id/appId および client_secret/appSecret を使用して、 HTTP 基本認証ヘッダーを構築します。

デフォルトでは、要求内に x-introspect-basic-authorization-header が存在する場合、その値はイントロスペクション・エンドポイントとの通信が行われる際に HTTP 基本認証ヘッダーに対して使用されます。 API Connect HTTP 基本認証ヘッダー値が送信前に エンコードされていることを確認し、必要に応じて次の例のようにエンコードします。 Base64 ヘッダーが既にエンコードされている場合は、そのまま送信されます。
GET /petstore/pet/123 HTTP/1.1
Host: apiconnect.com
x-introspect-basic-authorization-header: user:password
API Connect は以下を発行します。
POST .. 
Authorization: Basic M3JkLXBhcnR5LWNsaWVudF9pZDozcmQtcGFydHlfY2xpZW50X3NlY3JldA==token_type_hint=access_token&token= ..
DataPower API Gateway を使用している場合は、サードパーティの OAuth プロバイダーの設定で、Basic 認証リクエストヘッダー名フィールドに必要な値を入力することで、 HTTP Basic 認証ヘッダーに独自の値を指定することができます。 イントロスペクション・エンドポイントに渡される認証データは、以下のルールによって決まります。
  • 要求内に基本認証ヘッダーがある場合は、指定された資格情報が使用されます。 値は、 user:passwordという形式のストリングか、 Base64 でエンコードされた同等の値でなければなりません。 API Connect は、要求をイントロスペクション・エンドポイントに送信する前に、必要に応じて値をエンコードします。 Base64
  • 要求内に基本認証ヘッダーがなくても、サード・パーティー OAuth プロバイダー構成の「基本認証ユーザー名」フィールドと「基本認証パスワード」」フィールドに値が指定されている場合は、それらの値が使用されます。
  • リクエストにBasic認証ヘッダーがなく、ユーザー名とパスワードの詳細がサードパーティのOAuthプロバイダ設定で提供されていないが、 client_idclient_secret の値がリクエスト本文で提供されている場合、これらが使用される。
  • それ以外の場合、エラーが戻されます。
サード・パーティー OAuth プロバイダーの構成について詳しくは、 サード・パーティー OAuth プロバイダーの構成を参照してください。
scopeと scope validate url のどちらか、あるいは両方が設定されていて、レスポンスがサードパーティのOAuth Provider introspectionエンドポイントからのscope claimを持つアクティブトークンである場合、 API Connect 、さらに以下の順序でscopeバリデーションが実施される:
  1. OAuth API 保護に対して scope が構成されている場合、サード・パーティーのスコープを、構成済みの当該のスコープに対して検証します。
  2. scope validation url が構成されている場合、サード・パーティーのスコープを、スコープ検証 URL に対して検証します。
  3. サードパーティー OAuth プロバイダーのイントロスペクション・エンドポイントがスコープを返さない場合、ゲートウェイは、サードパーティー OAuth プロバイダー・リソースが使用されている API のセキュリティー定義で定義されているスコープを検査しません。 API での OAuth セキュリティー定義の構成について詳しくは、 OAuth セキュリティー定義の作成を参照してください。
詳しくは、 スコープを参照してください。
DataPower Gateway (Classic) のみデフォルトでは、 API Connect クライアント ID およびスコープはサード・パーティー OAuth プロバイダーに送信されます。 この動作は、以下のいずれかの方法で抑止できます。
  • 以下のように suppress-parameters ヘッダーを指定します。
    suppress-parameters: client_id
    suppress-parameters: scope
    または
    suppress-parameters: client_id scope
    のいずれかの suppress-parameters ヘッダーを指定します。
  • API 定義自体に suppress-parameters という名前の API プロパティーを定義し、抑止したいパラメーターに応じて
    client_id
    scope
    または
    client_id scope
    のいずれかの suppress-parameters ヘッダーを指定します。 API プロパティーの定義方法については、 API プロパティーの設定を参照してください。