Wyświetlasz dokumentację Apigee Edge.
Zapoznaj się z dokumentacją Apigee X. info
Co
Pobiera atrybuty tokenów dostępu, tokenów odświeżania, kodów autoryzacji i atrybuty aplikacji klienckiej oraz wypełnia zmienne wartościami tych atrybutów.
Ta zasada jest przydatna, gdy musisz skonfigurować dynamiczne zachowanie warunkowe na podstawie wartości w tokenie lub kodzie autoryzacji. Za każdym razem, gdy następuje weryfikacja tokena, zmienne są automatycznie wypełniane wartościami atrybutów tokena. Jeśli jednak weryfikacja tokena nie została przeprowadzona, możesz użyć tej funkcji, aby jawnie wypełnić zmienne wartościami atrybutów tokena. Zobacz też Dostosowywanie tokenów i kodów autoryzacji.
Token dostępu przekazywany do tej zasady musi być ważny. W przeciwnym razie zasada zwróci błąd invalid_access_token.
Przykłady
Poniższe przykłady używają zasady Get OAuth V2 Info do pobierania informacji o różnych komponentach przepływu pracy OAuth2, a następnie uzyskiwania dostępu do tych informacji w kodzie.
Token dostępu
Aby uzyskać odwołanie do tokena dostępu, użyj elementu <AccessToken> w zasadach.
W tym przykładzie oczekiwane jest znalezienie tokena dostępu w parametrze zapytania o nazwie „access_token” (szczegóły implementacji zależą od Ciebie):
<GetOAuthV2Info name="MyTokenAttrsPolicy"> <AccessToken ref="request.queryparam.access_token"></AccessToken> </GetOAuthV2Info>
Na podstawie tokena dostępu zasada wyszukuje profil tokena i wypełnia zestaw zmiennych danymi profilu.
Następnie możesz uzyskać dostęp do zmiennych za pomocą JavaScriptu lub w inny sposób. W tym przykładzie pobieramy zakresy powiązane z tokenem dostępu za pomocą JavaScriptu:
var scope = context.getVariable('oauthv2accesstoken.MyTokenAttrsPolicy.scope');
Pamiętaj, że aby uzyskać dostęp do tych zmiennych w kodzie, musisz dodać przed nimi prefiks „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 w zasadach elementu <AuthorizationCode>.
W tym przykładzie oczekiwany jest token dostępu w parametrze formularza o nazwie „code” (szczegóły implementacji zależą od Ciebie):
<GetOAuthV2Info name="MyAuthCodeAttrsPolicy"> <AuthorizationCode ref="request.formparam.code"></AuthorizationCode> </GetOAuthV2Info>
Na podstawie kodu autoryzacji zasady wyszukują informacje o tym kodzie i wypełniają zestaw zmiennych danymi kodu autoryzacji.
Następnie możesz uzyskać dostęp do zmiennych za pomocą JavaScriptu lub w inny sposób. W tym przykładzie za pomocą JavaScriptu pobierany jest atrybut niestandardowy powiązany z kodem autoryzacji:
var attr = context.getVariable(‘oauthv2authcode.MyAuthCodeAttrsPolicy.custom_attribute_name’);
Pamiętaj, że aby uzyskać dostęp do tych zmiennych w kodzie, musisz dodać przed nimi prefiks „oauthv2authcode”. Pełną listę zmiennych dostępnych za pomocą kodu autoryzacji znajdziesz w artykule Zmienne kodu autoryzacji.
Token odświeżania
Aby uzyskać atrybuty tokena odświeżania, użyj elementu <RefreshToken> w zasadach.
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>
Na podstawie tokena odświeżania zasady wyszukują informacje o tym tokenie i wypełniają zestaw zmiennych danymi tokena odświeżania.
Następnie możesz uzyskać dostęp do tych zmiennych za pomocą JavaScriptu lub w inny sposób. W tym przykładzie pokazujemy, jak za pomocą JavaScriptu pobrać atrybut niestandardowy powiązany z tokenem odświeżania:
var attr = context.getVariable(‘oauthv2refreshtoken.MyRefreshTokenAttrsPolicy.accesstoken.custom_attribute_name’);
Pamiętaj, że aby uzyskać dostęp do zmiennych w kodzie, musisz dodać przed nimi prefiks „oauthv2refreshtoken”. Pełną listę zmiennych dostępnych za pomocą tokena odświeżania znajdziesz w artykule Zmienne tokena odświeżania.
Statyczny
W rzadkich przypadkach może być konieczne uzyskanie profilu tokena skonfigurowanego statycznie (tokena, który nie jest dostępny za pomocą zmiennej). Możesz to zrobić, podając wartość tokena dostępu jako element.
<GetOAuthV2Info name="GetTokenAttributes"> <AccessToken>shTUmeI1geSKin0TODcGLXBNe9vp</AccessToken> </GetOAuthV2Info>
Możesz to zrobić w przypadku wszystkich innych typów tokenów (identyfikatora klienta, kodu autoryzacji i tokenów odświeżania).
Identyfikator klienta
Ten przykład pokazuje, jak pobrać informacje o aplikacji klienckiej za pomocą identyfikatora klienta.
Po wykonaniu zasady wypełniają zestaw zmiennych informacjami o kliencie. W tym przypadku zasady oczekują, że identyfikator klienta będzie znajdować się w parametrze zapytania o nazwie client_id. Na podstawie identyfikatora klienta zasada wyszukuje profil klienta i wypełnia zestaw zmiennych danymi z profilu. Zmienne będą miały prefiks oauthv2client. .
<GetOAuthV2Info name="GetClientAttributes"> <ClientId ref="request.queryparam.client_id"></ClientId> </GetOAuthV2Info>
Następnie możesz uzyskać dostęp do zmiennych za pomocą JavaScriptu lub w inny sposób. Aby na przykład uzyskać nazwę aplikacji dewelopera i adres e-mail dewelopera powiązane z aplikacją klienta za pomocą JavaScriptu:
context.getVariable("oauthv2client.GetClientAttributes.developer.email");
context.getVariable("oauthv2client.GetClientAttributes.developer.app.name");Odniesienie do elementu
Dokumentacja elementu 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">
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 Opcjonalnie możesz użyć elementu |
Nie dotyczy | Wymagane |
continueOnError |
Ustaw jako Ustaw jako |
fałsz | Opcjonalnie |
enabled |
Aby egzekwować zasadę, ustaw wartość Aby wyłączyć zasadę, ustaw wartość |
prawda | Opcjonalnie |
async |
Ten atrybut został wycofany. |
fałsz | Wycofano |
<DisplayName> 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 |
|---|---|
| Obecność | Opcjonalnie |
| Typ | Ciąg znaków |
Element <AccessToken>
Pobiera profil tokena dostępu. Przekazujesz zmienną zawierającą ciąg tokena dostępu lub literał tokena (rzadki przypadek). W tym przykładzie token dostępu jest pobierany z parametru zapytania przekazanego w żądaniu. Jeśli chcesz zwrócić informacje o unieważnionym lub wygasłym tokenie, użyj elementu <IgnoreAccessTokenStatus>.
<AccessToken ref="request.queryparam.access_token"></AccessToken>
|
Domyślnie: |
request.formparam.access_token (x-www-form-urlencoded i określony w treści żądania) |
|
Obecność: |
Opcjonalny |
| Typ: | Ciąg znaków |
| Prawidłowe wartości: |
Zmienna przepływu zawierająca ciąg tokena dostępu lub ciąg dosłowny. |
Element <AuthorizationCode>
Pobiera profil dla kodu autoryzacji. Przekazujesz zmienną zawierającą ciąg kodu autoryzacji lub ciąg literału tokena (rzadki przypadek). 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 (x-www-form-urlencoded i określony w treści żądania) |
|
Obecność: |
Opcjonalny |
| Typ: | Ciąg znaków |
| Prawidłowe wartości: |
Zmienna przepływu zawierająca ciąg kodu autoryzacji lub ciąg dosłowny. |
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 (x-www-form-urlencoded i określony w treści żądania) |
|
Obecność: |
Opcjonalny |
| Typ: | Ciąg znaków |
| Prawidłowe wartości: | Zmienna przepływu zawierająca ciąg kodu autoryzacji lub ciąg dosłowny. |
Element <IgnoreAccessTokenStatus>
Zwraca informacje o tokenie, nawet jeśli wygasł lub został unieważniony. Ten element może być używany tylko z tokenami dostępu. Informacje o innych podmiotach, takie jak tokeny odświeżania i kody autoryzacji, są domyślnie zwracane niezależnie od ich stanu.
<IgnoreAccessTokenStatus>true</IgnoreAccessTokenStatus>
|
Domyślnie: |
fałsz |
|
Obecność: |
Opcjonalny |
| Typ: | Wartość logiczna |
| Prawidłowe wartości: | prawda lub fałsz |
Element <RefreshToken>
Pobiera profil tokena odświeżania. Przekazujesz zmienną zawierającą ciąg tokena odświeżania lub ciąg literału tokena (rzadki przypadek). 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 (x-www-form-urlencoded i określony w treści żądania) |
|
Obecność: |
Opcjonalny |
| Typ: | Ciąg znaków |
| Prawidłowe wartości: |
Zmienna przepływu zawierająca ciąg tekstowy tokena odświeżania lub ciąg tekstowy literału. |
Zmienne przepływu
Zasady GetOAuthV2Info wypełniają te zmienne i są zwykle używane w przypadkach, gdy potrzebujesz danych profilu, ale nie doszło jeszcze do przyznania uprawnień ani weryfikacji. .
Zmienne identyfikatora klienta
Te zmienne są wypełniane, gdy ustawiony jest element 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ą wypełniane, gdy ustawiony jest element 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, gdy ustawiony jest element 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}Zmienne tokena odświeżania
Te zmienne są wypełniane, gdy ustawiony jest element 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 zdefiniowany przez schemat XML (.xsd). Schematy zasad są dostępne na GitHubie.
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. Nazwy błędów widoczne poniżej to ciągi tekstowe
przypisane do zmiennej fault.name w przypadku wystąpienia błędu. Zobacz błąd
zmiennych.
| 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 | Więcej informacji: ten post na karcie Społeczność Apigee z informacjami o rozwiązywaniu tego problemu. |
steps.oauth.v2.refresh_token_expired |
500 | Token odświeżania wysłany do zasady stracił ważność. |
Błędy wdrażania
Więcej informacji o błędach wdrażania znajdziesz w komunikacie zgłoszonym w interfejsie.
Zmienne błędów
Te zmienne są ustawiane, gdy ta 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 czasu działania powyżej. Nazwa błędu to ostatnia część kodu błędu. | 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>