Uzyskiwanie zasady OAuthOAuth22Info

Przeglądasz dokumentację Apigee Edge.
Przejdź do Dokumentacja Apigee X.
informacje.

Co

Pobiera atrybuty tokenów dostępu, tokeny odświeżania, kody autoryzacji i aplikację klienta i wypełnia zmienne wartościami tych atrybutów.

Ta zasada jest przydatna, gdy trzeba skonfigurować dynamiczne, warunkowe zachowanie na podstawie wartości w tokenie lub kodzie autoryzacji. Przy każdym sprawdzeniu poprawności tokena zmienne są uzupełniane automatycznie. wartościami atrybutów tokena. Jeżeli jednak token nie został sprawdzony, może używać tej funkcji, aby jawnie wypełniać zmienne wartościami atrybutów tokena. Zobacz też Dostosowywanie tokenów Authorization Codes (Kody autoryzacji).

Token dostępu, który przekazujesz do tej zasady, musi być prawidłowy. W przeciwnym razie zasada wygeneruje invalid_access_token błąd.

Przykłady

W poniższych przykładach użyto zasady Get OAuth V2 Info do pobierania informacji o różnych w obrębie przepływu pracy OAuth2, a następnie uzyskując dostęp do tych informacji w kodzie.

Token dostępu

Aby uzyskać odniesienie do tokena dostępu, użyj elementu <AccessToken> w zasady.

W tym przykładzie należy znaleźć token dostępu w parametrze zapytania o nazwie &quot;access_token&quot; (szczegóły implementacji zależą od reklamodawcy):

<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 z danymi profilowymi.

Możesz wtedy uzyskać dostęp do zmiennych, używając JavaScriptu lub w inny sposób. Przykład poniżej pobiera zakresy powiązane z tokenem dostępu za pomocą JavaScriptu:

var scope = context.getVariable('oauthv2accesstoken.MyTokenAttrsPolicy.scope');

Aby uzyskać dostęp do tych zmiennych w kodzie, musisz dodać do nich prefiks „oauthv2accesstoken”. Pełną listę zmiennych dostępnych przez token dostępu znajdziesz tutaj Zmienne tokena dostępu.

Kod autoryzacji

Aby uzyskać atrybuty kodu autoryzacji, użyj atrybutu <AuthorizationCode> tych zasad.

Ten przykład wymaga znalezienia tokena dostępu w formularzu parametr o nazwie „code” (szczegóły implementacji zależą od reklamodawcy):

<GetOAuthV2Info name="MyAuthCodeAttrsPolicy">
  <AuthorizationCode ref="request.formparam.code"></AuthorizationCode>
</GetOAuthV2Info>

Biorąc pod uwagę kod autoryzacji, zasada wyszukuje informacje o kodzie i wypełnia zestaw z danymi kodu autoryzacji.

Możesz wtedy uzyskać dostęp do zmiennych, używając JavaScriptu lub w inny sposób. Przykład poniżej pobiera atrybut niestandardowy powiązany z kodem autoryzacji za pomocą języka JavaScript:

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 w kodzie autoryzacji znajdziesz tutaj: Zmienne kodu autoryzacji.

Token odświeżania

Aby uzyskać atrybuty tokena odświeżania, użyj elementu <RefreshToken> w swoim pliku .

W tym przykładzie należy znaleźć token dostępu w parametrze zapytania o nazwie &quot;refresh_token&quot; (szczegóły implementacji zależą od reklamodawcy):

<GetOAuthV2Info name="MyRefreshTokenAttrsPolicy">
  <RefreshToken ref="request.queryparam.refresh_token"/>
</GetOAuthV2Info>

Biorąc pod uwagę token odświeżania, zasada wyszukuje informacje o tokenie odświeżania i wypełnia dane zestawu zmiennych z danymi tokenów odświeżania.

Możesz później uzyskać do nich dostęp za pomocą JavaScriptu lub w inny sposób. Poniżej Ten przykład pobiera za pomocą JavaScriptu 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 poprzedzić je prefiksem „oauthv2refreshtoken”. Pełną listę zmiennych dostępnych poprzez token odświeżania znajdziesz w artykule Odśwież zmienne tokenów.

Statyczny

W rzadkich przypadkach może być konieczne uzyskanie profilu statycznie skonfigurowanego tokena (jeden niedostępnego za pośrednictwem zmiennej). Aby to zrobić, podaj wartość atrybutu token dostępu.

<GetOAuthV2Info name="GetTokenAttributes">
  <AccessToken>shTUmeI1geSKin0TODcGLXBNe9vp</AccessToken>
</GetOAuthV2Info>

Możesz to zrobić w przypadku wszystkich innych typów tokenów (identyfikator klienta, kod autoryzacji i odświeżenie tokeny).

Identyfikator klienta

Ten przykład pokazuje, jak pobrać informacje o aplikacji klienckiej przy użyciu identyfikatora klienta. Po uruchomieniu zasada wypełnia zbiór zmiennych informacjami o kliencie. W tym zasada oczekuje, że identyfikator klienta zostanie znaleziony w parametrze zapytania pod tytułem client_id. Mając identyfikator klienta, zasada wyszukuje i wypełnia zestaw zmiennych danymi profilu. Zmienne poprzedzony prefiksem oauthv2client.

<GetOAuthV2Info name="GetClientAttributes">
  <ClientId ref="request.queryparam.client_id"></ClientId>
</GetOAuthV2Info>

Możesz wtedy uzyskać dostęp do zmiennych, używając JavaScriptu lub w inny sposób. Aby na przykład uzyskać nazwa aplikacji dewelopera i adres e-mail dewelopera powiązany z aplikacją kliencką za pomocą Kod JavaScript:

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>

<GetOAuthV2Info> atrybuty

<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

&lt;AccessToken&gt; element

Pobiera profil dla tokena dostępu. Przekazujesz zmienną, która zawiera ciąg tokena dostępu lub ciąg tokenu literału (rzadkie litery). W tym przykładzie token dostępu to pobranych z parametru zapytania przekazanego w żądaniu. Używaj parametru <ignoreAccessTokenStatus> jeśli chcesz zwrócić informacje o unieważnionym lub wygasłym tokenie.

<AccessToken ref="request.queryparam.access_token"></AccessToken>

Domyślne:

request.formparam.access_token (zakodowany w formacie x-www-form-url i określony w żądaniu treść)

Obecność:

Opcjonalnie

Typ: Ciąg znaków
Prawidłowe wartości:

Zmienna przepływu zawierająca ciąg tokena dostępu lub ciąg literału.


&lt;AuthorizationCode&gt; element

Pobiera profil kodu autoryzacji. Podaj zmienną, która zawiera ciąg kodu uwierzytelniania lub ciąg znaków tokena literału (rzadkie litery). W tym przykładzie kod autoryzacji to pobranych z parametru zapytania przekazanego w żądaniu. Aby uzyskać listę zmiennych wypełnianych przez ten argument Więcej dowiesz się z artykułu „Zmienne przepływu”.

<AuthorizationCode ref="request.queryparam.authorization_code"></AuthorizationCode>

Domyślne:

request.formparam.access_token (zakodowany w formacie x-www-form-url i określony w żądaniu treść)

Obecność:

Opcjonalnie

Typ: Ciąg znaków
Prawidłowe wartości:

Zmienna przepływu zawierająca ciąg znaków uwierzytelniania lub ciąg literału.

&lt;ClientId&gt; element

Pobiera informacje związane z identyfikatorem klienta. W tym przykładzie pobierany jest identyfikator klienta. z parametru zapytania przekazanego w żądaniu. Aby zobaczyć listę zmiennych wypełnianych przez tę operację, Więcej informacji: „Zmienne przepływu”.

<ClientId ref="request.queryparam.client_id"></ClientId>

Domyślne:

request.formparam.access_token (zakodowany w formacie x-www-form-url i określony w żądaniu treść)

Obecność:

Opcjonalnie

Typ: Ciąg
Prawidłowe wartości: Zmienna przepływu zawierająca ciąg znaków uwierzytelniania lub ciąg literału.

&lt;IgnoreAccessTokenStatus&gt; element

Zwraca informacje o tokenie, nawet jeśli token wygasł lub został unieważniony. Ten element może mieć tylko używane z tokenami dostępu. Informacje dotyczące innych jednostek, takich jak tokeny odświeżania i autoryzacja są domyślnie zwracane bez względu na ich stan.

<IgnoreAccessTokenStatus>true</IgnoreAccessTokenStatus>

Domyślne:

fałsz

Obecność:

Opcjonalnie

Typ: Wartość logiczna
Prawidłowe wartości: prawda lub fałsz

&lt;RefreshToken&gt; element

Pobiera profil dla tokena odświeżania. Przekazujesz zmienną, która zawiera odśwież ciąg tokena lub literału tokena (rzadkie litery). W tym przykładzie token odświeżania to pobranych z parametru zapytania przekazanego w żądaniu. Aby uzyskać listę zmiennych wypełnianych przez ten argument Więcej dowiesz się z artykułu „Zmienne przepływu”.

<RefreshToken ref="request.queryparam.refresh_token"></RefreshToken>

Domyślne:

request.formparam.access_token (zakodowany w formacie x-www-form-url i określony w żądaniu treść)

Obecność:

Opcjonalnie

Typ: Ciąg znaków
Prawidłowe wartości:

Zmienna przepływu zawierająca ciąg tokena odświeżania lub ciąg literału.

Zmienne przepływu

Te zmienne wypełnia zasada GetOAuthV2Info i jest zwykle używana w przypadkach, gdy nie potrzebują danych profilu, ale nie mają jeszcze zatwierdzenia ani weryfikacji. .

Zmienne identyfikatora klienta

Te zmienne są wypeł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ą zapeł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 tokena

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 zasad jest definiowany przez schemat XML (.xsd). Schematy zasad są dostępne na GitHubie.

Informacje o błędzie

This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes. The error names shown below are the strings that are assigned to the fault.name variable when an error occurs. See the Fault variables section below for more details.

Fault code HTTP status Cause
steps.oauth.v2.access_token_expired 500 The access token sent to the policy is expired.
steps.oauth.v2.authorization_code_expired 500 The authorization code sent to the policy is expired.
steps.oauth.v2.invalid_access_token 500 The access token sent to the policy is invalid.
steps.oauth.v2.invalid_client-invalid_client_id 500 The client ID sent to the policy is invalid.
steps.oauth.v2.invalid_refresh_token 500 The refresh token sent to the policy is invalid.
steps.oauth.v2.invalid_request-authorization_code_invalid 500 The authorization code sent to the policy is invalid.
steps.oauth.v2.InvalidAPICallAsNoApiProductMatchFound 401 Please see this Apigee Community post for information about troubleshooting this error.
steps.oauth.v2.refresh_token_expired 500 The refresh token sent to the policy is expired.

Deployment errors

Refer to the message reported in the UI for information about deployment errors.

Fault variables

These variables are set when this policy triggers an error at runtime.

Variables Where Example
fault.name="fault_name" fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. fault.name Matches "IPDeniedAccess"
oauthV2.policy_name.failed policy_name is the user-specified name of the policy that threw the fault. oauthV2.GetTokenInfo.failed = true
oauthV2.policy_name.fault.name policy_name is the user-specified name of the policy that threw the fault. oauthV2.GetToKenInfo.fault.name = invalid_client-invalid_client_id
oauthV2.policy_name.fault.cause policy_name is the user-specified name of the policy that threw the fault. oauthV2.GetTokenInfo.cause = ClientID is Invalid

Example error response

{  
   "fault":{  
      "faultstring":"ClientId is Invalid",
      "detail":{  
         "errorcode":"keymanagement.service.invalid_client-invalid_client_id"
      }
   }
}

Example fault rule

<FaultRule name="OAuthV2 Faults">
    <Step>
        <Name>AM-InvalidClientIdResponse</Name>
    </Step>
    <Condition>(fault.name = "invalid_client-invalid_client_id")</Condition>
</FaultRule>

Powiązane artykuły