Uzyskiwanie zasady OAuthOAuth22Info

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

Powiązane artykuły