OAuth 外部 URL および認証 URL
認証 URL または外部 URL のパラメーターを使用して、リモート・サーバーからユーザー定義コンテンツを要求し、これをアクセス・トークンまたは応答ペイロード (これにはアクセス・トークンが含まれる) に組み込むことができます。
カスタム・メタデータのトークンへの組み込み
多くのシナリオで、アクセス・トークンの生成プロセス中にカスタム・メタデータを組み込むことが必要になります。 このメタデータはアクセス・トークン内に格納されるか、アクセス・トークンとともにクライアント・アプリケーションに送信されます。 その後、クライアント・アプリケーションは、そのアクセス・トークン、またはペイロード内のメタデータを後続の要求で IBM® API Connect に送信することができます。ここで、メタデータは必要に応じて取得、検証、またはダウンストリーム・システムに送信されます。
- リソース所有者の認証時に、認証済みのリソース所有者についてのメタデータをアクセス・トークンに格納する必要があります。
- トークンを取得するために使用された権限付与タイプも、アクセス・トークンに格納されるメタデータの一例です。
- アクセス・トークンとともにクライアント・アプリケーションに送信する必要がある確認コードは、アクセス・トークン内にメタデータとして保管されます。
API Connect の外部 URL または認証 URL を設定してメタデータを取得する
- 外部 URL - 外部 URL を呼び出すと、 HTTP GETリクエストが送信され、 API Connect は、指定された応答ヘッダーのオプション・セットとともに、 HTTP 200 OKを期待する。
- Authentication URL -Authentication URL を呼び出すと、 API Connect ゲートウェイは HTTP ヘッダー付きの GET リクエストを送信し、 URL からの HTTP レスポンスを処理する。 認証のために、認証 URL で REST 認証サービスが予期されます。
参照: 認証 URL。
外部 URL エンドポイントは、Cloud Manager または API Manager UI で OAuth プロバイダーを構成するときに、「メタデータ」セクションに入力されます。
- DataPower® API Gateway:
X-API-OAUTH-METADATA-FOR-PAYLOADX-API-OAUTH-METADATA-FOR-ACCESSTOKEN - DataPower Gateway (v5 compatible):
API-OAUTH-METADATA-FOR-PAYLOADAPI-OAUTH-METADATA-FOR-ACCESSTOKEN
X-API-OAUTH-METADATA-FOR-PAYLOAD または API-OAUTH-METADATA-FOR-PAYLOAD からの応答ヘッダー値は、応答ペイロードに配置され、 metadataとして示されます。
X-API-OAUTH-METADATA-FOR-ACCESSTOKEN または API-OAUTH-METADATA-FOR-ACCESSTOKEN からの応答ヘッダー値は、アクセス・トークン内に配置され、 miscinfoとして示されます。
2つのメタデータ・レスポンス・ヘッダは大文字と小文字を区別せず、文字列値の内容に特殊文字があればエスケープしなければならない。
{
"token_type": "bearer",
"access_token": "AAEkNzhjDHYyyYy...cL0Mv6ctl37w7ZU",
"metadata": "m:metadata-for-payload_content"
"expires_in": 3600,
"scope": "read",
"refresh_token": "AAEnj5SynCMybF...oEZ6JjxYax_HdNg",
}"miscinfo" を持つアクセス・トークンの内容を示しています。
{
"active": true,
"token_type": "bearer",
"client_id": "78c2f10f-799a-4e1f-8e0a-098634997a35",
"username": "Fred Smith",
"sub": "fred",
"exp": 1479850049,
"expstr": "2016-11-22T21:27:29Z",
"iat": 1479846449,
"nbf": 1479846449,
"nbfstr": 2016-11-22T20:27:29Z",
"scope": "read",
"miscinfo": "m:metadata-for-accesstoken_content",
"client_name": "MobileApp"
}外部 URL の入力
x-existing-metadata-for-payload および x-existing-metadata-for-access-token )にも送信されます。 メタデータ URL、この情報を使って新しいメタデータ値のセットを作成することができる。X-existing-metadata-for-payload payload-from-auth-url
X-existing-metadata-for-access-token token-from-auth-url
X-URI-in /org/env/miscinfo/oauth2/token (the URL that was sent to APIConnect for this particular token request)
X-METHOD-in POST
X-POST-Body-in client_id=client_id&grant_type=password&scope=read&username=name&password=password
X-X-Client-IP IP_address
X-X-Global-Transaction-ID ID_number
...
API Connect でのメタデータの取得
前のシナリオ例で説明したように、アプリケーション API でアクセス・トークンからメタデータを取得し、下流のシステムに送信できます。 取得は、セキュリティー定義におけるトークンの安全な受け入れが確保されている API アセンブリーで行うことができます。
oauth.miscinfo コンテキスト変数を使用してアセンブリー内で miscinfo フィールドにアクセスできます。apim.setvariable('message.body',apim.getvariable('oauth.miscinfo'));トークン・イントロスペクションを使用して、アクセス・トークンの内容を参照することもできます。
リフレッシュ・トークンおよびメタデータ
認証 URL (認証用に設定されている場合)は、リソース所有者の認証中に最初に開始される。 外部 URL、アクセストークン生成の直前、最後のステップとして開始される。 ただし、アクセス・トークンがリフレッシュ・トークンから生成される場合だけは例外です。 新しいアクセストークンを生成するためにリフレッシュトークンが使用される場合、外部 URL。 リフレッシュ・トークンからのメタデータが保持され、新しく生成されるアクセス・トークンにコピーされます。
メタデータのソースの特定
メタデータには、外部 URL と認証 URL のどちらから取得されたのかを示すキーワードが接頭部として付けられます。
- 外部 URL からのメタデータには、
m:という接頭部が付けられます。 - 認証 URL からのメタデータには、
a:という接頭部が付けられます。
miscinfo フィールドに保管されます。"miscinfo": "[tlsprofile@https://api-revoke-url:443/server/revocation-url]m:metadata-for-accesstoken_content"メタデータの最大サイズ
アクセス・トークンのメタデータは 512 バイトを超えることができません。
ペイロードのメタデータには、具体的なサイズ制限がありません。ただし、「許可コード」権限付与タイプを使用する場合は例外です。 これらの制限については、以下のセクションで説明する。
メタデータに使用できない文字があります
認証コード(Authorization code)または暗黙的付与(Implicit grant with consent)を使用する場合、認証のメタデータ( URL )は一時的に保存される。
API Connect 内部的に、 と という2つの接頭辞を使用して、Authentication から受信したペイロードとトークンのメタデータを区別し、一時的な状態/コードに内部的に格納する。!ma !mp URL したがって、これらの特殊文字シーケンス !ma および !mp は、メタデータ自体として使用しないでください。権限付与タイプとメタデータ
以下のセクションで説明する OAuth 付与タイプには、 authorization code
(access code)、 implicit、および client credentials
(application)が含まれます。
- 「許可コード」権限付与タイプ
3本足の認可コードフローでは、認証 URL からのメタデータが
dp-stateに格納され、認可コードとアクセストークンに引き継がれる。dp-stateに格納される際、ペイロードのメタデータとアクセストークンのメタデータを区別するため、内部的に10文字前後が使用される。 さらに、失効が有効になっている場合は、トークンのメタデータの一部にもなります。 トークン・メタデータ、ペイロード・メタデータ(内部データを含む)、および内部失効詳細の合計サイズは、512 バイトを超えることはできません。メタデータの全体サイズが 512 バイトを超える場合、アクセス・トークンの生成は成功しますが、メタデータ・フィールドには「metadata too large「 例に示されているとおりです。"metadata":"m:error: metadata too large for AZ code grant type[Authorization Code-metadata-url-payload]" "miscinfo":"[r:gateway]m:error: metadata too large for AZ code grant type[Authorization Code-metadata-url-token]"メタデータが認証 URL からではなく、メタデータ URL から送信される場合、メタデータは
dp-stateや認証コードに保存されないため、サイズ制限は適用されない。authorization code (access code)付与タイプの例:$ curl -k -d "grant_type=authorization_code&code=$mycode&client_id=$myid&scope=scope_introspect&redirect_uri=" https://9.70.153.90/fei/sb/introspectp1/oauth2/token { "token_type":"bearer", "access_token":"AAEkOThlZDhhNjYtYTQ1ZS00YTMzLWE0N2QtZmE2OGZkMzQ0NzQ20ZN5Tl_TqYFeIfB7BFf6HFgibEoOjWXXEA84oFsWuE4NY-RRZVdnGSaXAIYJz7s5vczfk5EV-BIb_6P_1YKm3ahrfhR5kI3sPO0uADEoseIP5-O9anUpEM5yhsayXvZbJ_6VDYz-hyXSJHTNqVj-PHBialoRkBD5qca6kO0fV2M", "metadata":"a:[Authorization Code-Test-auth-url-payload]", "expires_in":3600, "scope":"scope_introspect", "refresh_token":"AAFAg1EVMbwicr_L0fTZ4q6HZ-RcQygniXFC9zbSKO4wd3hcniC4KQX21X0fL2c8cnmzCZgws8xxLzNyfjQhUJNGl5C1GbIe3dwhXJdiWA0Go-dduhVtCbG26sJRRXyYrMeRxWnJsylBETPI8HQEN4a_D7fmxKcTVRZBvq86byg95qe1ZKyERi0Lhxdd_O4Nvss" } $ curl -k -H "X-IBM-Client-Id: $myid" -H "X-IBM-Client-Secret: $mysecret" -d "token_type_hint=access_token&token=$mytoken" https://9.70.153.90/fei/sb/introspectp1/oauth2/introspect { "active":true, "token_type":"bearer", "client_id":"98ed8a66-a45e-4a33-a47d-fa68fd344746", "username":"anyuser", "sub":"anyuser", "exp":1484766368, "expstr":"2017-01-18T19:06:08Z", "iat":1484762768, "nbf":1484762768, "nbfstr":"2017-01-18T18:06:08Z", "scope":"scope_introspect", "miscinfo":"[r:gateway]a:[Authorization Code-Test-auth-url-token]", "client_name":"oauth_app" }
- 「暗黙」権限付与タイプ
- 「暗黙」権限付与タイプを使用する場合、例に示すように、アクセス・トークンおよびメタデータはフラグメントとして
locationヘッダーで返されます。< Location: https://localhost#access_token=AAEkOThlZDhhNjYtYTQ1ZS00YTMzLWE0N2QtZmE2OGZkMzQ0NzQ2buS2KfWdq-nYBJSi4nmPxQBtLae17tKBPRMzwP5BC386nlxpoOTE1G748ZVH6Mq_TJL3GeV3PtXTVIkWOLBJi_7tljiQfpnVfrNkovvZkhUexYmFkcDsmLSdaWxZ6PcIMPAC4ojT8qV1sYV-ChTk36yqOx_NiKimZaDikDk7WTg&expires_in=3600&scope=scope_introspect&token_type=bearer&metadata=a%3A[Implicit-Test-auth-url-payload] $ curl -k -H "X-IBM-Client-Id: $myid" -H "X-IBM-Client-Secret: $mysecret" -d "token_type_hint=access_token&token=$mytoken" https://9.70.153.90/fei/sb/introspectp1/oauth2/introspect { "active":true, "token_type":"bearer", "client_id":"98ed8a66-a45e-4a33-a47d-fa68fd344746", "username":"anyuser", "sub":"anyuser", "exp":1484768365, "expstr":"2017-01-18T19:39:25Z", "iat":1484764765, "nbf":1484764765, "nbfstr":"2017-01-18T18:39:25Z", "scope":"scope_introspect", "miscinfo":"[r:gateway]a:[Implicit-Test-auth-url-token]", "client_name":"oauth_app" }
- 「クライアント資格情報」権限付与タイプ
リソース所有者が存在しないため、クライアント認証情報のグラント・タイプを使用している場合は、認証 URL を開始できません。 認証 URL からのメタデータは、この権限付与タイプには使用できません。 ただし、メタデータ URL から返されるコンテンツはメタデータとして含まれる。
外部 URL と認証 URL の両方でメタデータを取得する場合の動作
外部 URL が構成されていて、外部サーバーへの接続が成功した場合、認証 URL から取得した既存のメタデータが応答ヘッダーによって上書きされ、その値が最終値となります。 したがって、着信要求ヘッダーを注意深く調べて、外部 URL から適切な応答ヘッダーを作成する必要があります。
外部 URL が設定されているにもかかわらず、外部 URL への接続に失敗した場合は、「」というエラーメッセージが表示されますerror on metadata url「 ペイロードとアクセス・トークンの両方のメタデータに対して書き込まれます。
外部 URL が構成されていない場合、許可 URL から取得したメタデータが最終値として保持されます。