Wyświetlasz dokumentację Apigee Edge.
Przejdź do
dokumentacji Apigee X. info
Co
Pobiera atrybuty tokenów dostępu, tokenów odświeżania, kodów autoryzacji i atrybutów aplikacji klienckiej oraz wypełnia zmienne wartościami tych atrybutów.
Ta zasada jest przydatna, gdy trzeba skonfigurować dynamiczne, warunkowe działanie 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 nastąpiła, 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
W tych przykładach używamy zasady Get OAuth V2 Info (Pobierz informacje o OAuth V2), aby pobrać informacje o różnych komponentach procesu 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
zasadzie.
W tym przykładzie oczekujemy, że token dostępu zostanie znaleziony 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ć do nich 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 elementu <AuthorizationCode>
w zasadzie.
W tym przykładzie oczekujemy, że token dostępu zostanie znaleziony 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 zasada wyszukuje informacje o kodzie i wypełnia 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 pobieramy atrybut niestandardowy powiązany z kodem autoryzacji za pomocą JavaScriptu:
var attr = context.getVariable(‘oauthv2authcode.MyAuthCodeAttrsPolicy.custom_attribute_name’);
Pamiętaj, że 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 Zmienne kodu autoryzacji.
Token odświeżania
Aby uzyskać atrybuty tokena odświeżania, użyj elementu <RefreshToken> w swojej
zasadzie.
W tym przykładzie oczekujemy, że token dostępu zostanie znaleziony 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 zasada wyszukuje informacje o tokenie odświeżania i wypełnia 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 pobieramy atrybut niestandardowy powiązany z tokenem odświeżania za pomocą JavaScriptu:
var attr = context.getVariable(‘oauthv2refreshtoken.MyRefreshTokenAttrsPolicy.accesstoken.custom_attribute_name’);
Pamiętaj, że aby uzyskać dostęp do tych zmiennych w kodzie, musisz dodać do nich prefiks "oauthv2refreshtoken". Pełną listę zmiennych dostępnych za pomocą tokena odświeżania znajdziesz w artykule Zmienne tokena odś1wieżania.
Statyczny
W rzadkich przypadkach może być konieczne pobranie profilu tokena skonfigurowanego statycznie (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ć również 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 zasada wypełnia zestaw zmiennych informacjami o kliencie. W tym
przypadku zasada oczekuje, że identyfikator klienta zostanie znaleziony w parametrze zapytania
o nazwie client_id. Na podstawie identyfikatora klienta zasada wyszukuje profil klienta
i wypełnia zestaw zmiennych danymi 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ą kliencką za pomocą JavaScriptu:
context.getVariable("oauthv2client.GetClientAttributes.developer.email");
context.getVariable("oauthv2client.GetClientAttributes.developer.app.name");Odniesienie do elementu
Odniesienie do 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>
|
Wartość domyślna: |
request.formparam.access_token (x-www-form-urlencoded i określony w treści żądania body) |
|
Obecność: |
Opcjonalny |
| Typ: | Ciąg znaków |
| Prawidłowe wartości: |
Zmienna przepływu zawierająca ciąg tokena dostępu lub literał. |
Element <AuthorizationCode>
Pobiera profil kodu autoryzacji. Przekazujesz zmienną zawierającą ciąg kodu autoryzacji lub literał 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>
|
Wartość domyślna: |
request.formparam.access_token (x-www-form-urlencoded i określony w treści żądania body) |
|
Obecność: |
Opcjonalny |
| Typ: | Ciąg znaków |
| Prawidłowe wartości: |
Zmienna przepływu zawierająca ciąg kodu autoryzacji lub literał. |
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>|
Wartość domyślna: |
request.formparam.access_token (x-www-form-urlencoded i określony w treści żądania body) |
|
Obecność: |
Opcjonalny |
| Typ: | Ciąg znaków |
| Prawidłowe wartości: | Zmienna przepływu zawierająca ciąg kodu autoryzacji lub literał. |
Element <IgnoreAccessTokenStatus>
Zwraca informacje o tokenie, nawet jeśli token wygasł lub został unieważniony. Ten element może być używany tylko z tokenami dostępu. Informacje o innych elementach, takich jak tokeny odświeżania i kody autoryzacji , są domyślnie zwracane niezależnie od ich stanu.
<IgnoreAccessTokenStatus>true</IgnoreAccessTokenStatus>
|
Wartość domyślna: |
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 literał 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>
|
Wartość domyślna: |
request.formparam.access_token (x-www-form-urlencoded i określony w treści żądania body) |
|
Obecność: |
Opcjonalny |
| Typ: | Ciąg znaków |
| Prawidłowe wartości: |
Zmienna przepływu zawierająca ciąg tokena odświeżania lub literał. |
Zmienne przepływu
Zasada GetOAuthV2Info wypełnia te zmienne i jest zwykle używana w przypadkach, gdy potrzebujesz danych profilu, ale nie doszło jeszcze do przyznania dostępu 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>