Anforderungsvalidierung zu API-Deployments hinzufügen

Erfahren Sie, wie Sie verhindern können, dass ungültige Anforderungen an Backend-Services gesendet werden, indem Sie eingehende Anforderungen anhand einer Validierungsanforderungs-Policy mit API Gateway validieren.

In der Regel möchten Sie vermeiden, dass Backend-Services unnötig belastet werden, indem Sie nur gültige Anforderungen an diese Services senden. Um zu verhindern, dass ungültige Anforderungen an Backend-Services gesendet werden, können Sie ein API-Gateway verwenden, um eingehende Anforderungen anhand einer Validierungsanforderungs-Policy zu validieren. Wenn eine Anforderung die Anforderungen der Validierungs-Policy nicht erfüllt, können Sie das API-Gateway so konfigurieren, dass die Anforderung abgelehnt wird, anstatt sie an den Ziel-Backend-Service weiterzuleiten. Stattdessen sendet das API-Gateway eine 4xx-Fehlercodeantwort an den API-Client, der die Anforderung gesendet hat.

Mit einem API-Gateway können Sie Validierungsanforderungs-Policys einrichten, um Folgendes zu prüfen:

  • Die Anforderung enthält bestimmte Header
  • Die Anforderung enthält bestimmte Abfrageparameter
  • Der Anforderungsbody hat einen bestimmten Inhaltstyp

Sie können steuern, wie ein API-Gateway eine Validierungsanforderungs-Policy anwendet, indem Sie einen Validierungsmodus für die Policy angeben:

  • Im Modus "Durchsetzen" validiert das API-Gateway alle Anforderungen anhand der Validierungsanforderungs-Policy. Das API-Gateway sendet nur Anforderungen, die eine Validierung bestehen, an den Backend-Service. Das API-Gateway sendet keine Anforderungen, die nicht validiert werden können, an den Backend-Service. Das API-Gateway sendet eine 4xx-Fehlercodeantwort an einen API-Client, der eine Anforderung sendet, die nicht validiert werden kann. Das API-Gateway enthält Einträge in Ausführungslogs für Validierungsfehler.
  • Im Permissive-Modus validiert das API-Gateway alle Anforderungen anhand der Validierungsanforderungs-Policy. Das API-Gateway sendet alle Anforderungen an den Backend-Service, unabhängig davon, ob die Validierung erfolgreich oder nicht erfolgreich war. Beachten Sie, dass Anforderungen, die nicht erfolgreich validiert werden können, weiterhin an den Backend-Service gesendet werden. Das API-Gateway enthält Einträge in Ausführungslogs für Validierungsfehler. Mit dem Permissive-Modus können Sie die wahrscheinlichen Auswirkungen der Anwendung einer Validierungsanforderungs-Policy auf ein System beurteilen, das sich bereits im Produktionssystem befindet, ohne dass sich dies auf API-Clients auswirkt, die derzeit Anforderungen senden.
  • Im deaktivierten Modus validiert das API-Gateway keine Anforderungen anhand der Validierungsanforderungs-Policy. Das API-Gateway sendet alle Anforderungen an den Backend-Service.

Das API-Gateway wendet Validierungsanforderungs-Policys nach CORS-Anforderungs-Policys sowie nach Authentifizierungs- und Autorisierungsanforderungs-Policys an, jedoch vor Transformationsanforderungs-Policys.

Sie können Validierungsanforderungs-Policys zu einer API-Deployment-Spezifikation hinzufügen, indem Sie:

  • die Konsole verwenden
  • eine JSON-Datei bearbeiten

Validierungsanforderungs-Policys mit der Konsole hinzufügen

So fügen Sie mit der Konsole Validierungsanforderungs-Policys zu einer API-Deployment-Spezifikation hinzu:

  1. Erstellen oder aktualisieren Sie ein API-Deployment mit der Konsole, wählen Sie die Option Völlig neu aus, und geben Sie auf der Seite Basisinformationen Details ein.

    Weitere Informationen finden Sie unter API durch das Erstellen eines API-Deployment in einem API-Gateway bereitstellen und API-Gateway aktualisieren.

  2. Wählen Sie Weiter aus, und geben Sie Authentifizierungsoptionen auf der Seite Authentifizierung an.

    Weitere Informationen zu Authentifizierungsoptionen finden Sie unter Hinzufügen von Authentifizierung und Autorisierung zu API-Deployments.

  3. Wählen Sie Weiter aus, und geben Sie Details zu einzelnen Routen im API-Deployment auf der Seite Routen ein.

  4. Wählen Sie auf der Seite Routen die Route aus, für die Sie Validierungsanforderungs-Policys angeben möchten.
  5. Wählen Sie Routenanforderungs-Policys einblenden aus.
  6. So validieren Sie die Header, die in einer Anforderung an das API-Gateway für die aktuelle Route enthalten sind, indem Sie eine Headervalidierungsanforderungs-Policy erstellen:
    1. Wählen Sie die Schaltfläche Hinzufügen neben Headervalidierungen, und geben Sie Details zum ersten Header in der zu validierenden Anforderung an:
      • Headername: Der Name eines Headers in der zu validierenden Anforderung. Beispiel: X-Username .
      • Erforderlich: Gibt an, ob der angegebene Header in der Anforderung vorhanden sein muss, damit die Anforderung als gültig betrachtet wird.
    2. (Optional) Wählen Sie Weiterer Header aus, und geben Sie zusätzliche Header in der zu validierenden Anforderung an.
    3. Wählen Sie Erweiterte Optionen anzeigen aus, und wählen Sie einen Modus aus, um anzugeben, wie die Headervalidierungsanforderungs-Policy angewendet wird:
      • Durchsetzen: Das API-Gateway validiert alle Anforderungen anhand der Validierungsanforderungs-Policy. Das API-Gateway sendet nur Anforderungen, die eine Validierung an den Backend-Service übergeben.
      • Permissiv: Das API-Gateway validiert alle Anforderungen anhand der Validierungsanforderungs-Policy. Das API-Gateway sendet alle Anforderungen an den Backend-Service, unabhängig davon, ob die Validierung erfolgreich oder nicht erfolgreich war.
      • Deaktiviert: Das API-Gateway validiert keine Anforderungen anhand der Validierungsanforderungs-Policy. Das API-Gateway sendet alle Anforderungen an den Backend-Service.

      Beachten Sie, dass Durchsetzen der Standardvalidierungsmodus ist.

    4. Wählen Sie Validierungen hinzufügen aus.
  7. So validieren Sie die Abfrageparameter, die in einer Anforderung an das API-Gateway für die aktuelle Route enthalten sind, indem Sie eine Abfrageparametervalidierungsanforderungs-Policy erstellen:
    1. Wählen Sie die Schaltfläche Hinzufügen neben Abfrageparametervalidierungen, und geben Sie Details des ersten Abfrageparameters in der zu validierenden Anforderung an:
      • Parametername: Der Name eines Abfrageparameters in der zu validierenden Anforderung. Beispiel: state.
      • Erforderlich: Gibt an, ob der angegebene Abfrageparameter in der Anforderung vorhanden sein muss, damit die Anforderung als gültig betrachtet wird.
    2. (Optional) Wählen Sie Weiterer Parameter aus, und geben Sie zusätzliche Abfrageparameter in der zu validierenden Anforderung an.
    3. Wählen Sie Erweiterte Optionen anzeigen aus, und wählen Sie einen Modus aus, um anzugeben, wie die Abfrageparametervalidierungsanforderungs-Policy angewendet wird:
      • Durchsetzen: Das API-Gateway validiert alle Anforderungen anhand der Validierungsanforderungs-Policy. Das API-Gateway sendet nur Anforderungen, die eine Validierung an den Backend-Service übergeben.
      • Permissiv: Das API-Gateway validiert alle Anforderungen anhand der Validierungsanforderungs-Policy. Das API-Gateway sendet alle Anforderungen an den Backend-Service, unabhängig davon, ob die Validierung erfolgreich oder nicht erfolgreich war.
      • Deaktiviert: Das API-Gateway validiert keine Anforderungen anhand der Validierungsanforderungs-Policy. Das API-Gateway sendet alle Anforderungen an den Backend-Service.

      Beachten Sie, dass Durchsetzen der Standardvalidierungsmodus ist.

    4. Wählen Sie Validierungen hinzufügen aus.
  8. So validieren Sie den Inhalt im Body einer Anforderung an das API-Gateway für die aktuelle Route, indem Sie eine Bodyvalidierungsanforderungs-Policy erstellen:
    1. Wählen Sie die Schaltfläche Hinzufügen neben Textvalidierung, und geben Sie Folgendes an:
      • Erforderlich: Gibt an, ob der Text einer Anforderung einer der von Ihnen angegebenen Inhaltstypen sein muss, damit die Anforderung als gültig betrachtet wird.
      • Medientyp: Ein gültiger Inhaltstyp für den Text einer Anforderung. Beispiel: application/json, application/xml.
    2. (Optional) Wählen Sie Weiterer Medientyp aus, und geben Sie zusätzliche gültige Inhaltstypen für den Text der Anforderung an.

      Wenn Sie mehrere Inhaltstypen angeben, muss der Anforderungstext einer der zulässigen Inhaltstypen sein, die Sie angeben, damit die Anforderung als gültig betrachtet wird.

    3. Wählen Sie Erweiterte Optionen anzeigen aus, und wählen Sie einen Modus aus, um anzugeben, wie die Anforderungs-Policy für die Bodyvalidierungsanforderung angewendet wird:
      • Durchsetzen: Das API-Gateway validiert alle Anforderungen anhand der Validierungsanforderungs-Policy. Das API-Gateway sendet nur Anforderungen, die eine Validierung an den Backend-Service übergeben.
      • Permissiv: Das API-Gateway validiert alle Anforderungen anhand der Validierungsanforderungs-Policy. Das API-Gateway sendet alle Anforderungen an den Backend-Service, unabhängig davon, ob die Validierung erfolgreich oder nicht erfolgreich war.
      • Deaktiviert: Das API-Gateway validiert keine Anforderungen anhand der Validierungsanforderungs-Policy. Das API-Gateway sendet alle Anforderungen an den Backend-Service.

      Beachten Sie, dass Durchsetzen der Standardvalidierungsmodus ist.

    4. Wählen Sie Validierungen hinzufügen aus.
  9. Wählen Sie Weiter aus, um die Details zu prüfen, die Sie für einzelne Routen eingegeben haben.
  10. Wählen Sie Erstellen oder Änderungen speichern aus, um das API-Deployment zu erstellen oder zu aktualisieren.
  11. (Optional) Bestätigen Sie, dass die API erfolgreich bereitgestellt wurde, indem Sie sie aufrufen (siehe In einem API-Gateway bereitgestellte API aufrufen).

JSON-Datei zum Hinzufügen von Validierungsanforderungs-Policys bearbeiten

So hinzufügen Sie Validierungsanforderungs-Policys zu einer API-Deployment-Spezifikation in einer JSON-Datei:

  1. Bearbeiten Sie mit Ihrem bevorzugten JSON-Editor die vorhandene API-Deploymentspezifikation, der Sie Validierungsanforderungs-Policys hinzufügen möchten, oder erstellen Sie eine neue API-Deploymentspezifikation (siehe API-Deploymentspezifikation erstellen).

    Beispiel: Die folgende Basisspezifikation für das API-Deployment definiert eine einfache serverlose Hello World-Funktion in OCI Functions als einzelnes Backend:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["POST"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          }
        }
      ]
    }
  2. Fügen Sie nach dem Abschnitt backend einen requestPolicies-Abschnitt für die Route ein, auf die Sie die Validierungsanforderungs-Policy anwenden möchten. Beispiel:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["POST"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {}
        }
      ]
    }
  3. Um die Header zu validieren, die in einer Anforderung an das API-Gateway für die aktuelle Route enthalten sind, geben Sie eine headerValidations-Validierungsanforderungs-Policy an:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["POST"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {
            "headerValidations": {
              "headers": {
                "name": "<header-name>",
                "required": <true|false>
              },
              "validationMode": "<ENFORCING|PERMISSIVE|DISABLED>"
            }
          }
        }
      ]
    }

    Dabei gilt:

    • "name":"<header-name>" ist ein Header in der zu validierenden Anforderung. Bei dem von Ihnen angegebenen Namen muss nicht zwischen Groß- und Kleinschreibung unterschieden werden. Beispiel: X-Username.
    • "required": <true|false> gibt an, ob der von "name":"<header-name>" angegebene Header in der Anforderung vorhanden sein muss, damit die Anforderung als gültig betrachtet wird.
    • "validationMode": "<ENFORCING|PERMISSIVE|DISABLED>" gibt wie folgt an, wie das API-Gateway Anforderungen anhand der Headervalidierungsanforderungs-Policy validiert:

      • ENFORCING: Das API-Gateway validiert alle Anforderungen anhand der Validierungsanforderungs-Policy. Das API-Gateway sendet nur Anforderungen, die eine Validierung bestehen, an den Backend-Service.
      • PERMISSIVE: Das API-Gateway validiert alle Anforderungen anhand der Validierungsanforderungs-Policy. Das API-Gateway sendet alle Anforderungen an den Backend-Service, unabhängig davon, ob die Validierung erfolgreich oder nicht erfolgreich war.
      • DISABLED: Das API-Gateway validiert keine Anforderungen anhand der Validierungsanforderungs-Policy. Das API-Gateway sendet alle Anforderungen an den Backend-Service.

      Beispiel: "validationMode": "PERMISSIVE". Beachten Sie, dass ENFORCING als Standardvalidierungsmodus verwendet wird, wenn Sie "validationMode" nicht einschließen.

    Beispiel:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["POST"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {
            "headerValidations": {
              "headers": {
                "name": "X-Username",
                "required": true
              },
              "validationMode": "ENFORCING"
            }
          }
        }
      ]
    }

    In diesem Beispiel muss die Anforderung den Header X-Username enthalten, damit die Anforderung als gültig betrachtet wird. Das API-Gateway sendet nur Anforderungen, die eine Validierung bestehen, an den Backend-Service.

  4. Um die Abfrageparameter zu validieren, die in einer Anforderung an das API-Gateway für die aktuelle Route enthalten sind, geben Sie eine queryParameterValidations-Validierungsanforderungs-Policy an:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["POST"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {
            "queryParameterValidations": {
              "parameters": {
                "name": "<query-parameter-name>",
                "required": <true|false>
              },
              "validationMode": "<ENFORCING|PERMISSIVE|DISABLED>"
            }
          }
        }
      ]
    }

    Dabei gilt:

    • "name":"<query-parameter-name>" ist ein Abfrageparameter in der zu validierenden Anforderung. Bei dem von Ihnen angegebenen Namen muss nicht zwischen Groß- und Kleinschreibung unterschieden werden. Beispiel: state.
    • "required": <true|false> gibt an, ob der mit "name":"<query-parameter-name>" angegebene Abfrageparameter in der Anforderung vorhanden sein muss, damit die Anforderung als gültig betrachtet wird.
    • "validationMode": "<ENFORCING|PERMISSIVE|DISABLED>" gibt wie folgt an, wie das API-Gateway Anforderungen anhand der Validierungsanforderungs-Policy für Abfrageparameter validiert:

      • ENFORCING: Das API-Gateway validiert alle Anforderungen anhand der Validierungsanforderungs-Policy. Das API-Gateway sendet nur Anforderungen, die eine Validierung bestehen, an den Backend-Service.
      • PERMISSIVE: Das API-Gateway validiert alle Anforderungen anhand der Validierungsanforderungs-Policy. Das API-Gateway sendet alle Anforderungen an den Backend-Service, unabhängig davon, ob die Validierung erfolgreich oder nicht erfolgreich war.
      • DISABLED: Das API-Gateway validiert keine Anforderungen anhand der Validierungsanforderungs-Policy. Das API-Gateway sendet alle Anforderungen an den Backend-Service.

      Beispiel: "validationMode": "PERMISSIVE". Beachten Sie, dass ENFORCING als Standardvalidierungsmodus verwendet wird, wenn Sie "validationMode" nicht einschließen.

    Beispiel:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["POST"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {
            "queryParameterValidations": {
              "parameters": {
                "name": "state",
                "required": false
              },
              "validationMode": "ENFORCING"
            }
          }
        }
      ]
    }

    In diesem Beispiel kann die Anforderung optional den Abfrageparameter state enthalten, damit die Anforderung als gültig betrachtet wird. Das API-Gateway sendet nur Anforderungen, die eine Validierung bestehen, an den Backend-Service.

  5. Um den Inhalt im Body einer Anforderung an das API-Gateway für die aktuelle Route zu validieren, geben Sie eine bodyValidation-Validierungsanforderungs-Policy an:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["POST"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {
            "bodyValidation": {
              "required": true,
              "content": {
                "<media-type-1>": {
                  "validationType": "NONE"
                },
                "<media-type-2>": {
                  "validationType": "NONE"
                }            
              },
              "validationMode": "<ENFORCING|PERMISSIVE|DISABLED>"
            }
          }
        }
      ]
    }

    Dabei gilt:

    • "required": true gibt an, dass der Inhaltstyp des Anforderungstextes einer der von Ihnen angegebenen Inhaltstypen sein muss.
    • "content": {"<media-type-1>": {"validationType": "NONE"}, "<media-type-2>": {"validationType": "NONE"}} gibt mindestens einen zulässigen Inhaltstyp für den Anforderungstext an. Der Anforderungstext muss einer der angegebenen Inhaltstypen sein. Beispiel: application/json, application/xml. Für "validationType" wird derzeit nur NONE unterstützt.
    • "validationMode": "<ENFORCING|PERMISSIVE|DISABLED>" gibt wie folgt an, wie das API-Gateway Anforderungen anhand der Bodyvalidierungsanforderungs-Policy validiert:

      • ENFORCING: Das API-Gateway validiert alle Anforderungen anhand der Validierungsanforderungs-Policy. Das API-Gateway sendet nur Anforderungen, die eine Validierung bestehen, an den Backend-Service.
      • PERMISSIVE: Das API-Gateway validiert alle Anforderungen anhand der Validierungsanforderungs-Policy. Das API-Gateway sendet alle Anforderungen an den Backend-Service, unabhängig davon, ob die Validierung erfolgreich oder nicht erfolgreich war.
      • DISABLED: Das API-Gateway validiert keine Anforderungen anhand der Validierungsanforderungs-Policy. Das API-Gateway sendet alle Anforderungen an den Backend-Service.

      Beispiel: "validationMode": "PERMISSIVE". Beachten Sie, dass ENFORCING als Standardvalidierungsmodus verwendet wird, wenn Sie "validationMode" nicht einschließen.

    Beispiel:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["POST"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          },
          "requestPolicies": {
            "bodyValidation": {
              "required": true,
              "content": {
                "application/json": {
                  "validationType": "NONE"
                },
                "application/xml": {
                  "validationType": "NONE"
                }
              },
              "validationMode": "ENFORCING"
            }
          }
        }
      ]
    }

    In diesem Beispiel muss der Inhaltstyp des Anforderungstextes "application/json" oder "application/xml" lauten, damit die Anforderung als gültig betrachtet wird. Das API-Gateway sendet nur Anforderungen, die eine Validierung bestehen, an den Backend-Service.

  6. Speichern Sie die JSON-Datei, die die API-Deployment-Spezifikation enthält.
  7. Verwenden Sie die API-Deployment-Spezifikation, wenn Sie ein API-Deployment wie folgt erstellen oder aktualisieren:

    • Durch Angabe der JSON-Datei in der Konsole bei Auswahl der Option Vorhandene API hochladen
    • Durch Angabe der JSON-Datei in einer Anforderung an die REST-API von API-Gateway

    Weitere Informationen finden Sie unter API durch das Erstellen eines API-Deployment in einem API-Gateway bereitstellen und API-Gateway aktualisieren.

  8. (Optional) Bestätigen Sie, dass die API erfolgreich bereitgestellt wurde, indem Sie sie aufrufen (siehe In einem API-Gateway bereitgestellte API aufrufen).