Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
Co
Pobiera atrybuty tokenów dostępu, tokenów odświeżania, kodów autoryzacji i atrybutów aplikacji klienckiej, a następnie wypełnia zmienne wartościami tych atrybutów.
Ta zasada jest przydatna, gdy musisz skonfigurować dynamiczne, warunkowe działanie oparte na wartości w tokenie lub kodzie autoryzacji. Przy każdej weryfikacji tokena zmienne są automatycznie wypełniane wartościami atrybutów tokena. Jeśli jednak token nie zostanie zweryfikowany, możesz użyć tej funkcji, aby bezpośrednio wypełniać zmienne wartościami atrybutów tokena. Zobacz też dostosowywanie tokenów i kodów autoryzacji.
Token dostępu przekazywany do tej zasady musi być prawidłowy. W przeciwnym razie zasada spowoduje wystąpienie błędu invalid_access_token
.
Przykłady
W podanych niżej przykładach użyto zasady Pobierz informacje o protokole OAuth V2, aby pobrać informacje o różnych komponentach przepływu pracy OAuth2, a następnie uzyskać dostęp do tych informacji w kodzie.
Token dostępu
Aby uzyskać odniesienie do tokena dostępu, użyj elementu <AccessToken>
w swojej zasadzie.
W tym przykładzie oczekujemy znalezienia tokena dostępu w parametrze zapytania o nazwie „access_token” (szczegóły implementacji zależy od Ciebie):
<GetOAuthV2Info name="MyTokenAttrsPolicy"> <AccessToken ref="request.queryparam.access_token"></AccessToken> </GetOAuthV2Info>
Biorąc pod uwagę token dostępu, zasada wyszukuje profil tokena i wypełnia zestaw zmiennych danymi profilu.
Dostęp do zmiennych możesz następnie uzyskać za pomocą JavaScriptu lub w inny sposób. Ten przykład umożliwia pobranie za pomocą JavaScriptu zakresów powiązanych z tokenem dostępu:
var scope = context.getVariable('oauthv2accesstoken.MyTokenAttrsPolicy.scope');
Aby uzyskać dostęp do tych zmiennych w kodzie, musisz poprzedzić je ciągiem „oauthv2accesstoken”. Pełną listę zmiennych dostępnych za pomocą tokena dostępu znajdziesz w artykule Zmienne tokena dostępu.
Kod autoryzacji
Aby uzyskać atrybuty kodu autoryzacji, użyj elementu <AuthorizationCode>
w swojej zasadzie.
W tym przykładzie token dostępu powinien znajdować się w parametrze formularza o nazwie „code” (szczegóły implementacji zależy tylko od Ciebie):
<GetOAuthV2Info name="MyAuthCodeAttrsPolicy"> <AuthorizationCode ref="request.formparam.code"></AuthorizationCode> </GetOAuthV2Info>
Mając kod autoryzacji, zasada wyszukuje informacje o kodzie i wypełnia zestaw zmiennych danymi kodu autoryzacji.
Dostęp do zmiennych możesz następnie uzyskać za pomocą JavaScriptu lub w inny sposób. Ten przykład umożliwia pobranie atrybutu niestandardowego powiązanego z kodem autoryzacji za pomocą JavaScriptu:
var attr = context.getVariable(‘oauthv2authcode.MyAuthCodeAttrsPolicy.custom_attribute_name’);
Aby uzyskać dostęp do tych zmiennych w kodzie, musisz dodać do nich prefiks „oauthv2authcode”. Pełną listę zmiennych dostępnych za pomocą kodu autoryzacji znajdziesz w artykule o zmiennych kodu autoryzacji.
Token odświeżania
Aby uzyskać atrybuty tokena odświeżania, użyj elementu <RefreshToken>
w swojej zasadzie.
W tym przykładzie token dostępu powinien znajdować się w parametrze zapytania o nazwie „refresh_token” (szczegóły implementacji zależą od Ciebie):
<GetOAuthV2Info name="MyRefreshTokenAttrsPolicy"> <RefreshToken ref="request.queryparam.refresh_token"/> </GetOAuthV2Info>
W przypadku tokena odświeżania zasada wyszukuje informacje o tokenie odświeżania i wypełnia zestaw zmiennych danymi tokena odświeżania.
Dostęp do tych zmiennych możesz uzyskać za pomocą JavaScriptu lub w inny sposób. Ten przykład pozwala pobrać atrybut niestandardowy powiązany z tokenem odświeżania za pomocą JavaScriptu:
var attr = context.getVariable(‘oauthv2refreshtoken.MyRefreshTokenAttrsPolicy.accesstoken.custom_attribute_name’);
Aby mieć dostęp do zmiennych w kodzie, musisz poprzedzić je ciągiem „oauthv2refreshtoken”. Pełną listę zmiennych dostępnych za pomocą tokena odświeżania znajdziesz w sekcji Zmienne tokena.
Statyczny
W niektórych rzadkich przypadkach może być konieczne pobranie profilu statycznie skonfigurowanego tokena (takiego, który nie jest dostępny za pomocą zmiennej). Aby to zrobić, podaj wartość tokena dostępu jako elementu.
<GetOAuthV2Info name="GetTokenAttributes"> <AccessToken>shTUmeI1geSKin0TODcGLXBNe9vp</AccessToken> </GetOAuthV2Info>
Możesz to zrobić także w przypadku wszystkich innych typów tokenów (identyfikatora klienta, kod autoryzacji i tokeny odświeżania).
Identyfikator klienta
Z tego przykładu dowiesz się, jak pobrać informacje o aplikacji klienckiej przy użyciu identyfikatora klienta.
Po uruchomieniu zasada wypełnia zestaw zmiennych informacjami o kliencie. W tym przypadku zasada oczekuje, że identyfikator klienta znajdzie się w parametrze zapytania o nazwie client_id
. Mając identyfikator klienta, zasada wyszukuje profil klienta i wypełnia zestaw zmiennych danymi profilu. Zmienne będą poprzedzone znakiem oauthv2client.
<GetOAuthV2Info name="GetClientAttributes"> <ClientId ref="request.queryparam.client_id"></ClientId> </GetOAuthV2Info>
Dostęp do zmiennych możesz następnie uzyskać za pomocą JavaScriptu lub w inny sposób. Aby na przykład uzyskać za pomocą JavaScriptu nazwę aplikacji i adres e-mail dewelopera powiązane z aplikacją kliencką:
context.getVariable("oauthv2client.GetClientAttributes.developer.email"); context.getVariable("oauthv2client.GetClientAttributes.developer.app.name");
Odniesienie do elementu
Dokumentacja elementów opisuje elementy i atrybuty zasady GetOAuthV2Info.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <GetOAuthV2Info async="false" continueOnError="false" enabled="true" name="GetOAuthV2Info-1" <DisplayName>Get OAuth v2.0 Info 1</DisplayName> <AccessToken ref="variable"></AccessToken> <AuthorizationCode ref="variable"></AuthorizationCode> <ClientId ref="variable"></ClientId> <RefreshToken ref="variable"></RefreshToken> </GetOAuthV2Info>
Atrybuty <GetOAuthV2Info>
<GetOAuthV2Info async="false" continueOnError="false" enabled="true" name="Get-OAuth-v20-Info-1">
Tabela poniżej zawiera opis atrybutów wspólnych dla wszystkich elementów nadrzędnych zasad:
Atrybut | Opis | Domyślne | Obecność |
---|---|---|---|
name |
Wewnętrzna nazwa zasady. Wartość atrybutu Opcjonalnie możesz użyć elementu |
Nie dotyczy | Wymagane |
continueOnError |
Ustaw wartość Ustaw jako |
false | Opcjonalnie |
enabled |
Ustaw jako Ustaw wartość |
prawda | Opcjonalnie |
async |
Ten atrybut został wycofany. |
false | Wycofano |
Element <DisplayName>
Użyj oprócz atrybutu name
, aby oznaczyć zasadę w edytorze serwera proxy interfejsu zarządzania inną nazwą w języku naturalnym.
<DisplayName>Policy Display Name</DisplayName>
Domyślne |
Nie dotyczy Jeśli pominiesz ten element, zostanie użyta wartość atrybutu |
---|---|
Obecność | Opcjonalnie |
Typ | Ciąg znaków |
Element <AccessToken>
Pobiera profil z tokenu dostępu. Możesz przekazywać zmienną zawierającą ciąg tokena dostępu lub literałowy ciąg tokena (rzadkie przypadki). W tym przykładzie token dostępu jest pobierany z parametru zapytania przekazanego w żądaniu. Użyj elementu <IgnorujAccessTokenStatus>, jeśli chcesz zwrócić informacje o unieważnionym lub wygasłym tokenie.
<AccessToken ref="request.queryparam.access_token"></AccessToken>
Domyślnie: |
request.formparam.access_token (adres URL zakodowany w formacie x-www i określony w treści żądania) |
Obecność: |
Opcjonalnie |
Typ: | Ciąg znaków |
Prawidłowe wartości: |
Zmienna przepływu zawierająca ciąg tokena dostępu albo ciąg literału. |
Element <AuthorizationCode>
Pobiera profil kodu autoryzacji. Przekazujesz zmienną zawierającą ciąg kodu autoryzacji lub ciąg literału tokena (rzadkie przypadki). W tym przykładzie kod autoryzacji jest pobierany z parametru zapytania przekazanego w żądaniu. Listę zmiennych wypełnianych przez tę operację znajdziesz w sekcji „Zmienne przepływu”.
<AuthorizationCode ref="request.queryparam.authorization_code"></AuthorizationCode>
Domyślnie: |
request.formparam.access_token (adres URL zakodowany w formacie x-www i określony w treści żądania) |
Obecność: |
Opcjonalnie |
Typ: | Ciąg znaków |
Prawidłowe wartości: |
Zmienna przepływu zawierająca ciąg kodu autoryzacji albo ciąg literału. |
Element <ClientId>
Pobiera informacje związane z identyfikatorem klienta. W tym przykładzie identyfikator klienta jest pobierany z parametru zapytania przekazanego w żądaniu. Listę zmiennych wypełnianych przez tę operację znajdziesz w sekcji „Zmienne przepływu”.
<ClientId ref="request.queryparam.client_id"></ClientId>
Domyślnie: |
request.formparam.access_token (adres URL zakodowany w formacie x-www i określony w treści żądania) |
Obecność: |
Opcjonalnie |
Typ: | Ciąg znaków |
Prawidłowe wartości: | Zmienna przepływu zawierająca ciąg kodu autoryzacji albo ciąg literału. |
Element <IgnorujAccessTokenStatus>
Zwraca informacje o tokenie, nawet jeśli token utracił ważność lub został unieważniony. Tego elementu można używać tylko z tokenami dostępu. Domyślnie zwracane są informacje o innych elementach, takie jak tokeny odświeżania i kody autoryzacji, niezależnie od ich stanu.
<IgnoreAccessTokenStatus>true</IgnoreAccessTokenStatus>
Domyślnie: |
false |
Obecność: |
Opcjonalnie |
Typ: | Wartość logiczna |
Prawidłowe wartości: | prawda lub fałsz |
Element <OdświeżToken>
Pobiera profil z tokenem odświeżania. Możesz przekazać zmienną zawierającą ciąg tokena odświeżania lub literałowy ciąg tokena (rzadkie przypadki). W tym przykładzie token odświeżania jest pobierany z parametru zapytania przekazanego w żądaniu. Listę zmiennych wypełnianych przez tę operację znajdziesz w sekcji „Zmienne przepływu”.
<RefreshToken ref="request.queryparam.refresh_token"></RefreshToken>
Domyślnie: |
request.formparam.access_token (adres URL zakodowany w formacie x-www i określony w treści żądania) |
Obecność: |
Opcjonalnie |
Typ: | Ciąg znaków |
Prawidłowe wartości: |
Zmienna przepływu zawierająca ciąg tokena odświeżania albo ciąg literału. |
Zmienne przepływu
Zasada GetOAuthV2Info wypełnia te zmienne i zwykle jest używana w przypadkach, gdy potrzebujesz danych profilu, ale nie przeprowadzono jeszcze uwierzytelnienia lub weryfikacji. .
Zmienne identyfikatora klienta
Te zmienne są zapełniane po ustawieniu elementu ClientId:
oauthv2client.{policy_name}.client_id oauthv2client.{policy_name}.client_secret oauthv2client.{policy_name}.redirection_uris // Note the spelling -- 'redirection_uris' oauthv2client.{policy_name}.developer.email oauthv2client.{policy_name}.developer.app.name oauthv2client.{policy_name}.developer.id oauthv2client.{policy_name}.{developer_app_custom_attribute_name}
Zmienne tokena dostępu
Te zmienne są zapełniane po ustawieniu elementu AccessToken:
oauthv2accesstoken.{policy_name}.developer.id oauthv2accesstoken.{policy_name}.developer.app.name oauthv2accesstoken.{policy_name}.developer.app.id oauthv2accesstoken.{policy_name}.developer.email oauthv2accesstoken.{policy_name}.organization_name oauthv2accesstoken.{policy_name}.api_product_list oauthv2accesstoken.{policy_name}.access_token oauthv2accesstoken.{policy_name}.scope oauthv2accesstoken.{policy_name}.expires_in //in seconds oauthv2accesstoken.{policy_name}.status oauthv2accesstoken.{policy_name}.client_id oauthv2accesstoken.{policy_name}.accesstoken.{custom_attribute_name} oauthv2accesstoken.{policy_name}.refresh_token oauthv2accesstoken.{policy_name}.refresh_token_status oauthv2accesstoken.{policy_name}.refresh_token_expires_in //in seconds oauthv2accesstoken.{policy_name}.refresh_count oauthv2accesstoken.{policy_name}.refresh_token_issued_at oauthv2accesstoken.{policy_name}.revoke_reason //Apigee hybrid only with value of REVOKED_BY_APP, REVOKED_BY_ENDUSER, REVOKED_BY_APP_ENDUSER, or TOKEN_REVOKED
Zmienne kodu autoryzacji
Te zmienne są wypełniane po ustawieniu elementu AuthorizationCode:
oauthv2authcode.{policy_name}.code oauthv2authcode.{policy_name}.scope oauthv2authcode.{policy_name}.redirect_uri oauthv2authcode.{policy_name}.client_id oauthv2authcode.{policy_name}.{auth_code_custom_attribute_name}
Odśwież zmienne tokenów
Te zmienne są zapełniane po ustawieniu elementu refreshToken:
oauthv2refreshtoken.{policy_name}.developer.id oauthv2refreshtoken.{policy_name}.developer.app.name oauthv2refreshtoken.{policy_name}.developer.app.id oauthv2refreshtoken.{policy_name}.developer.email oauthv2refreshtoken.{policy_name}.organization_name oauthv2refreshtoken.{policy_name}.api_product_list oauthv2refreshtoken.{policy_name}.access_token oauthv2refreshtoken.{policy_name}.scope oauthv2refreshtoken.{policy_name}.expires_in //in seconds oauthv2refreshtoken.{policy_name}.status oauthv2refreshtoken.{policy_name}.client_id oauthv2refreshtoken.{policy_name}.accesstoken.{custom_attribute_name} oauthv2refreshtoken.{policy_name}.refresh_token oauthv2refreshtoken.{policy_name}.refresh_token_status oauthv2refreshtoken.{policy_name}.refresh_token_expires_in //in seconds oauthv2refreshtoken.{policy_name}.refresh_count oauthv2refreshtoken.{policy_name}.refresh_token_issued_at oauthv2refreshtoken.{policy_name}.revoke_reason //Apigee hybrid only with value of REVOKED_BY_APP, REVOKED_BY_ENDUSER, REVOKED_BY_APP_ENDUSER, or TOKEN_REVOKED
Schemat
Każdy typ zasady jest definiowany przez schemat XML (.xsd
). Schematy zasad są dostępne na GitHubie.
Informacje o błędach
W tej sekcji opisujemy kody błędów i komunikaty o błędach, które są zwracane, oraz zmienne błędów ustawiane przez Edge, gdy ta zasada wywołuje błąd. Te informacje są ważne, jeśli opracowujesz reguły dotyczące błędów do obsługi takich błędów. Więcej informacji znajdziesz w sekcjach Co musisz wiedzieć o błędach zasad i Postępowanie w przypadku błędów.
Błędy w czasie wykonywania
Te błędy mogą wystąpić podczas wykonywania zasady. Nazwy błędów widoczne poniżej to ciągi tekstowe przypisane do zmiennej fault.name
, gdy wystąpi błąd. Więcej informacji znajdziesz w sekcji Zmienne błędów poniżej.
Kod błędu | Stan HTTP | Przyczyna |
---|---|---|
steps.oauth.v2.access_token_expired |
500 | Token dostępu wysłany do zasady stracił ważność. |
steps.oauth.v2.authorization_code_expired |
500 | Kod autoryzacji wysłany do zasady stracił ważność. |
steps.oauth.v2.invalid_access_token |
500 | Token dostępu wysłany do zasady jest nieprawidłowy. |
steps.oauth.v2.invalid_client-invalid_client_id |
500 | Identyfikator klienta wysłany do zasady jest nieprawidłowy. |
steps.oauth.v2.invalid_refresh_token |
500 | Token odświeżania wysłany do zasady jest nieprawidłowy. |
steps.oauth.v2.invalid_request-authorization_code_invalid |
500 | Kod autoryzacji wysłany do zasady jest nieprawidłowy. |
steps.oauth.v2.InvalidAPICallAsNoApiProductMatchFound |
401 | Informacje o tym, jak rozwiązać ten problem, znajdziesz w tym poście w społeczności Apigee. |
steps.oauth.v2.refresh_token_expired |
500 | Token odświeżania wysłany do zasady wygasł. |
Błędy wdrażania
Informacje o błędach wdrażania znajdziesz w komunikacie zgłoszonym w interfejsie.
Zmienne błędów
Te zmienne są ustawiane, gdy zasada wywołuje błąd w czasie działania.
Zmienne | Gdzie | Przykład |
---|---|---|
fault.name="fault_name" |
fault_name to nazwa błędu podana w tabeli Błędy środowiska wykonawczego powyżej. Nazwa błędu to ostatnia część kodu. | fault.name Matches "IPDeniedAccess" |
oauthV2.policy_name.failed |
policy_name to określona przez użytkownika nazwa zasady, która spowodowała błąd. | oauthV2.GetTokenInfo.failed = true |
oauthV2.policy_name.fault.name |
policy_name to określona przez użytkownika nazwa zasady, która spowodowała błąd. | oauthV2.GetToKenInfo.fault.name = invalid_client-invalid_client_id |
oauthV2.policy_name.fault.cause |
policy_name to określona przez użytkownika nazwa zasady, która spowodowała błąd. | oauthV2.GetTokenInfo.cause = ClientID is Invalid |
Przykładowa odpowiedź na błąd
{ "fault":{ "faultstring":"ClientId is Invalid", "detail":{ "errorcode":"keymanagement.service.invalid_client-invalid_client_id" } } }
Przykładowa reguła błędu
<FaultRule name="OAuthV2 Faults"> <Step> <Name>AM-InvalidClientIdResponse</Name> </Step> <Condition>(fault.name = "invalid_client-invalid_client_id")</Condition> </FaultRule>