Uzyskiwanie zasady OAuthOAuth22Info

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 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>, aby oznaczyć zasadę w edytorze serwera proxy interfejsu zarządzania inną nazwą w języku naturalnym.

Nie dotyczy Wymagane
continueOnError

Ustaw wartość false, aby zwracać błąd w przypadku niepowodzenia zasady. Jest to normalne działanie większości zasad.

Ustaw jako true, aby wykonywanie przepływu było kontynuowane nawet po awarii zasady.

false Opcjonalnie
enabled

Ustaw jako true, aby wymuszać zasadę.

Ustaw wartość false, aby wyłączyć tę zasadę. Zasada nie będzie egzekwowana, nawet jeśli pozostanie dołączona do procesu.

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 name zasady.

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>

Powiązane artykuły