ヘッダー変換が期待どおりに機能しない
APIゲートウェイ・サービスを使用してAPIデプロイメントを作成するときに、ヘッダーを追加、置換または名前変更しないヘッダー変換をトラブルシューティングする方法を確認してください。
APIゲートウェイがヘッダーを予期したとおりに追加、置換または名前変更しない場合は、まず、ルートおよびポリシー構成によって必要なコンテキスト値が変換で使用可能になるかどうかを確認します。変換では、保護されたヘッダーをターゲットにしたり、無効なヘッダー値を生成したり、既存のヘッダー値を保持するifExists設定を使用することもできます。
問題の症状
次の症状が1つ以上表示される場合があります。
- バックエンド・サービスは、APIゲートウェイが追加するヘッダーを受信しません。
- ヘッダーは存在しますが、値は空であるか、変更されていません。
- ヘッダー変換が正しく構成されているように見えますが、バックエンド・サービスに送信されるリクエストに、予想されるヘッダー変更が含まれていません。
考えられる理由
この問題には、次の1つ以上の原因が考えられます。
- ルートでは
ANONYMOUS認可ポリシーが使用されるため、APIゲートウェイはルートのrequest.auth[...]値を移入しません。 - ヘッダー変換では、APIゲートウェイが変換しない保護されたリクエスト・ヘッダーまたは保護されたレスポンス・ヘッダーの変更が試行されます。
- 変換式は、無効な値をレンダリングするか、使用可能な値を生成しません。
ifExists設定では、元のヘッダーは変更されません。
ルート構成の確認
リクエストを処理したルートを確認し、次の詳細を確認します。
- リクエストが予期したルートと一致しました。
- ルートは、予想される
requestPolicies.authentication設定を使用します。 - ルートには、
requestPolicies.headerTransformationsセクションまたはresponsePolicies.headerTransformationsセクションに予期される変換が含まれます。 - 変換は、ルートが認証を実行する場合にのみ
request.auth[...]に依存します。 - ターゲット・ヘッダーは、APIゲートウェイが変換を拒否する保護されたリクエスト・ヘッダーまたは保護されたレスポンス・ヘッダーではありません。
変換で${request.auth[access_token_claims][claim1]}などの式が使用される場合、ルートは認証を実行する認可ポリシーを使用する必要があります。ルートがANONYMOUS認可ポリシーを使用する場合、APIゲートウェイはリクエストを認証せず、request.auth[...]値を移入しません。
ルートおよびログの確認
- コンソールで、リクエストを処理したAPIデプロイメントを開きます。
- 一致するルート、認証ポリシーおよびヘッダー変換ポリシーを確認します。
- 同じリクエストを再度送信して、失敗した新しい例を作成します。
- OCIロギングで、デプロイメントのAPIゲートウェイ・アクセス・ログおよび実行ログを開きます。
- レスポンスからのリクエストIDを使用して、両方のログで同じリクエストを検索します。
- 実行ログで、ヘッダー変換エラーのリクエストを確認します。
ログ・メッセージのレビュー
失敗したリクエストの実行ログを確認します。次のログ・エントリは、APIゲートウェイが変換をスキップまたは拒否した理由を識別できます:
headerTransformation.protectedHeaderTransformed: ポリシーは保護されたヘッダーを変換しようとしました。headerTransformation.badHeaderValue: レンダリングされたヘッダー値にサポートされていない文字が含まれているか、そうでない場合は無効です。headerTransformation.missingSetValues: 変換式で有効な値が生成されなかったため、APIゲートウェイはヘッダーの更新をスキップしました。
ヘッダー変換の修正
検出された原因と一致する修正を使用してください。
- 変換がトークン・クレームに依存する場合は、
ANONYMOUSのかわりにAUTHENTICATION_ONLYなどの認証済認可ポリシーを使用するようにルートを変更します。 - リクエストがトークン・クレームに依存する場合は、有効なトークンを使用してリクエストを再度送信し、トークン検証が成功することを確認します。
- 変換が保護されたヘッダーをターゲットとする場合は、別のヘッダーを使用するようにポリシーを更新します。
- 式によって無効または空の結果がレンダリングされる場合は、式で有効なヘッダー値が生成されるように式を更新します。
- 結果が変わらない場合は、
ifExists設定を確認します。SKIPは既存のヘッダーを変更せず、APPENDは元のヘッダーを置換せずに値を追加します。
ヘッダー変換の検証
ルートまたはポリシーを更新した後、ヘッダー変換が期待どおりに機能することを確認します。
- 同じ要求を再度送信します。
- バックエンド・サービスが予期されるヘッダーおよび値を受信することを確認します。
- 実行ログに、このトピックで説明するヘッダー変換エラーが表示されないことを確認します。