Zasada VerificationAPIKey

Przeglądasz dokumentację Apigee Edge.
Przejdź do Dokumentacja Apigee X.
informacje.

Co

Zasada weryfikacji klucza interfejsu API umożliwia wymuszanie weryfikacji kluczy interfejsu API w czasie działania, dopuszczając jedynie aplikacje z zatwierdzonymi kluczami interfejsu API uzyskują dostęp do tych interfejsów API. Ta zasada zapewnia, że klucze interfejsu API są prawidłowe, nie zostały unieważnione i mogą korzystać z konkretnych zasobów powiązanych z interfejsem API; usług.

Przykłady

Klucz w parametrze zapytania

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

W tym przykładzie zasada oczekuje, że klucz interfejsu API zostanie znaleziony w zmiennej przepływu o nazwie request.queryparam.apikey Zmienna request.queryparam.{name} to standardowa zmienna przepływu brzegowego, która jest uzupełniana wartością przekazanego parametru zapytania w żądaniu klienta.

To polecenie curl przekazuje klucz interfejsu API w parametrze zapytania:

curl http://myorg-test.apigee.net/mocktarget?apikey=IEYRtW2cb7A5Gs54A1wKElECBL65GVls

Klucz w nagłówku

<VerifyAPIKey name="APIKeyVerifier">
    <APIKey ref="request.header.x-apikey" />
</VerifyAPIKey>

W tym przykładzie zasada oczekuje, że klucz interfejsu API zostanie znaleziony w zmiennej przepływu o nazwie request.header.x-apikey Zmienna request.header.{name} to standardowa zmienna przepływu brzegowego, która jest wypełniana wartością przekazywanego nagłówka w żądaniu klienta.

Poniższy URL cURL pokazuje, jak przekazać klucz interfejsu API w nagłówku:

curl "http://myorg-test.apigee.net/mocktarget" -H "x-apikey:IEYRtW2cb7A5Gs54A1wKElECBL65GVls"

Klucz w zmiennej

<VerifyAPIKey name="APIKeyVerifier">
    <APIKey ref="requestAPIKey.key"/>
</VerifyAPIKey>

Zasada może odwoływać się do dowolnej zmiennej, która zawiera klucz. Zasada w tym przykładzie wyodrębnia klucz interfejsu API ze zmiennej o nazwie requestAPIKey.key.

Sposób wypełniania tej zmiennej zależy od Ciebie. Możesz na przykład użyć części Wyodrębnij, Zasady dotyczące zmiennych służące do wypełniania parametru requestAPIKey.key parametrem zapytania o nazwie myKey, jak pokazano na ilustracji. poniżej:

<ExtractVariables async="false" continueOnError="false" enabled="true" name="SetAPIKeyVar">
    <Source>request</Source>
    <QueryParam name="myKey">
        <Pattern ignoreCase="true">{key}</Pattern>
    </QueryParam>
    <VariablePrefix>requestAPIKey</VariablePrefix>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

Zmienne przepływu zasad dostępu

<AssignMessage async="false" continueOnError="false" enabled="true" name="accessverifyvars">
    <AssignVariable>
        <Name>devFirstName</Name>
        <Ref>verifyapikey.verify-api-key.developer.firstName</Ref>
        <Value>ErrorOnCopy</Value>
    </AssignVariable>
    <AssignVariable>
        <Name>devLastName</Name>
        <Ref>verifyapikey.verify-api-key.developer.lastName</Ref>
        <Value>ErrorOnCopy</Value>
    </AssignVariable>
    <AssignVariable>
        <Name>devEmail</Name>
        <Ref>verifyapikey.verify-api-key.developer.email</Ref>
        <Value>ErrorOnCopy</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Edge automatycznie wypełnia zestaw zmiennych przepływu podczas wykonywania klucza interfejsu Verify API dla prawidłowego klucza interfejsu API. Za pomocą tych zmiennych można uzyskiwać dostęp do informacji, takich jak nazwa aplikacji, identyfikator aplikacji oraz informacje o deweloperze lub firmie, która ją zarejestrowała. W powyższego przykładu: korzystasz z zasady Przypisz wiadomości, aby uzyskać dostęp do imienia dewelopera, nazwiska imię i nazwisko oraz adres e-mail po wykonaniu klucza interfejsu Verify API.

Wszystkie te zmienne mają prefiks:

verifyapikey.{policy_name}

W tym przykładzie nazwa zasady weryfikacji klucza interfejsu API to „verify-api-key”. Dlatego odsyłamy imię i nazwisko programisty przesyłającego prośbę, otwierając zmienna verifyapikey.verify-api-key.developer.firstName.

Poznaj Edge


Informacje o zasadach weryfikacji klucza interfejsu API

Gdy deweloper rejestruje aplikację na Edge, automatycznie generuje klucz klienta, . Parę klucza klienta i hasła aplikacji możesz wyświetlić w interfejsie Edge lub uzyskać do nich dostęp. z interfejsu Edge API.

W momencie rejestracji aplikacji deweloper wybiera co najmniej jedną usługę interfejsu API, być powiązany z aplikacją, gdzie usługa interfejsu API jest zbiorem zasobów; dostępne przez serwery proxy interfejsów API. Następnie deweloper przekazuje klucz interfejsu API (klucz klienta) w ramach każde żądanie do interfejsu API w usłudze API powiązanej z aplikacją. Więcej informacji znajdziesz w artykule Przegląd publikowanych zmian.

Kluczy interfejsu API mogą być używane jako tokeny uwierzytelniania lub uzyskiwanie dostępu OAuth tokeny. W OAuth klucze interfejsu API są nazywane „identyfikatorem klienta”. Nazwy mogą być używane wymiennie. Więcej informacji znajdziesz w artykule Strona główna OAuth.

Edge automatycznie wypełnia zestaw zmiennych przepływu podczas wykonywania zasady Verify API Key. Zobacz przepływ poniżej.

Odniesienie do elementu

Oto elementy i atrybuty, które możesz skonfigurować w tej zasadzie:

<VerifyAPIKey async="false" continueOnError="false" enabled="true" name="Verify-API-Key-1">
    <DisplayName>Custom label used in UI</DisplayName>
    <APIKey ref="variable_containing_api_key"/>
</VerifyAPIKey>

&lt;VerifyAPIKey&gt; atrybuty

Ten przykład pokazuje atrybuty tagu <VerifyAPIKey>:

<VerifyAPIKey async="false" continueOnError="false" enabled="true" name="Verify-API-Key-1">

W tej tabeli opisano atrybuty wspólne dla wszystkich elementów nadrzędnych zasad:

Atrybut Opis Domyślny Obecność
name

Wewnętrzna nazwa zasady. Wartość atrybutu name może zawierać litery, cyfry, spacje, łączniki, podkreślenia i kropki. Ta wartość nie może przekracza 255 znaków.

Opcjonalnie możesz użyć elementu <DisplayName> do oznaczenia zasady jako edytor proxy interfejsu zarządzania z inną nazwą w języku naturalnym.

Nie dotyczy Wymagane
continueOnError

Ustaw jako false, aby w przypadku niepowodzenia zasady zwracany był błąd. To normalne w przypadku większości zasad.

Ustaw jako true, aby wykonywanie przepływu było kontynuowane nawet po zastosowaniu zasady niepowodzenie.

fałsz Opcjonalnie
enabled

Aby egzekwować zasadę, ustaw wartość true.

Aby wyłączyć zasadę, ustaw wartość false. Te zasady nie będą jest wymuszane nawet wtedy, gdy jest ono połączone z przepływem.

prawda Opcjonalnie
async

Ten atrybut został wycofany.

fałsz Wycofano

&lt;DisplayName&gt; element

Używaj oprócz atrybutu name do oznaczania zasady w edytor proxy interfejsu zarządzania z inną nazwą w języku naturalnym.

<DisplayName>Policy Display Name</DisplayName>
Domyślny

Nie dotyczy

Jeśli pominiesz ten element, atrybut name zasady otrzyma wartość .

Obecność Opcjonalnie
Typ Ciąg znaków

&lt;APIKey&gt; element

Ten element określa zmienną przepływu, która zawiera klucz interfejsu API. Zwykle klient wysyła klucz interfejsu API w parametrze zapytania, nagłówku HTTP lub parametrze formularza. Jeśli na przykład klucz jest wysyłany w nagłówku o nazwie x-apikey, klucz zostanie znaleziony w zmiennej: request.header.x-apikey

Domyślny Nie dotyczy
Obecność Wymagane
Typ Ciąg znaków

Atrybuty

W tej tabeli opisano atrybuty elementu <APIKey>

Atrybut Opis Domyślny Obecność
odsyłacz

Odwołanie do zmiennej zawierającej klucz interfejsu API. Dozwolona jest tylko jedna lokalizacja zgodnie z zasadami.

Nie dotyczy Wymagane

Przykłady

W tych przykładach klucz jest przekazywany w parametrach i nagłówku o nazwie x-apikey.

Jako parametr zapytania:

<VerifyAPIKey name="APIKeyVerifier">
    <APIKey ref="request.queryparam.x-apikey"/>
</VerifyAPIKey>

Jako nagłówek HTTP:

<VerifyAPIKey name="APIKeyVerifier">
    <APIKey ref="request.header.x-apikey"/>
</VerifyAPIKey>

Jako parametr formularza HTTP:

<VerifyAPIKey name="APIKeyVerifier">
    <APIKey ref="request.formparam.x-apikey"/>
</VerifyAPIKey>

Schematy

Zmienne przepływu

Gdy zasada Verify API Key jest egzekwowana na prawidłowym kluczu API, Edge wypełnia zestaw przepływu zmiennych. Zmienne te są dostępne w przypadku zasad lub kodu wykonywanego później w procesie i są dostępne często są wykorzystywane do przetwarzania niestandardowego na podstawie atrybutów klucza interfejsu API, takich jak nazwa aplikacji, usługa API używana do autoryzacji klucza lub niestandardowe atrybuty klucza interfejsu API.

Zasada uwzględnia kilka różnych typów zmiennych przepływu, w tym:

  • Ogólne
  • Promująca aplikację
  • Deweloper
  • Firma
  • Analytics

Każdy typ zmiennej przepływu ma inny prefiks. Wszystkie zmienne są skalarami oprócz tych oznaczonych jako tablice.

Ogólne zmienne przepływu

W tabeli poniżej znajdziesz ogólne zmienne przepływu wypełniane przez zasady weryfikacji klucza interfejsu API. Wszystkie te zmienne mają prefiks:

verifyapikey.{policy_name}

Na przykład: verifyapikey.{policy_name}.client_id

Dostępne zmienne:

Zmienna Opis
client_id Klucz klienta (inaczej klucz interfejsu API lub klucz aplikacji) dostarczony przez aplikację wysyłającą żądanie.
client_secret Tajny klucz klienta powiązany z kluczem klienta.
redirection_uris Wszelkie identyfikatory URI przekierowania w żądaniu.
developer.app.id

Identyfikator aplikacji dewelopera wysyłającej żądanie.

developer.app.name Nazwa aplikacji dewelopera wysyłającej żądanie.
developer.id

Identyfikator dewelopera zarejestrowanego jako właściciel aplikacji, która wysłała prośbę.

developer.{custom_attrib_name} Wszystkie atrybuty niestandardowe uzyskane z profilu aplikacji.
DisplayName Wartość parametru <DisplayName> zasady .
failed Ustaw jako „true” (prawda) gdy weryfikacja klucza interfejsu API się nie powiedzie.
{custom_app_attrib} Każdy atrybut niestandardowy pobrany z profilu aplikacji. Podaj nazwę segmentu niestandardowego .
apiproduct.name* Nazwa usługi API używanej do weryfikacji żądania.
apiproduct.{custom_attrib_name}* Każdy atrybut niestandardowy pobrany z profilu usługi interfejsu API.
apiproduct.developer.quota.limit* Limit ustawiony dla usługi API (jeśli istnieje).
apiproduct.developer.quota.interval* Interwał limitu ustawiony dla usługi API (jeśli istnieje).
apiproduct.developer.quota.timeunit* Jednostka czasu limitu ustawiona dla usługi API (jeśli istnieje).
* Jeśli produkty w interfejsie API są wypełniane automatycznie, zmienne produktów w interfejsie API są wypełniane automatycznie. skonfigurowana z prawidłowym środowiskiem, serwerami proxy i zasobami (pochodzącymi z proxy.pathsuffix). Aby dowiedzieć się, jak skonfigurować usługi API, zobacz Korzystanie z krawędzi do zarządzania interfejsami API i publikacji danych.

Zmienne przepływu aplikacji

Te zmienne procesu zawierające informacje o aplikacji są wypełniane przez zasady. Wszystkie te zmienne mają prefiks:

verifyapikey.{policy_name}.app.

Na przykład:

verifyapikey.{policy_name}.app.name

Dostępne zmienne:

Zmienna Opis
name Nazwa aplikacji.
id Identyfikator aplikacji.
accessType Nieużywany przez Apigee.
callbackUrl URL wywołania zwrotnego aplikacji. Zwykle używane tylko w przypadku OAuth.
DisplayName Wyświetlana nazwa aplikacji.
status Stan aplikacji, na przykład „Zatwierdzona” czy „odrażający”.
apiproducts Tablica zawierająca listę produktów interfejsu API powiązanych z aplikacją.
appFamily Dowolna rodzina aplikacji zawierająca aplikację lub „domyślna”.
appParentStatus Stan elementu nadrzędnego aplikacji, np. „Aktywna” lub „nieaktywny”
appType typ aplikacji „Firma”; lub „Programista”.
appParentId Identyfikator aplikacji nadrzędnej.
created_at Znacznik daty i godziny utworzenia aplikacji.
created_by Adres e-mail dewelopera, który utworzył aplikację.
last_modified_at Znacznik daty i godziny ostatniej aktualizacji aplikacji.
last_modified_by Adres e-mail dewelopera, który ostatnio zaktualizował aplikację.
{app_custom_attributes} Dowolny niestandardowy atrybut aplikacji. Podaj nazwę atrybutu niestandardowego.

Zmienne procesu dla programistów

Te zmienne procesu zawierające informacje o deweloperze są wypełniane przez funkcję . Wszystkie te zmienne mają prefiks:

verifyapikey.{policy_name}.developer

Na przykład:

verifyapikey.{policy_name}.developer.id

Dostępne zmienne:

Zmienna Opis
id Zwraca organizację {org_name}@@{developer_id}
userName Nazwa użytkownika dewelopera.
firstName Imię dewelopera.
lastName Nazwisko dewelopera.
email Adres e-mail dewelopera.
status Stan dewelopera: aktywny, nieaktywny lub login_lock.
apps Tablica aplikacji powiązanych z deweloperem.
created_at Data i godzina utworzenia dewelopera.
created_by Adres e-mail użytkownika, który utworzył dewelopera.
last_modified_at Data i godzina ostatniej modyfikacji dewelopera.
last_modified_by Adres e-mail użytkownika, który zmodyfikował dewelopera.
{developer_custom_attributes} Dowolny niestandardowy atrybut dewelopera. Podaj nazwę atrybutu niestandardowego.
Company Nazwa firmy (jeśli istnieje) powiązana z deweloperem.

Zmienne przepływu firmy

Poniższe zmienne przepływu zawierające informacje o firmie są wypełniane przez funkcję . Wszystkie te zmienne mają prefiks:

verifyapikey.{policy_name}.company

Na przykład:

verifyapikey.{policy_name}.company.name

Dostępne zmienne:

Zmienna Opis
name Nazwa firmy.
displayName Wyświetlana nazwa firmy.
id

Identyfikator firmy.

apps Tablica z listą aplikacji firmy.
appOwnerStatus
Stan właściciela aplikacji: aktywny, nieaktywny lub login_lock.
created_at Data i godzina utworzenia firmy.
created_by Adres e-mail użytkownika, który utworzył firmę.
last_modified_at Data i godzina ostatniej modyfikacji firmy.
last_modified_by Adres e-mail użytkownika, który ostatnio modyfikował firmę.
{company_custom_attributes} Dowolny niestandardowy atrybut firmy. Podaj nazwę atrybutu niestandardowego.

Zmienne Analytics

Gdy zasada Weryfikacja klucza interfejsu API jest stosowana w Analytics, te zmienne są automatycznie wypełniane: jest egzekwowane dla prawidłowego klucza interfejsu API. Te zmienne są wypełniane tylko przez klucz interfejsu Verify API i zasadami protokołu OAuth.

Zmienne i wartości mogą służyć jako wymiary do tworzenia raportów Analytics, które zapewniają wgląd w wzorce konsumpcji przez deweloperów i aplikacje.

  • apiproduct.name
  • developer.app.name
  • client_id
  • developer.id

Informacje o błędzie

This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Cause
keymanagement.service.CompanyStatusNotActive 401 The Company associated with the Developer App that has the API key you are using has an inactive status. When a Company's status is set to inactive, you cannot access the developers or apps associated with that Company. An org admin can change a Company's status using the management API. See Set the Status of a Company.
keymanagement.service.DeveloperStatusNotActive 401

The developer who created the Developer App that has the API key you are using has an inactive status. When an App Developer's status is set to inactive, any Developer Apps created by that developer are deactivated. An admin user with appropriate permissions (such as Organization Administrator) can change a developer's status in the following ways:

keymanagement.service.invalid_client-app_not_approved 401 The Developer App associated with the API key is revoked. A revoked app cannot access any API products and cannot invoke any API managed by Apigee Edge. An org admin can change the status of a Developer App using the management API. See Approve or Revoke Developer App.
oauth.v2.FailedToResolveAPIKey 401 The policy expects to find the API key in a variable that is specified in the policy's <APIKey> element. This error arises when the expected variable does not exist (it cannot be resolved).
oauth.v2.InvalidApiKey 401 An API key was received by Edge, but it is invalid. When Edge looks up the key in its database, it must exactly match the on that was sent in the request. If the API worked previously, make sure the key was not regenerated. If the key was regenerated, you will see this error if you try to use the old key. For details, see Register apps and manage API keys.
oauth.v2.InvalidApiKeyForGivenResource 401 An API key was received by Edge, and it is valid; however, it does not match an approved key in the Developer App associated with your API proxy through a Product.

Deployment errors

These errors can occur when you deploy a proxy containing this policy.

Error name Cause
SpecifyValueOrRefApiKey The <APIKey> element does not have a value or key specified.

Fault variables

These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.

Variables Where Example
fault.name="fault_name" fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. fault.name Matches "FailedToResolveAPIKey"
oauthV2.policy_name.failed policy_name is the user-specified name of the policy that threw the fault. oauthV2.VK-VerifyAPIKey.failed = true

Example error responses

{  
   "fault":{  
      "faultstring":"Invalid ApiKey",
      "detail":{  
         "errorcode":"oauth.v2.InvalidApiKey"
      }
   }
}
{  
   "fault":{  
      "detail":{  
         "errorcode":"keymanagement.service.DeveloperStatusNotActive"
      },
      "faultstring":"Developer Status is not Active"
   }
}

Example fault rule

<FaultRule name="FailedToResolveAPIKey">
    <Step>
        <Name>AM-FailedToResolveAPIKey</Name>
    </Step>
    <Condition>(fault.name Matches "FailedToResolveAPIKey") </Condition>
</FaultRule>

Powiązane artykuły