Zasada VerificationAPIKey

Wyświetlasz dokumentację Apigee Edge.
Zapoznaj się z dokumentacją Apigee X. info

Co

Zasada Weryfikacja klucza interfejsu API umożliwia wymuszanie weryfikacji kluczy interfejsu API w czasie działania, dzięki czemu tylko aplikacje z zatwierdzonymi kluczami interfejsu API mogą uzyskiwać dostęp do Twoich interfejsów API. Zasady te zapewniają, że klucze interfejsu API są prawidłowe, nie zostały cofnięte i mają uprawnienia do korzystania z określonych zasobów powiązanych z usługami API.

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 będzie znajdować się w zmiennej przepływu o nazwie request.queryparam.apikey. Zmienna request.queryparam.{name} to standardowa zmienna przepływu Edge, która jest wypełniana wartością parametru zapytania przekazanego 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 będzie znajdować się w zmiennej przepływu o nazwie request.header.x-apikey. Zmienna request.header.{name} jest standardową zmienną przepływu Edge, która jest wypełniana wartością nagłówka przekazanego w żądaniu klienta.

Poniższy kod 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 zawierającej klucz. Zasady w tym przykładzie wyodrębniają klucz interfejsu API ze zmiennej o nazwie requestAPIKey.key.

To, jak ta zmienna jest wypełniana, zależy od Ciebie. Możesz na przykład użyć zasady Extract Variables (Wyodrębnij zmienne), aby wypełnić zmienną requestAPIKey.key na podstawie parametru zapytania o nazwie myKey, jak pokazano 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 zasady Weryfikacja klucza interfejsu API w przypadku prawidłowego klucza interfejsu API. Za pomocą tych zmiennych możesz uzyskać dostęp do informacji takich jak nazwa aplikacji, jej identyfikator oraz informacje o deweloperze lub firmie, która zarejestrowała aplikację. W przykładzie powyżej po wykonaniu zasady Verify API Key używasz zasady Assign Message, aby uzyskać dostęp do imienia, nazwiska i adresu e-mail dewelopera.

Wszystkie te zmienne mają prefiks:

verifyapikey.{policy_name}

W tym przykładzie nazwa zasady weryfikacji klucza interfejsu API to „verify-api-key”. Dlatego odwołujesz się do imienia dewelopera, który wysyła prośbę, uzyskując dostęp do zmiennej verifyapikey.verify-api-key.developer.firstName.

Dowiedz się więcej o Edge


Informacje o zasadach weryfikacji klucza interfejsu API

Gdy deweloper zarejestruje aplikację w Edge, Edge automatycznie wygeneruje parę klucza i klucza tajnego klienta. Parę klucza i klucza tajnego klienta aplikacji możesz wyświetlić w interfejsie Edge lub uzyskać do niej dostęp za pomocą interfejsu Edge API.

Podczas rejestracji aplikacji deweloper wybiera co najmniej 1 produkt interfejsu API, który ma być powiązany z aplikacją. Produkt interfejsu API to zbiór zasobów dostępnych za pomocą serwerów proxy interfejsu API. Następnie programista przekazuje klucz interfejsu API (klucz klienta) w ramach każdego żądania do interfejsu API w produkcie API powiązanym z aplikacją. Więcej informacji znajdziesz w artykule Omówienie publikowania.

Klucze API mogą być używane jako tokeny uwierzytelniające lub do uzyskiwania tokenów dostępu OAuth. W OAuth klucze interfejsu API są nazywane „identyfikatorami klienta”. Nazwy te można stosować zamiennie. Więcej informacji znajdziesz na stronie głównej OAuth.

Podczas wykonywania zasady Verify API Key Edge automatycznie wypełnia zestaw zmiennych przepływu. Więcej informacji znajdziesz w sekcji Zmienne przepływu poniżej.

Odniesienie do elementu

W tych zasadach możesz skonfigurować te elementy i atrybuty:

<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>

Atrybuty elementu <VerifyAPIKey>

W tym przykładzie pokazujemy 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

Element <APIKey>

Ten element określa zmienną przepływu, która zawiera klucz interfejsu API. Zazwyczaj 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, będzie można go znaleźć w zmiennej: request.header.x-apikey

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

Atrybuty

W tabeli poniżej opisano atrybuty elementu <APIKey>.

Atrybut Opis Domyślny Obecność
ref

Odwołanie do zmiennej zawierającej klucz interfejsu API. Każda zasada może obejmować tylko 1 lokalizację.

Nie dotyczy Wymagany

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>

W nagłówku 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 weryfikacji klucza interfejsu API jest egzekwowana w przypadku prawidłowego klucza interfejsu API, Edge wypełnia zestaw zmiennych przepływu. Te zmienne są dostępne dla zasad lub kodu wykonywanego później w procesie i są często używane do przeprowadzania niestandardowego przetwarzania na podstawie atrybutów klucza API, takich jak nazwa aplikacji, usługa API używana do autoryzacji klucza lub niestandardowe atrybuty klucza API.

Zasady wypełniają 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, z wyjątkiem tych, które są wyraźnie oznaczone jako tablice.

Ogólne zmienne przepływu

W tabeli poniżej znajdziesz ogólne zmienne przepływu wypełniane przez zasadę 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 (nazywany też kluczem interfejsu API lub kluczem aplikacji) dostarczony przez aplikację wysyłającą żądanie.
client_secret Klucz tajny klienta powiązany z kluczem klienta.
redirection_uris wszystkie identyfikatory URI przekierowania w żądaniu;
developer.app.id

Identyfikator aplikacji dewelopera, która wysyła żądanie.

developer.app.name Nazwa aplikacji dewelopera, która wysyła żądanie.
developer.id

Identyfikator dewelopera zarejestrowanego jako właściciel aplikacji, która wysłała żądanie.

developer.{custom_attrib_name} wszelkie atrybuty niestandardowe pochodzące z profilu klucza aplikacji.
DisplayName Wartość atrybutu <DisplayName> zasady.
failed Ustaw wartość „true”, gdy weryfikacja klucza interfejsu API się nie powiedzie.
{custom_app_attrib}

dowolny atrybut niestandardowy pochodzący z profilu aplikacji; Podaj nazwę atrybutu niestandardowego.

apiproduct.name* Nazwa produktu interfejsu API użytego do zweryfikowania żądania.
apiproduct.{custom_attrib_name}* Dowolny atrybut niestandardowy pochodzący z profilu usługi API.
apiproduct.developer.quota.limit* Limit przydziału ustawiony w przypadku produktu interfejsu API (jeśli taki istnieje).
apiproduct.developer.quota.interval* Interwał limitu ustawiony w przypadku produktu interfejsu API (jeśli występuje).
apiproduct.developer.quota.timeunit* Jednostka czasu limitu ustawiona w produkcie interfejsu API (jeśli jest).
* Zmienne produktu API są wypełniane automatycznie, jeśli produkty API są skonfigurowane z prawidłowym środowiskiem, serwerami proxy i zasobami (pochodzącymi z proxy.pathsuffix). Instrukcje konfigurowania produktów API znajdziesz w artykule Publikowanie interfejsów API za pomocą interfejsu Edge Management API.

Zmienne przepływu aplikacji

Zasady wypełniają te zmienne przepływu zawierające informacje o aplikacji: 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 Nie jest używany przez Apigee.
callbackUrl Adres URL wywołania zwrotnego aplikacji. Zwykle używany tylko w przypadku OAuth.
DisplayName Wyświetlana nazwa aplikacji.
status Stan aplikacji, np. „zatwierdzona” lub „cofnięta”.
apiproducts Tablica zawierająca listę produktów API powiązanych z aplikacją.
appFamily Dowolna grupa aplikacji zawierająca aplikację lub „domyślna”.
appParentStatus Stan aplikacji nadrzędnej, np. „aktywna” lub „nieaktywna”.
appType Typ aplikacji: „Firma” lub „Deweloper”.
appParentId Identyfikator aplikacji nadrzędnej.
created_at Sygnatura czasowa utworzenia aplikacji.
created_by Adres e-mail dewelopera, który utworzył aplikację.
last_modified_at Sygnatura czasowa ostatniej aktualizacji aplikacji.
last_modified_by Adres e-mail dewelopera, który ostatnio zaktualizował aplikację.
{app_custom_attributes} dowolny atrybut aplikacji niestandardowej. Podaj nazwę atrybutu niestandardowego.

Zmienne przepływu dewelopera

Zasady wypełniają te zmienne przepływu zawierające informacje o deweloperze: Wszystkie te zmienne mają prefiks:

verifyapikey.{policy_name}.developer

Na przykład:

verifyapikey.{policy_name}.developer.id

Dostępne zmienne:

Zmienna Opis
id Zwraca {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 Sygnatura czasowa utworzenia dewelopera.
created_by Adres e-mail użytkownika, który utworzył dewelopera.
last_modified_at Sygnatura czasowa ostatniej modyfikacji dewelopera.
last_modified_by Adres e-mail użytkownika, który zmodyfikował konto dewelopera.
{developer_custom_attributes} dowolny atrybut dewelopera niestandardowego. Podaj nazwę atrybutu niestandardowego.
Company Nazwa firmy powiązanej z deweloperem (jeśli taka istnieje).

Zmienne przepływu firmy

Poniższe zmienne przepływu zawierające informacje o firmie są wypełniane przez zasady. 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 zawierająca listę aplikacji firmowych.
appOwnerStatus
Stan właściciela aplikacji: aktywny, nieaktywny lub login_lock.
created_at Sygnatura czasowa utworzenia firmy.
created_by Adres e-mail użytkownika, który utworzył firmę.
last_modified_at Sygnatura czasowa ostatniej modyfikacji firmy.
last_modified_by Adres e-mail użytkownika, który ostatnio modyfikował firmę.
{company_custom_attributes} dowolny atrybut niestandardowy firmy; Podaj nazwę atrybutu niestandardowego.

Zmienne Analytics

Gdy w przypadku prawidłowego klucza interfejsu API zostanie zastosowana zasada Weryfikuj klucz interfejsu API, w Analytics automatycznie wypełnią się pola tych zmiennych: Te zmienne są wypełniane tylko przez zasady Weryfikuj klucz interfejsu API i zasady OAuth.

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

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

Odniesienie do błędu

W tej sekcji opisano kody błędów i komunikaty o błędach, które są zwracane, oraz zmienne błędów ustawiane przez Edge, gdy ta zasada wyzwala błąd. Warto o tym wiedzieć, jeśli rozwijasz reguły błędów, aby obsługi błędów. Więcej informacji znajdziesz w artykule Co musisz wiedzieć o błędach związanych z zasadami i postępowaniu z błędami

Błędy w czasie wykonywania

Te błędy mogą wystąpić podczas wykonywania zasady.

Kod błędu Stan HTTP Przyczyna
keymanagement.service.CompanyStatusNotActive 401 Firma powiązana z aplikacją deweloperską z używanym przez Ciebie kluczem interfejsu API ma – stan nieaktywny. Gdy firma jest ustawiona na Nieaktywna, nie można uzyskać dostępu do deweloperów ani aplikacji powiązanych z daną Firmą. Administrator organizacji może zmienić stan firmy za pomocą interfejsu API do zarządzania. Patrz sekcja Ustawianie stanu danej Firmy.
keymanagement.service.DeveloperStatusNotActive 401

Deweloper, który utworzył aplikację deweloperską z używanym przez Ciebie kluczem interfejsu API, mieć status „Nieaktywny”. Gdy deweloper aplikacji jest ustawiony na Nieaktywny, wszystkie aplikacje dewelopera utworzone przez tego dewelopera są dezaktywowane. Administrator z odpowiednimi uprawnieniami (np. Administrator organizacji) może zmienić stan dewelopera w tych obszarach: sposoby:

keymanagement.service.invalid_client-app_not_approved 401 Aplikacja dewelopera powiązana z kluczem interfejsu API została unieważniona. Unieważniona aplikacja nie może nie uzyskuje dostępu do żadnych usług API i nie może wywołać żadnego interfejsu API zarządzanego przez Apigee Edge. Administrator organizacji może: zmienić stan aplikacji związanej z deweloperem za pomocą interfejsu API do zarządzania. Zobacz Zatwierdź lub unieważnij aplikację dewelopera.
oauth.v2.FailedToResolveAPIKey 401 Zasada oczekuje, że klucz interfejsu API znajdzie się w zmiennej określonej w parametrze &lt;APIKey&gt; . Ten błąd występuje, gdy oczekiwana zmienna nie istnieje (nie można jej rozwiązać).
oauth.v2.InvalidApiKey 401 Edge otrzymał klucz interfejsu API, ale jest on nieprawidłowy. Gdy Edge wyszukuje klucz musi być taki sam jak w dniu, który został wysłany w żądaniu. Jeśli interfejs API zadziałał upewnij się, że klucz nie został wygenerowany ponownie. Jeśli klucz został ponownie wygenerowany, zobaczysz ten błąd, jeśli spróbujesz użyć starego klucza. Szczegółowe informacje znajdziesz w artykule Rejestrowanie aplikacji i zarządzanie interfejsem API .
oauth.v2.InvalidApiKeyForGivenResource 401 Edge otrzymał klucz interfejsu API, który jest prawidłowy. nie pasuje jednak do zatwierdzony klucz w aplikacji dla deweloperów powiązanym z serwerem proxy interfejsu API w usłudze.

Błędy wdrażania

Te błędy mogą wystąpić podczas wdrażania serwera proxy zawierającego tę zasadę.

Nazwa błędu Przyczyna
SpecifyValueOrRefApiKey Element <APIKey> nie ma określonej wartości lub klucza.

Zmienne błędów

Te zmienne są ustawiane po wystąpieniu błędu działania. Więcej informacji znajdziesz w artykule Podstawowe informacje o błędach związanych z naruszeniem zasad.

Zmienne Gdzie Przykład
fault.name="fault_name" fault_name to nazwa błędu podana w tabeli Błędy czasu działania powyżej. Nazwa błędu to ostatnia część kodu błędu. fault.name Matches "FailedToResolveAPIKey"
oauthV2.policy_name.failed policy_name to określona przez użytkownika nazwa zasady, która spowodowała błąd. oauthV2.VK-VerifyAPIKey.failed = true

Przykładowe odpowiedzi na błędy

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

Przykładowa reguła błędu

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

Powiązane artykuły