Validierung von API-Schlüsseln einrichten

Diese Seite gilt für Apigee und Apigee Hybrid.

Apigee Edge-Dokumentation aufrufen

Um eine API-Schlüsselvalidierung für eine API einzurichten, hängen Sie eine Richtlinie des Typs "VerifyAPIKey" (API-Schlüssel prüfen) an. Die einzige Einstellung, die dabei für eine VerifyAPIKey-Richtlinie festgelegt werden muss, ist der erwartete Speicherort des API-Schlüssels in der Clientanfrage. Der API-Proxy prüft den von Ihnen angegebenen Speicherort und extrahiert den API-Schlüssel. Wenn der API-Schlüssel am erwarteten Speicherort nicht vorhanden ist, wird ein Fehler ausgegeben und die Anfrage abgelehnt. API-Schlüssel können in einem Abfrageparameter, in einem Formularparameter oder in einem HTTP-Header enthalten sein.

Beispiel: Die Richtlinienkonfiguration unten definiert den erwarteten Schlüsselstandort als Abfrageparameter mit dem Namen apikey. Einer erfolgreichen Anfrage muss der API-Schlüssel als Abfrageparameter angehängt sein, z. B. ?apikey=Y7yeiuhcbKJHD790.

Erstellen Sie folgende Richtlinie, um API-Schlüssel zu prüfen:

<VerifyAPIKey name="APIKeyValidation">
  <APIKey ref="request.queryparam.apikey"/>
</VerifyAPIKey>

Diese Richtlinie kann an beliebige APIs angehängt werden, die Sie schützen möchten.

Eine umfassende Dokumentation dieses Richtlinientyps finden Sie in der Richtlinienreferenz unter VerifyAPIKey-Richtlinie.

API-Proxys verarbeiten automatisch alle HTTP-Header und Abfrageparameter, die in der Anfrage angegeben sind. Daher wird empfohlen, den API-Schlüssel nach der Prüfung aus der Nachricht zu entfernen, damit er nicht an den Back-End-Dienst übertragen wird. Dazu können Sie eine Richtlinie des Typs AssignMessage in folgender Weise verwenden:

<AssignMessage name="StripApiKey">
    <DisplayName>Remove Query Param</DisplayName>
    <Remove>
        <QueryParams>
            <QueryParam name="apikey"/>
        </QueryParams>
    </Remove>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"></AssignTo>
</AssignMessage>

Richtlinienbindung

Die Richtlinien müssen als Verarbeitungsschritte an einen API-Proxy-Ablauf angehängt werden. Durch Anwenden der Richtlinie auf Anfrage-PreFlow werden API-Schlüssel für jede Anfrage überprüft, die der API-Proxy von einer Clientanwendung empfängt. Nach der Bestätigung wird der API-Schlüssel aus der ausgehenden Anfrage entfernt.

Hängen Sie die Richtlinien an den ProxyEndpoint des zu schützenden API-Proxys an:

<ProxyEndpoint name="default">
  <PreFlow>
    <Request>
      <Step><Name>APIKeyValidation</Name></Step>
      <Step><Name>StripApiKey</Name></Step>
    </Request>
  </PreFlow>

Nachdem Sie die Richtlinie angehängt haben, stellen Sie den API-Proxy bereit.

Anfrage mit einem gültigen API-Schlüssel senden

Als Administrator in Ihrer Organisation können Sie den API-Schlüssel einer beliebigen App so abrufen:

curl "https://apigee.googleapis.com/v1/organizations/$ORG/developers/$DEVELOPER_EMAIL/apps/$APP \
  -H "Authorization: Bearer $TOKEN"

Dabei ist $TOKEN auf Ihr OAuth 2.0-Zugriffstoken festgelegt. Weitere Informationen hierzu finden Sie unter OAuth 2.0-Zugriffstoken abrufen. Informationen zu den in diesem Beispiel verwendeten curl-Optionen finden Sie unter curl verwenden. Eine Beschreibung der verwendeten Umgebungsvariablen finden Sie unter Umgebungsvariablen für Apigee API-Anfragen festlegen.

Das für diesen Aufruf zurückgegebene App-Profil enthält den Consumer-Key (API-Schlüssel) und das Secret. Der Consumer-Key-Wert ist der Wert, den Sie in Ihrer Anfrage an die geschützte API für den API-Schlüssel nutzen.

Beispiel: Eine Anfrage, die keinen API-Schlüssel enthält, führt zu einem Autorisierungsfehler.

curl http://apitest.examplepetstore.com/weather/forecastrss?w=12797282

Die Fehlermeldung weist darauf hin, dass die Richtlinie nach einem API-Schlüssel gesucht, aber keinen gültigen Schlüssel gefunden hat:

OAuth Failure : Could not resolve the app key with variable request.queryparam.apikey

Wenn der Consumer-Key für die Anwendung als Abfrageparameter enthalten ist, ist das erwartete Ergebnis die erfolgreiche Autorisierung:

curl http://apitest.examplepetstore.com/weather/forecastrss?w=12797282&"apikey=PulSCqMnXGchW0pC0s5o9ngHVTWMeLqk"

Als Ergebnis wird eine Antwort des Wetterdienstes erwartet.

Das Ändern des Werts des API-Schlüssels in der Anfrage führt zu einem Autorisierungsfehler:

curl http://apitest.examplepetstore.com/weather?forecastrss?w=12797282&"apikey=PulSCqMnXGchW0"

Ergebnisse in:

OAuth Failure : Consumer Key is Invalid