Zasady OAuthV2

Wyświetlasz dokumentację Apigee Edge.
Zapoznaj się z dokumentacją Apigee X. info

Co

OAuthV2 to wieloaspektowa zasada służąca do wykonywania operacji związanych z typami uwierzytelniania OAuth 2.0. Jest to podstawowa zasada służąca do konfigurowania punktów końcowych OAuth 2.0 w Apigee Edge.

Wskazówka: jeśli chcesz dowiedzieć się więcej o OAuth w Apigee Edge, odwiedź stronę główną OAuth. Zawiera linki do zasobów, przykładów, filmów i innych materiałów. Dobry przykład użycia tej zasady w działającej aplikacji znajdziesz w zaawansowanym przykładzie OAuth w usłudze GitHub.

Próbki

VerifyAccessToken

VerifyAccessToken

Ta konfiguracja zasad OAuthV2 (z operacją VerifyAccessToken) sprawdza, czy token dostępu przesłany do Apigee Edge jest prawidłowy. Gdy ta operacja zasady zostanie wywołana, Edge wyszuka w żądaniu prawidłowy token dostępu. Jeśli token dostępu jest ważny, żądanie może być kontynuowane. Jeśli jest nieprawidłowy, całe przetwarzanie zostaje zatrzymane, a w odpowiedzi zwracany jest błąd.

<OAuthV2 async="false" continueOnError="false" enabled="true" name="OAuth-v20-2">
    <DisplayName>OAuth v2.0 2</DisplayName>
    <Operation>VerifyAccessToken</Operation>
    <AccessTokenPrefix>Bearer</AccessTokenPrefix> <!-- Optional, default is Bearer -->
</OAuthV2>

Uwaga: obsługiwane są tylko tokeny okaziciela OAuth 2.0. Tokeny kodu uwierzytelniania wiadomości (MAC) nie są obsługiwane.

Na przykład:

$ curl -H "Authorization: Bearer ylSkZIjbdWybfsUQe9BqP0LH5Z" http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282

Domyślnie Edge akceptuje tokeny dostępu w nagłówku Authorization z prefiksem Bearer. Możesz zmienić to ustawienie domyślne za pomocą elementu <AccessToken>.

GenerateAccessToken

Generowanie tokenów dostępu

Przykłady pokazujące, jak wysyłać żądania tokenów dostępu dla każdego z obsługiwanych typów przyznawania uprawnień, znajdziesz w artykule Wysyłanie żądań tokenów dostępu i kodów autoryzacji. W tym artykule znajdziesz przykłady tych operacji:

GenerateAuthorizationCode

Generowanie kodu autoryzacji

Przykłady pokazujące, jak prosić o kody autoryzacji, znajdziesz w artykule Prośba o kod autoryzacji.

RefreshAccessToken

Odświeżanie tokena dostępu

Przykłady pokazujące, jak żądać tokenów dostępu za pomocą tokena odświeżania, znajdziesz w artykule Odświeżanie tokena dostępu.

Token przepływu odpowiedzi

Generowanie tokena dostępu w przepływie odpowiedzi

Czasami może być konieczne wygenerowanie tokena dostępu w ramach przepływu odpowiedzi. Możesz to zrobić np. w odpowiedzi na niestandardową weryfikację przeprowadzoną w usłudze backendu. W tym przykładzie przypadek użycia wymaga zarówno tokena dostępu, jak i tokena odświeżania, co wyklucza typ przyznawania uprawnień w sposób dorozumiany. W tym przypadku użyjemy typu uwierzytelnienia password, aby wygenerować token. Jak zobaczysz, kluczem do działania tej funkcji jest przekazanie nagłówka żądania autoryzacji z zasadami JavaScript.

Najpierw przyjrzyjmy się przykładowym zasadom:

<OAuthV2 enabled="true" continueOnError="false" async="false" name="generateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <AppEndUser>Doe</AppEndUser>
    <UserName>jdoe</UserName>
    <PassWord>jdoe</PassWord>
    <GrantType>grant_type</GrantType>
    <ClientId>a_valid_client_id</ClientId>
    <SupportedGrantTypes>
        <GrantType>password</GrantType>
    </SupportedGrantTypes>
</OAuthV2>

Jeśli umieścisz tę zasadę w przepływie odpowiedzi, wystąpi błąd 401 UnAuthorized, nawet jeśli w zasadach podano prawidłowe parametry logowania. Aby rozwiązać ten problem, musisz ustawić nagłówek żądania autoryzacji.

Nagłówek Authorization musi zawierać schemat dostępu Basic z zakodowanym w formacie Base64 ciągiem client_id:client_secret.

Możesz dodać ten nagłówek za pomocą zasady JavaScript umieszczonej tuż przed zasadą OAuthV2, tak jak poniżej: Zmienne „local_clientid” i „local_secret” muszą być wcześniej ustawione i dostępne w przepływie:

var client_id = context.getVariable("local_clientid");
var client_secret = context.getVariable("local_secret");
context.setVariable("request.header.Authorization","Basic "+CryptoJS.enc.Base64.stringify(CryptoJS.enc.Latin1
                                      .parse(client_id + ':' + client_secret)));

Zobacz też „Kodowanie podstawowych danych logowania”.

Odniesienie do elementu

Dokumentacja zasady opisuje elementy i atrybuty zasady OAuthV2.

Przykładowe zasady przedstawione poniżej to jedna z wielu możliwych konfiguracji. Ten przykład pokazuje zasady OAuthV2 skonfigurowane dla operacji GenerateAccessToken. Zawiera elementy wymagane i opcjonalne. Szczegółowe informacje znajdziesz w opisach elementów w tej sekcji.

<OAuthV2 name="GenerateAccessToken">
  <!-- This policy generates an OAuth 2.0 access token using the client_credentials grant type -->
  <Operation>GenerateAccessToken</Operation>
  <!-- This is in millseconds, so expire in an hour -->
  <ExpiresIn>3600000</ExpiresIn>
  <SupportedGrantTypes>
    <GrantType>client_credentials</GrantType>
  </SupportedGrantTypes>
  <GrantType>request.queryparam.grant_type</GrantType>
  <GenerateResponse/>
</OAuthV2>

Atrybuty <OAuthV2>

<OAuthV2 async="false" continueOnError="false" enabled="true" name="MyOAuthPolicy">

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>

<AccessToken>request.header.access_token</AccessToken>

Domyślnie funkcja VerifyAccessToken oczekuje, że token dostępu zostanie wysłany w nagłówku Authorization. Możesz zmienić to ustawienie domyślne za pomocą tego elementu. Na przykład request.queryparam.access_token oznacza, że token dostępu powinien być obecny jako parametr zapytania o nazwie access_token.

Przykład, w którym określono <AccessToken>request.header.access_token</AccessToken>:

curl https://myorg-myenv.apigee.net/oauth2/validate -H "access_token:Rft3dqrs56Blirls56a"
Przykład, w którym określono <AccessToken>request.queryparam.access_token</AccessToken>:

curl "https://myorg-myenv.apigee.net/oauth2/validate?access_token:Rft3dqrs56Blirls56a"

Domyślnie:

Nie dotyczy

Obecność:

Opcjonalny

Typ: Ciąg znaków
Używane w operacjach:
  • VerifyAccessToken

Element <AccessTokenPrefix>

<AccessTokenPrefix>Bearer</AccessTokenPrefix>

Domyślnie zasada VerifyAccessToken oczekuje, że token dostępu zostanie wysłany w nagłówku Authorization jako token Bearer. Na przykład:

-H "Authorization: Bearer Rft3dqrs56Blirls56a"

Obecnie obsługiwany jest tylko prefiks Bearer.

Domyślnie:

Nośnik

Obecność:

Opcjonalny

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

Nośnik

Używane w operacjach:
  • VerifyAccessToken

Element <AppEndUser>

<AppEndUser>request.queryparam.app_enduser</AppEndUser>

W przypadku gdy identyfikator użytkownika aplikacji musi zostać wysłany na serwer autoryzacji, ten element umożliwia określenie, gdzie Edge ma szukać identyfikatora użytkownika. Może być na przykład wysłany jako parametr zapytania lub w nagłówku HTTP.

Na przykład request.queryparam.app_enduser oznacza, że parametr AppEndUser powinien być obecny jako parametr zapytania, np. ?app_enduser=ntesla@theramin.com. Aby wymagać identyfikatora AppEndUser w nagłówku HTTP, ustaw na przykład tę wartość na request.header.app_enduser.

To ustawienie umożliwia uwzględnienie w tokenie dostępu identyfikatora użytkownika aplikacji. Ta funkcja jest przydatna, jeśli chcesz mieć możliwość pobierania lub unieważniania tokenów dostępu OAuth 2.0 na podstawie identyfikatora użytkownika. Więcej informacji znajdziesz w artykule Włączanie pobierania i unieważniania tokenów dostępu OAuth 2.0 według identyfikatora użytkownika, identyfikatora aplikacji lub obu tych identyfikatorów.

Domyślnie:

Nie dotyczy

Obecność:

Opcjonalny

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

Każda zmienna przepływu dostępna dla zasad w czasie działania.

Używane z typami przyznania dostępu:
  • authorization_code
  • niejawny,
  • hasło
  • client_credentials

<Attributes/Attribute>

<Attributes>
    <Attribute name="attr_name1" ref="flow.variable" display="true|false">value1</Attribute>
    <Attribute name="attr_name2" ref="flow.variable" display="true|false">value2</Attribute>
</Attributes>

Użyj tego elementu, aby dodać atrybuty niestandardowe do tokena dostępu lub kodu autoryzacji. Możesz na przykład osadzić w tokenie dostępu identyfikator użytkownika lub identyfikator sesji, który można wyodrębnić i sprawdzić w czasie działania programu.

Ten element umożliwia określenie wartości w zmiennej przepływu lub w ciągu dosłownym. Jeśli określisz zarówno zmienną, jak i ciąg znaków, zostanie użyta wartość określona w zmiennej przepływu. Jeśli zmiennej nie można rozpoznać, ciąg znaków jest wartością domyślną.

Więcej informacji o używaniu tego elementu znajdziesz w artykule Dostosowywanie tokenów i kodów autoryzacji.

Wyświetlanie i ukrywanie atrybutów niestandardowych w odpowiedzi

Pamiętaj, że jeśli ustawisz element GenerateResponse tej zasady na true, w odpowiedzi zostanie zwrócona pełna reprezentacja tokena w formacie JSON, w tym wszystkie ustawione przez Ciebie atrybuty niestandardowe. W niektórych przypadkach możesz chcieć ukryć niektóre lub wszystkie atrybuty niestandardowe w odpowiedzi, aby nie były widoczne dla aplikacji klienckich.

Domyślnie atrybuty niestandardowe pojawiają się w odpowiedzi. Jeśli chcesz je ukryć, możesz ustawić parametr display na wartość false. Na przykład:

<Attributes>
    <Attribute name="employee_id" ref="employee.id" display="false"/>
    <Attribute name="employee_name" ref="employee.name" display="false"/>
</Attributes>

Wartość atrybutu display nie jest zapisywana. Załóżmy, że generujesz token dostępu z atrybutami niestandardowymi, które chcesz ukryć w wygenerowanej odpowiedzi. Ustawienie display=false pozwala osiągnąć ten cel. Jeśli jednak później zostanie wygenerowany nowy token dostępu za pomocą tokena odświeżania, w odpowiedzi tokena odświeżania pojawią się oryginalne atrybuty niestandardowe z tokena dostępu. Dzieje się tak, ponieważ Edge nie pamięta, że atrybut display został pierwotnie ustawiony na false w zasadach generowania tokena dostępu – atrybut niestandardowy jest po prostu częścią metadanych tokena dostępu.

To samo zachowanie wystąpi, jeśli dodasz atrybuty niestandardowe do kodu autoryzacji – gdy token dostępu zostanie wygenerowany przy użyciu tego kodu, te atrybuty niestandardowe pojawią się w odpowiedzi tokena dostępu. Może to nie być oczekiwane zachowanie.

Aby ukryć atrybuty niestandardowe w tych przypadkach, masz do wyboru te opcje:

  • Wyraźnie zresetuj atrybuty niestandardowe w zasadach tokena odświeżania i ustaw ich wyświetlanie na wartość „false”. W takim przypadku może być konieczne pobranie oryginalnych wartości niestandardowych z oryginalnego tokena dostępu za pomocą zasady GetOAuthV2Info.
  • Użyj zasady JavaScriptu po przetworzeniu, aby ręcznie wyodrębnić atrybuty niestandardowe, których nie chcesz widzieć w odpowiedzi.

Zobacz też Dostosowywanie tokenów i kodów autoryzacji.

Domyślnie:

N/A

Obecność:

Opcjonalny

Prawidłowe wartości:
  • name – nazwa atrybutu
  • ref – wartość atrybutu. Może pochodzić ze zmiennej przepływu.
  • display – (opcjonalnie) umożliwia określenie, czy w odpowiedzi mają się pojawiać atrybuty niestandardowe. Jeśli true, w odpowiedzi pojawią się atrybuty niestandardowe (jeśli włączona jest też opcja GenerateResponse). Jeśli false, custom atrybuty nie są uwzględniane w odpowiedzi. Wartością domyślną jest true. Zobacz Wyświetlanie i ukrywanie atrybutów niestandardowych w odpowiedzi.
Używane z typami przyznania dostępu:
  • authorization_code
  • niejawny,
  • hasło
  • client_credentials
  • refresh_token
  • Może być też używana z operacją GenerateAuthorizationCode.

Element <ClientId>

<ClientId>request.formparam.client_id</ClientId>

W kilku przypadkach aplikacja kliencka musi wysłać identyfikator klienta do serwera autoryzacji. Ten element określa, że Apigee ma szukać identyfikatora klienta w zmiennej przepływu request.formparam.client_id. Ustawienie ClientId na inną zmienną nie jest obsługiwane. Zobacz też Prośba o tokeny dostępu i kody autoryzacji.

Domyślnie:

request.formparam.client_id (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: request.formparam.client_id
Używane z typami przyznania dostępu:
  • authorization_code
  • hasło
  • niejawny,
  • client_credentials

Może być też używana z operacją GenerateAuthorizationCode.

Element <Code>

<Code>request.queryparam.code</Code>

W przypadku przepływu typu uwierzytelnienia klient musi przesłać kod autoryzacji do serwera autoryzacji (Apigee Edge). Ten element pozwala określić, gdzie Edge ma szukać kodu autoryzacji. Może być na przykład wysyłany jako parametr zapytania, nagłówek HTTP lub parametr formularza (domyślnie).

Zmienna request.queryparam.auth_code oznacza, że kod autoryzacji powinien być obecny jako parametr zapytania, np. ?auth_code=AfGlvs9. Aby wymagać kodu autoryzacji w nagłówku HTTP, ustaw np. tę wartość na request.header.auth_code. Zobacz też Prośba o tokeny dostępu i kody autoryzacji.

Domyślnie:

request.formparam.code (x-www-form-urlencoded i określony w treści żądania)

Obecność:

opcjonalnie

Typ: Ciąg znaków
Prawidłowe wartości: Każda zmienna przepływu dostępna dla zasad w czasie działania
Używane z typami przyznania dostępu: authorization_code

Element <ExpiresIn>

<ExpiresIn>10000</ExpiresIn>

Wymusza czas wygaśnięcia tokenów dostępu i kodów autoryzacji w milisekundach. (W przypadku tokenów odświeżania użyj <RefreshTokenExpiresIn>). Wartość czasu wygaśnięcia to wartość wygenerowana przez system plus wartość <ExpiresIn>. Jeśli wartość parametru <ExpiresIn> to -1, token lub kod wygasa zgodnie z maksymalnym czasem wygaśnięcia tokena dostępu OAuth. Jeśli nie podasz wartości <ExpiresIn>, system zastosuje wartość domyślną skonfigurowaną na poziomie systemu.

Czas wygaśnięcia można też ustawić w czasie działania, używając zakodowanej na stałe wartości domyślnej lub odwołując się do zmiennej przepływu. Możesz na przykład zapisać wartość wygaśnięcia tokena w mapie par klucz-wartość, pobrać ją, przypisać do zmiennej i odwołać się do niej w zasadach. Na przykład: kvm.oauth.expires_in.

W przypadku Apigee Edge na platformie chmury publicznej Edge przechowuje w pamięci podręcznej te elementy przez co najmniej 180 sekund od momentu uzyskania do nich dostępu.

  • tokeny dostępu OAuth, Oznacza to, że odwołany token może być nadal ważny przez maksymalnie 3 minuty, dopóki nie wygaśnie limit pamięci podręcznej.
  • podmioty usługi Key Management Service (KMS) (aplikacje, programiści, usługi API);
  • Atrybuty niestandardowe tokenów OAuth i encji KMS.

Ten fragment kodu określa zmienną przepływu i wartość domyślną. Pamiętaj, że wartość zmiennej przepływu ma pierwszeństwo przed określoną wartością domyślną.

<ExpiresIn ref="kvm.oauth.expires_in">
    3600000 <!--default value in milliseconds-->
</ExpiresIn>

Edge nie obsługuje wymuszania wygaśnięcia tokena po jego utworzeniu. Jeśli musisz wymusić wygaśnięcie tokena (np. na podstawie warunku), możliwe rozwiązanie opisano w  tym poście na forum społeczności Apigee.

Domyślnie wygasłe tokeny dostępu są automatycznie usuwane z systemu Apigee Edge po 3 dniach od wygaśnięcia. Zobacz też Usuwanie tokenów dostępu

Private Cloud: w przypadku instalacji Edge for Private Cloud wartość domyślna jest określana przez właściwość conf_keymanagement_oauth_auth_code_expiry_time_in_millis. Aby ustawić tę właściwość:

  1. Otwórz plik message-processor.properties w edytorze. Jeśli plik nie istnieje, utwórz go:
    vi /opt/apigee/customer/application/message-processor.properties
  2. Ustaw właściwość w odpowiedni sposób:
    conf_keymanagement_oauth_auth_code_expiry_time_in_millis=3600000
  3. Sprawdź, czy plik właściwości należy do użytkownika „apigee”:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  4. Uruchom ponownie procesor wiadomości.
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Domyślnie:

Jeśli nie zostanie określona, system zastosuje wartość domyślną skonfigurowaną na poziomie systemu.

Obecność:

Opcjonalny

Typ: Liczba całkowita
Prawidłowe wartości:
Używane z typami przyznania dostępu:
  • authorization_code
  • niejawny,
  • hasło
  • client_credentials
  • refresh_token

Używany też w operacji GenerateAuthorizationCode.

Element <ExternalAccessToken>

<ExternalAccessToken>request.queryparam.external_access_token</ExternalAccessToken>

Informuje Apigee Edge, gdzie znaleźć zewnętrzny token dostępu (token dostępu, który nie został wygenerowany przez Apigee Edge).

Zmienna request.queryparam.external_access_token oznacza, że zewnętrzny token dostępu powinien być obecny jako parametr zapytania, np. ?external_access_token=12345678. Aby wymagać zewnętrznego tokena dostępu w nagłówku HTTP, ustaw na przykład tę wartość na request.header.external_access_token. Zobacz też Korzystanie z tokenów OAuth innych firm.

Element <ExternalAuthorization>

<ExternalAuthorization>true</ExternalAuthorization>

Jeśli ten element ma wartość false lub nie występuje, Edge weryfikuje identyfikator klienta i klucz tajny klienta w normalny sposób w magazynie autoryzacji Apigee Edge. Użyj tego elementu, jeśli chcesz pracować z tokenami OAuth innych firm. Więcej informacji o korzystaniu z tego elementu znajdziesz w artykule Korzystanie z tokenów OAuth innych firm.

Domyślnie:

fałsz

Obecność:

Opcjonalny

Typ: Wartość logiczna
Prawidłowe wartości: prawda lub fałsz
Używane z typami przyznania dostępu:
  • authorization_code
  • hasło
  • client_credentials

Element <ExternalAuthorizationCode>

<ExternalAuthorizationCode>request.queryparam.external_auth_code</ExternalAuthorizationCode>

Określa, gdzie Apigee Edge ma szukać zewnętrznego kodu autoryzacji (kodu autoryzacji, który nie został wygenerowany przez Apigee Edge).

Zmienna request.queryparam.external_auth_code oznacza, że zewnętrzny kod autoryzacji powinien być obecny jako parametr zapytania, np. ?external_auth_code=12345678. Aby wymagać kodu autoryzacji zewnętrznej w nagłówku HTTP, ustaw na przykład tę wartość na request.header.external_auth_code. Zobacz też Korzystanie z tokenów OAuth innych firm.

Element <ExternalRefreshToken>

<ExternalRefreshToken>request.queryparam.external_refresh_token</ExternalRefreshToken>

Informuje Apigee Edge, gdzie znaleźć zewnętrzny token odświeżania (token odświeżania, który nie został wygenerowany przez Apigee Edge).

Zmienna request.queryparam.external_refresh_token oznacza, że zewnętrzny token odświeżania powinien być obecny jako parametr zapytania, np. ?external_refresh_token=12345678. Aby wymagać zewnętrznego tokena odświeżania w nagłówku HTTP, ustaw na przykład tę wartość na request.header.external_refresh_token. Zobacz też Korzystanie z tokenów OAuth innych firm.

Element <GenerateResponse>

<GenerateResponse enabled='true'/>

Jeśli ta opcja ma wartość true, zasada generuje i zwraca odpowiedź. Na przykład w przypadku GenerateAccessToken odpowiedź może wyglądać tak:

{
  "issued_at" : "1467841035013",
  "scope" : "read",
  "application_name" : "e31b8d06-d538-4f6b-9fe3-8796c11dc930",
  "refresh_token_issued_at" : "1467841035013",
  "status" : "approved",
  "refresh_token_status" : "approved",
  "api_product_list" : "[Product1, nhl_product]",
  "expires_in" : "1799",
  "developer.email" : "edward@slalom.org",
  "token_type" : "BearerToken",
  "refresh_token" : "rVSmm3QaNa0xBVFbUISz1NZI15akvgLJ",
  "client_id" : "Adfsdvoc7KX5Gezz9le745UEql5dDmj",
  "access_token" : "AnoHsh2oZ6EFWF4h0KrA0gC5og3a",
  "organization_name" : "cerruti",
  "refresh_token_expires_in" : "0",
  "refresh_count" : "0"
}

Jeśli false, nie zostanie wysłana żadna odpowiedź. Zamiast tego zestaw zmiennych przepływu jest wypełniany wartościami związanymi z funkcją zasady. Na przykład zmienna przepływu o nazwie oauthv2authcode.OAuthV2-GenerateAuthorizationCode.code zostanie wypełniona nowo wygenerowanym kodem autoryzacji. Pamiętaj, że w odpowiedzi wartość expires_in jest podana w sekundach.

Domyślnie:

fałsz

Obecność:

Opcjonalny

Typ: ciąg znaków
Prawidłowe wartości: prawda lub fałsz
Używane z typami przyznania dostępu:
  • niejawny,
  • hasło
  • client_credentials
  • refresh_token
  • Może być też używany w przypadku operacji GenerateAuthorizationCode.

Element <GenerateErrorResponse>

<GenerateErrorResponse enabled='true'/>

Jeśli zasada ma wartość true, generuje i zwraca odpowiedź, jeśli atrybut ContinueOnError ma wartość true. Jeśli false (wartość domyślna), nie jest wysyłana żadna odpowiedź. Zamiast tego zestaw zmiennych przepływu jest wypełniany wartościami związanymi z funkcją zasady.

Domyślnie:

fałsz

Obecność:

Opcjonalny

Typ: ciąg znaków
Prawidłowe wartości: prawda lub fałsz
Używane z typami przyznania dostępu:
  • niejawny,
  • hasło
  • client_credentials
  • refresh_token
  • Może być też używany w przypadku operacji GenerateAuthorizationCode.

<GrantType>

<GrantType>request.queryparam.grant_type</GrantType>

Informuje zasadę, gdzie znaleźć parametr typu uprawnień przekazywany w żądaniu. Zgodnie ze specyfikacją OAuth 2.0 typ przyznania musi być podawany w żądaniach tokenów dostępu i kodów autoryzacji. Zmienna może być nagłówkiem, parametrem zapytania lub parametrem formularza (domyślnie).

Na przykład request.queryparam.grant_type oznacza, że hasło powinno być obecne jako parametr zapytania, np. ?grant_type=password. Aby wymagać typu przyznania w nagłówku HTTP, ustaw np. tę wartość na request.header.grant_type. Zobacz też Prośba o tokeny dostępu i kody autoryzacji.

Domyślnie:

request.formparam.grant_type (x-www-form-urlencoded i określony w treści żądania)

Obecność:

Opcjonalny

Typ: ciąg znaków
Prawidłowe wartości: zmienna, jak wyjaśniliśmy powyżej;
Używane z typami przyznania dostępu:
  • authorization_code
  • hasło
  • niejawny,
  • client_credentials
  • refresh_token

Element <Operation>

<Operation>GenerateAuthorizationCode</Operation>

Operacja OAuth 2.0 wykonana przez zasadę.

Domyślnie:

Jeśli nie podasz wartości <Operation>, Edge sprawdzi listę <SupportedGrantTypes>. Tylko operacje na tych typach przyznawania uprawnień będą się kończyć powodzeniem. Innymi słowy, możesz pominąć <Operation>, jeśli określisz <GrantType><SupportedGrantTypes>. Jeśli nie określono wartości <Operation> ani <SupportedGrantTypes>, domyślny typ uwierzytelnienia to authorization_code. Oznacza to, że żądania typu grantu authorization_code będą się kończyć powodzeniem, ale wszystkie inne będą się kończyć niepowodzeniem.

Obecność:

Opcjonalny

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

Element <PassWord>

<PassWord>request.queryparam.password</PassWord>

Ten element jest używany tylko z  typem uwierzytelnienia password. W przypadku typu przyznania hasła dane logowania użytkownika (hasło i nazwa użytkownika) muszą być dostępne dla zasady OAuthV2. Elementy <PassWord><UserName> służą do określania zmiennych, w których Edge może znaleźć te wartości. Jeśli te elementy nie są określone, zasada oczekuje, że wartości (domyślnie) będą znajdować się w parametrach formularza o nazwach usernamepassword. Jeśli wartości nie zostaną znalezione, zasada zgłosi błąd. Możesz użyć elementów <PassWord><UserName>, aby odwołać się do dowolnej zmiennej przepływu zawierającej dane logowania.

Możesz na przykład przekazać hasło w żądaniu tokena za pomocą parametru zapytania i ustawić element w ten sposób: <PassWord>request.queryparam.password</PassWord>.. Aby wymagać hasła w nagłówku HTTP, ustaw tę wartość na request.header.password.

Zasada OAuthV2 nie wykonuje żadnych innych działań z tymi wartościami danych logowania. Edge po prostu sprawdza, czy są one obecne. To deweloper interfejsu API musi pobrać wartości żądania i przesłać je do dostawcy tożsamości przed wykonaniem zasady generowania tokena.

Zobacz też Prośba o tokeny dostępu i kody autoryzacji.

Domyślnie:

request.formparam.password (zakodowany w formacie x-www-form-urlencoded i określony w treści żądania)

Obecność:

Opcjonalny

Typ: Ciąg znaków
Prawidłowe wartości: Każda zmienna przepływu dostępna dla zasad w czasie działania.
Używane z typami przyznania dostępu: hasło

Element <RedirectUri>

<RedirectUri>request.queryparam.redirect_uri</RedirectUri>

Określa, gdzie Edge ma szukać parametru redirect_uri w żądaniu.

Informacje o identyfikatorach URI przekierowania

Identyfikatory URI przekierowania są używane z typami uwierzytelnienia kod autoryzacji i niejawne. Identyfikator URI przekierowania informuje serwer autoryzacji (Edge), gdzie wysłać kod autoryzacji (w przypadku typu przyznawania kodu autoryzacji) lub token dostępu (w przypadku typu przyznawania pośredniego). Warto wiedzieć, kiedy ten parametr jest wymagany, kiedy jest opcjonalny i jak jest używany:

  • (wymagany) Jeśli w aplikacji dewelopera powiązanej z kluczami klienta żądania zarejestrowany jest adres URL wywołania zwrotnego i jeśli w żądaniu występuje parametr redirect_uri, oba muszą być identyczne. Jeśli nie pasują, zwracany jest błąd. Informacje o rejestrowaniu aplikacji deweloperskich w Edge i określaniu adresu URL wywołania zwrotnego znajdziesz w artykule Rejestrowanie aplikacji i zarządzanie kluczami interfejsu API.

  • (opcjonalnie) Jeśli zarejestrowany jest adres URL wywołania zwrotnego, a w żądaniu brakuje parametru redirect_uri, Edge przekierowuje do zarejestrowanego adresu URL wywołania zwrotnego.
  • (wymagany) Jeśli adres URL wywołania zwrotnego nie jest zarejestrowany, wymagany jest parametr redirect_uri. Pamiętaj, że w tym przypadku Edge zaakceptuje KAŻDY adres URL. W tym przypadku może wystąpić problem z bezpieczeństwem, dlatego należy go używać tylko w przypadku zaufanych aplikacji klienckich. Jeśli aplikacje klienckie nie są zaufane, najlepszym rozwiązaniem jest zawsze wymaganie rejestracji adresu URL wywołania zwrotnego.

Ten parametr możesz wysłać w parametrze zapytania lub w nagłówku. Zmienna request.queryparam.redirect_uri oznacza, że parametr RedirectUri powinien występować jako parametr zapytania, np. ?redirect_uri=login.myapp.com. Aby wymagać parametru RedirectUri w nagłówku HTTP, ustaw na przykład tę wartość na request.header.redirect_uri. Zobacz też Prośba o tokeny dostępu i kody autoryzacji.

Domyślnie:

request.formparam.redirect_uri (x-www-form-urlencoded i określony w treści żądania)

Obecność:

Opcjonalny

Typ: Ciąg znaków
Prawidłowe wartości: Każda zmienna przepływu dostępna w zasadach w czasie działania
Używane z typami przyznania dostępu:
  • authorization_code
  • niejawny,

Używany też w operacji GenerateAuthorizationCode.

Element <RefreshToken>

<RefreshToken>request.queryparam.refreshtoken</RefreshToken>

Gdy prosisz o token dostępu za pomocą tokena odświeżania, musisz podać token odświeżania w żądaniu. Ten element umożliwia określenie, gdzie Edge ma szukać tokena odświeżania. Może być na przykład wysyłany jako parametr zapytania, nagłówek HTTP lub parametr formularza (domyślnie).

Zmienna request.queryparam.refreshtoken oznacza, że token odświeżania powinien być obecny jako parametr zapytania, np. ?refresh_token=login.myapp.com. Aby wymagać tokenu odświeżania w nagłówku HTTP, ustaw na przykład tę wartość na request.header.refresh_token. Zobacz też Prośba o tokeny dostępu i kody autoryzacji.

Domyślnie:

request.formparam.refresh_token (x-www-form-urlencoded i określony w treści żądania)

Obecność:

Opcjonalny

Typ: Ciąg znaków
Prawidłowe wartości: Każda zmienna przepływu dostępna w zasadach w czasie działania
Używane z typami przyznania dostępu:
  • refresh_token

Element <RefreshTokenExpiresIn>

<RefreshTokenExpiresIn>1000</RefreshTokenExpiresIn>

Wymusza czas wygaśnięcia tokenów odświeżania w milisekundach. Wartość czasu wygaśnięcia to wartość wygenerowana przez system plus wartość <RefreshTokenExpiresIn>. Jeśli wartość parametru <RefreshTokenExpiresIn> to -1, token odświeżania wygasa zgodnie z maksymalnym czasem ważności tokena odświeżania OAuth. Jeśli nie podasz wartości <RefreshTokenExpiresIn>, system zastosuje wartość domyślną skonfigurowaną na poziomie systemu. Aby uzyskać więcej informacji o domyślnych ustawieniach systemu, skontaktuj się z zespołem pomocy Apigee Edge.

Czas wygaśnięcia można też ustawić w czasie działania, używając zakodowanej na stałe wartości domyślnej lub odwołując się do zmiennej przepływu. Możesz na przykład zapisać wartość wygaśnięcia tokena w mapie par klucz-wartość, pobrać ją, przypisać do zmiennej i odwołać się do niej w zasadach. Na przykład: kvm.oauth.expires_in.

Ten fragment kodu określa zmienną przepływu i wartość domyślną. Pamiętaj, że wartość zmiennej flow ma pierwszeństwo przed określoną wartością domyślną.

<RefreshTokenExpiresIn ref="kvm.oauth.expires_in">
    3600000 <!--default value in milliseconds-->
</RefreshTokenExpiresIn>

Private Cloud: w przypadku instalacji Edge for Private Cloud wartość domyślna jest określana przez właściwość conf_keymanagement_oauth_refresh_token_expiry_time_in_millis. Aby ustawić tę właściwość:

  1. Otwórz plik message-processor.properties w edytorze. Jeśli plik nie istnieje, utwórz go:
    vi /opt/apigee/customer/application/message-processor.properties
  2. Ustaw właściwość w odpowiedni sposób:
    conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
  3. Sprawdź, czy plik właściwości należy do użytkownika „apigee”:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  4. Uruchom ponownie procesor wiadomości.
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Domyślnie:

63072000000 ms (2 lata) (data wejścia w życie: 5 sierpnia 2024 r.)

Obecność:

Opcjonalny

Typ: Liczba całkowita
Prawidłowe wartości:
Używane z typami przyznania dostępu:
  • authorization_code
  • hasło
  • refresh_token

Element <ResponseType>

<ResponseType>request.queryparam.response_type</ResponseType>

Ten element informuje Edge, o jaki typ uprawnień prosi aplikacja kliencka. Jest on używany tylko w przypadku przepływów kodu autoryzacji i niejawnego udzielania dostępu.

Domyślnie Edge szuka wartości typu odpowiedzi w parametrze zapytania response_type. Jeśli chcesz zastąpić to domyślne działanie, użyj elementu <ResponseType>, aby skonfigurować zmienną przepływu zawierającą wartość typu odpowiedzi. Jeśli na przykład ustawisz ten element na request.header.response_type, Edge będzie szukać typu odpowiedzi przekazywanego w nagłówku żądania. Zobacz też Prośba o tokeny dostępu i kody autoryzacji.

Domyślnie:

request.formparam.response_type (x-www-form-urlencoded i określony w treści żądania)

Obecność:

Opcjonalnie: Użyj tego elementu, jeśli chcesz zastąpić działanie domyślne.

Typ: Ciąg znaków
Prawidłowe wartości: code (w przypadku typu uwierzytelnienia kod autoryzacji) lub token (w przypadku typu uwierzytelnienia pośredniego).
Używane z typami przyznania dostępu:
  • niejawny,
  • Używany też w operacji GenerateAuthorizationCode.

Element <ReuseRefreshToken>

<ReuseRefreshToken>true</ReuseRefreshToken>

Gdy ta wartość jest ustawiona na true, dotychczasowy token odświeżania jest używany ponownie do momentu wygaśnięcia. Jeśli false, Apigee Edge wydaje nowy token odświeżania, gdy zostanie przedstawiony prawidłowy token odświeżania.

Domyślnie:

false

Obecność:

opcjonalnie

Typ: Wartość logiczna
Prawidłowe wartości:

true lub false

Używany z typem przyznania dostępu:
  • refresh_token

Element <Scope>

<Scope>request.queryparam.scope</Scope>

Jeśli ten element występuje w jednej z zasad GenerateAccessToken lub GenerateAuthorizationCode, służy do określania zakresów, które mają być przyznane tokenowi lub kodowi. Te wartości są zwykle przekazywane do zasady w żądaniu z aplikacji klienckiej. Możesz skonfigurować element tak, aby przyjmował zmienną przepływu, co daje Ci możliwość wyboru sposobu przekazywania zakresów w żądaniu. W tym przykładzie request.queryparam.scope oznacza, że zakres powinien być obecny jako parametr zapytania, np. ?scope=READ. Aby wymagać zakresu w nagłówku HTTP, ustaw na przykład tę wartość na request.header.scope.

Jeśli ten element występuje w zasadzie „VerifyAccessToken”, służy do określania zakresów, które mają być egzekwowane przez zasadę. W przypadku tego typu zasady wartość musi być „zakodowaną na stałe” nazwą zakresu – nie można używać zmiennych. Na przykład:

<Scope>A B</Scope>

Zobacz też Praca z zakresami OAuth2 oraz Żądanie tokenów dostępu i kodów autoryzacji.

Domyślnie:

Brak zakresu

Obecność:

Opcjonalny

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

Jeśli jest używana z zasadami Generate*, zmienna przepływu.

Jeśli jest używana z funkcją VerifyAccessToken, jest to rozdzielana spacjami lista nazw zakresów (ciągów znaków).

Używane z typami przyznania dostępu:
  • authorization_code
  • niejawny,
  • hasło
  • client_credentials
  • Można go też używać w przypadku operacji GenerateAuthorizationCode i VerifyAccessToken.

Element <State>

<State>request.queryparam.state</State>

W przypadkach, gdy aplikacja kliencka musi wysłać informacje o stanie do serwera autoryzacji, ten element umożliwia określenie, gdzie Edge ma szukać wartości stanu. Może być na przykład wysyłany jako parametr zapytania lub w nagłówku HTTP. Wartość stanu jest zwykle używana jako środek bezpieczeństwa zapobiegający atakom CSRF.

Na przykład request.queryparam.state oznacza, że stan powinien być obecny jako parametr zapytania, np. ?state=HjoiuKJH32. Aby wymagać stanu w nagłówku HTTP, ustaw na przykład tę wartość na request.header.state. Zobacz też Żądanie tokenów dostępu i kodów autoryzacji.

Domyślnie:

Brak stanu

Obecność:

Opcjonalny

Typ: Ciąg znaków
Prawidłowe wartości: Każda zmienna przepływu dostępna dla zasad w czasie działania
Używane z typami przyznania dostępu:
  • Wszystkie
  • Może być też używana z operacją GenerateAuthorizationCode.

Element <StoreToken>

 <StoreToken>true</StoreToken>

Ustaw ten element na true, gdy element <ExternalAuthorization> jest true. Element <StoreToken> informuje Apigee Edge, że ma przechowywać zewnętrzny token dostępu. W przeciwnym razie nie zostanie on zachowany.

Domyślnie:

fałsz

Obecność:

Opcjonalny

Typ: Wartość logiczna
Prawidłowe wartości: prawda lub fałsz
Używane z typami przyznania dostępu:
  • authorization_code
  • hasło
  • client_credentials

Element <SupportedGrantTypes>/<GrantType>

<SupportedGrantTypes>
    <GrantType>authorization_code</GrantType>
    <GrantType>client_credentials</GrantType>
    <GrantType>implicit</GrantType>
    <GrantType>password</GrantType>
</SupportedGrantTypes>

Określa typy przyznawania obsługiwane przez punkt końcowy tokena OAuth w Apigee Edge. Punkt końcowy może obsługiwać wiele typów autoryzacji (czyli jeden punkt końcowy można skonfigurować tak, aby rozpowszechniał tokeny dostępu dla wielu typów autoryzacji). Więcej informacji o punktach końcowych znajdziesz w artykule Omówienie punktów końcowych OAuth. Typ uprawnień jest przekazywany w żądaniach tokena w parametrze grant_type.

Jeśli nie określono żadnych obsługiwanych typów uwierzytelnienia, dozwolone są tylko typy authorization_codeimplicit. Zobacz też element <GrantType> (element wyższego poziomu, który służy do określania, gdzie Apigee Edge ma szukać parametru grant_type przekazywanego w żądaniu klienta). Edge sprawdzi, czy wartość parametru grant_type jest zgodna z jednym z obsługiwanych typów autoryzacji.

Domyślnie:

authorization_code i implicit

Obecność:

Wymagane

Typ: Ciąg znaków
Prawidłowe wartości:
  • client_credentials
  • authorization_code
  • hasło
  • niejawny,

Element <Tokens>/<Token>

Używane w operacjach ValidateToken i InvalidateToken. Zobacz też zatwierdzanie i unieważnianie tokenów dostępu. Element <Token> identyfikuje zmienną przepływu, która definiuje źródło tokena do unieważnienia. Jeśli deweloperzy mają przesyłać tokeny dostępu jako parametry zapytania o nazwie np. access_token, użyj request.queryparam.access_token.

Element <UserName>

<UserName>request.queryparam.user_name</UserName>

Ten element jest używany tylko z  typem uwierzytelnienia password. W przypadku typu przyznania hasła dane logowania użytkownika (hasło i nazwa użytkownika) muszą być dostępne dla zasady OAuthV2. Elementy <PassWord><UserName> służą do określania zmiennych, w których Edge może znaleźć te wartości. Jeśli te elementy nie są określone, zasada oczekuje, że wartości (domyślnie) będą znajdować się w parametrach formularza o nazwach usernamepassword. Jeśli wartości nie zostaną znalezione, zasada zgłosi błąd. Możesz użyć elementów <PassWord><UserName>, aby odwołać się do dowolnej zmiennej przepływu zawierającej dane logowania.

Możesz na przykład przekazać nazwę użytkownika w parametrze zapytania i ustawić element <UserName> w ten sposób:<UserName>request.queryparam.username</UserName>.Aby wymagać nazwy użytkownika w nagłówku HTTP, ustaw tę wartość na request.header.username.

Zasada OAuthV2 nie wykonuje żadnych innych działań z tymi wartościami danych logowania. Edge po prostu sprawdza, czy są one obecne. To deweloper interfejsu API musi pobrać wartości żądania i przesłać je do dostawcy tożsamości przed wykonaniem zasady generowania tokena.

Zobacz też Prośba o tokeny dostępu i kody autoryzacji.

Domyślnie:

request.formparam.username (x-www-form-urlencoded i określony w treści żądania)

Obecność:

Opcjonalny

Typ: Ciąg znaków
Prawidłowe wartości: Dowolne ustawienie zmiennej.
Używane z typami przyznania dostępu: hasło

Weryfikowanie tokenów dostępu

Gdy dla serwera proxy interfejsu API skonfigurujesz punkt końcowy tokena, do przepływu, który udostępnia chroniony zasób, zostanie dołączona odpowiednia zasada OAuthV2 określająca operację VerifyAccessToken.

Aby na przykład mieć pewność, że wszystkie żądania do interfejsu API są autoryzowane, ta zasada wymusza weryfikację tokena dostępu:

<OAuthV2 name="VerifyOAuthAccessToken">
  <Operation>VerifyAccessToken</Operation>
</OAuthV2>

Zasada jest połączona z zasobem interfejsu API, który ma być chroniony. Aby mieć pewność, że wszystkie żądania do interfejsu API są weryfikowane, dołącz zasadę do elementu PreFlow żądania ProxyEndpoint w ten sposób:

<PreFlow>
  <Request>
    <Step><Name>VerifyOAuthAccessToken</Name></Step>
  </Request>
</PreFlow>

Te opcjonalne elementy mogą służyć do zastępowania ustawień domyślnych operacji VerifyAccessToken.

Nazwa Opis
Zakres

Lista zakresów rozdzielonych spacjami. Weryfikacja zakończy się powodzeniem, jeśli token dostępu będzie zawierać co najmniej jeden z wymienionych zakresów. Na przykład te zasady sprawdzą token dostępu, aby upewnić się, że zawiera on co najmniej jeden z wymienionych zakresów. Jeśli występuje READ lub WRITE, weryfikacja się powiedzie.

<OAuthV2 name="ValidateOauthScopePolicy">
  <Operation>VerifyAccessToken</Operation>
  <Scope>READ WRITE</Scope>
</OAuthV2>
AccessToken Zmienna, w której powinien znajdować się token dostępu. Na przykład:request.queryparam.accesstoken. Domyślnie token dostępu powinien być przekazywany przez aplikację w nagłówku HTTP Authorization zgodnie ze specyfikacją OAuth 2.0. Użyj tego ustawienia, jeśli token dostępu ma być prezentowany w niestandardowym miejscu, np. w parametrze zapytania lub w nagłówku HTTP o nazwie innej niż Authorization.

Zobacz też weryfikowanie tokenów dostępuwysyłanie próśb o tokeny dostępu i kody autoryzacji.

Określanie lokalizacji zmiennych żądania

W przypadku każdego typu przyznawania uprawnień zasady zakładają, że w wiadomościach z prośbą o przyznanie uprawnień znajdują się określone informacje lub lokalizacja. Te założenia są oparte na specyfikacji OAuth 2.0. Jeśli Twoje aplikacje muszą odbiegać od specyfikacji OAuth 2.0, możesz określić oczekiwane lokalizacje każdego parametru. Na przykład podczas obsługi kodu autoryzacji możesz określić jego lokalizację, identyfikator klienta, identyfikator URI przekierowania i zakres. Można je określić jako nagłówki HTTP, parametry zapytania lub parametry formularza.

Poniższy przykład pokazuje, jak możesz określić lokalizację wymaganych parametrów kodu autoryzacji jako nagłówki HTTP:

  ...
  <GrantType>request.header.grant_type</GrantType>
  <Code>request.header.code</Code>
  <ClientId>request.header.client_id</ClientId>
  <RedirectUri>request.header.redirect_uri</RedirectUri>
  <Scope>request.header.scope</Scope>
  ...

W razie potrzeby możesz też łączyć nagłówki i parametry zapytania, aby obsługiwać bazę aplikacji klienckich:

  ...
  <GrantType>request.header.grant_type</GrantType>
  <Code>request.header.code</Code>
  <ClientId>request.queryparam.client_id</ClientId>
  <RedirectUri>request.queryparam.redirect_uri</RedirectUri>
  <Scope>request.queryparam.scope</Scope>
  ...

Każdy parametr może mieć tylko 1 skonfigurowaną lokalizację.

Zmienne przepływu

Zmienne przepływu zdefiniowane w tej tabeli są wypełniane po wykonaniu odpowiednich zasad OAuth, a tym samym są dostępne dla innych zasad lub aplikacji wykonywanych w przepływie serwera proxy interfejsu API.

Operacja VerifyAccessToken

Wykonuje się operacja VerifyAccessToken, a w kontekście wykonania serwera proxy wypełnia się duża liczba zmiennych przepływu. Te zmienne zawierają właściwości związane z tokenem dostępu, aplikacją dewelopera, deweloperem i firmą. Możesz na przykład użyć zasady AssignMessage lub JavaScript, aby odczytać dowolną z tych zmiennych i użyć jej w razie potrzeby w dalszej części przepływu. Te zmienne mogą być też przydatne do debugowania.

Zmienne związane z tokenem

Zmienne Opis
organization_name Nazwa organizacji, w której działa serwer proxy.
developer.id Identyfikator dewelopera powiązany z zarejestrowaną aplikacją klienta.
developer.app.name Nazwa dewelopera powiązanego z zarejestrowaną aplikacją klienta.
client_id Identyfikator klienta zarejestrowanej aplikacji klienta.
grant_type Typ autoryzacji powiązany z żądaniem.
token_type Typ tokena powiązany z żądaniem.
access_token Token dostępu, który jest weryfikowany.
accesstoken.{custom_attribute} Nazwany atrybut niestandardowy w tokenie dostępu.
issued_at Data wystawienia tokena dostępu podana jako czas uniksowy w milisekundach.
expires_in Okres ważności tokena dostępu. Wyrażony w sekundach. Chociaż element ExpiresIn ustawia czas wygaśnięcia w milisekundach, w odpowiedzi tokena i zmiennych przepływu wartość jest wyrażona w sekundach.
status Stan tokena dostępu (np. zatwierdzony lub unieważniony).
scope Zakres (jeśli jest stosowany) powiązany z tokenem dostępu.
apiproduct.<custom_attribute_name> Nazwany atrybut niestandardowy usługi API powiązanej z zarejestrowaną aplikacją klienta.
apiproduct.name Nazwa usługi API powiązanej z zarejestrowaną aplikacją klienta.
revoke_reason

(Tylko Apigee Hybrid) Wskazuje, dlaczego token dostępu został unieważniony.

Wartość może wynosić REVOKED_BY_APP, REVOKED_BY_ENDUSER, REVOKED_BY_APP_ENDUSER lub TOKEN_REVOKED.

Zmienne specyficzne dla aplikacji

Te zmienne są powiązane z aplikacją dewelopera, która jest powiązana z tokenem.

Zmienne Opis
app.name
app.id
app.accessType
app.callbackUrl
app.status zatwierdzona lub cofnięta.
app.scopes
app.appFamily
app.apiproducts
app.appParentStatus
app.appType Na przykład: Deweloper
app.appParentId
app.created_by
app.created_at
app.last_modified_at
app.last_modified_by
app.{custom_attributes} Nazwany atrybut niestandardowy zarejestrowanej aplikacji klienta.

Zmienne specyficzne dla dewelopera

Jeśli app.appType ma wartość „Company”, wypełniane są atrybuty firmy, a jeśli app.appType ma wartość „Developer”, wypełniane są atrybuty dewelopera.

Zmienne Opis
Zmienne specyficzne dla dewelopera
developer.id
developer.userName
developer.firstName
developer.lastName
developer.email
developer.status aktywny lub nieaktywny,
developer.apps
developer.created_by
developer.created_at
developer.last_modified_at
developer.last_modified_by
developer.{custom_attributes} Nazwany atrybut niestandardowy dewelopera.

Zmienne dotyczące firmy

Jeśli app.appType ma wartość „Company”, wypełniane są atrybuty firmy, a jeśli app.appType ma wartość „Developer”, wypełniane są atrybuty dewelopera.

Zmienne Opis
company.id
company.displayName
company.apps
company.appOwnerStatus
company.created_by
company.created_at
company.last_modified_at
company.last_modified_by
company.{custom_attributes} Nazwany atrybut niestandardowy firmy.

Operacja GenerateAuthorizationCode

Te zmienne są ustawiane, gdy operacja GenerateAuthorizationCode zostanie wykonana:

Prefiks: oauthv2authcode.{policy_name}.{variable_name}

Przykład: oauthv2authcode.GenerateCodePolicy.code

Zmienna Opis
code Kod autoryzacji wygenerowany podczas wykonywania zasady.
redirect_uri Identyfikator URI przekierowania powiązany z zarejestrowaną aplikacją kliencką.
scope Opcjonalny zakres OAuth przekazany w żądaniu klienta.
client_id Identyfikator klienta przekazany w żądaniu klienta.

operacje GenerateAccessToken i RefreshAccessToken,

Te zmienne są ustawiane, gdy operacje GenerateAccessToken i RefreshAccessToken zostaną wykonane prawidłowo. Pamiętaj, że zmienne tokena odświeżania nie mają zastosowania w przypadku przepływu typu przyznawania danych uwierzytelniających klienta.

Prefiks: oauthv2accesstoken.{policy_name}.{variable_name}

Przykład: oauthv2accesstoken.GenerateTokenPolicy.access_token

Nazwa zmiennej Opis
access_token Wygenerowany token dostępu.
client_id Identyfikator klienta aplikacji dewelopera powiązanej z tym tokenem.
expires_in Wartość wygaśnięcia tokena. Szczegółowe informacje znajdziesz w opisie elementu <ExpiresIn>. Zwróć uwagę, że w odpowiedzi wartość expires_in jest podana w sekundach.
scope Lista dostępnych zakresów skonfigurowanych dla tokena. Zobacz Praca z zakresami OAuth2.
status Może to być approved lub revoked.
token_type ma wartość BearerToken.
developer.email Adres e-mail zarejestrowanego dewelopera, który jest właścicielem aplikacji dewelopera powiązanej z tokenem.
organization_name Organizacja, w której działa serwer proxy.
api_product_list Lista usług powiązanych z odpowiednią aplikacją dewelopera, do której należy token.
refresh_count
refresh_token Wygenerowany token odświeżania. Pamiętaj, że w przypadku typu przyznawania uprawnień za pomocą danych logowania klienta tokeny odświeżania nie są generowane.
refresh_token_expires_in Okres ważności tokena odświeżania w sekundach.
refresh_token_issued_at Ta wartość czasu jest ciągiem znaków reprezentującym odpowiednią 32-bitową wartość znacznika czasu. Na przykład ciąg „Wed, 21 Aug 2013 19:16:47 UTC” odpowiada wartości sygnatury czasowej 1377112607413.
refresh_token_status Może to być approved lub revoked.

GenerateAccessTokenImplicitGrant

Te zmienne są ustawiane, gdy operacja GenerateAccessTokenImplicit zostanie wykonana prawidłowo w przypadku przepływu typu zezwolenia dorozumianego.

Prefiks: oauthv2accesstoken.{policy_name}.{variable_name}

Przykład: oauthv2accesstoken.RefreshTokenPolicy.access_token

Zmienna Opis
oauthv2accesstoken.access_token Token dostępu wygenerowany podczas wykonywania zasady.
oauthv2accesstoken.{policy_name}.expires_in Wartość wygaśnięcia tokena w sekundach. Szczegółowe informacje znajdziesz w elemencie <ExpiresIn>.

Odniesienie do błędów

W tej sekcji opisaliśmy kody błędów i komunikaty o błędach, które są zwracane, oraz zmienne błędów, które są ustawiane przez Edge, gdy ta zasada powoduje błąd. Te informacje są ważne, jeśli opracowujesz reguły dotyczące błędów, aby radzić sobie z błędami. Więcej informacji znajdziesz w artykułach Więcej informacji o błędach związanych z naruszeniem zasadRozwiązywanie problemów.

Błędy w czasie wykonywania

Te błędy mogą wystąpić podczas wykonywania zasady.

Kod błędu Stan HTTP Przyczyna Wyjątki zgłaszane przez operacje
steps.oauth.v2.access_token_expired 401 Token dostępu wygasł.

VerifyAccessToken
InvalidateToken

steps.oauth.v2.access_token_not_approved 401 Token dostępu został unieważniony. VerifyAccessToken
steps.oauth.v2.apiresource_doesnot_exist 401 Żądany zasób nie istnieje w żadnym z produktów interfejsu API powiązanych z tokenem dostępu. VerifyAccessToken
steps.oauth.v2.FailedToResolveAccessToken 500 Zasady oczekują znalezienia tokena dostępu w zmiennej określonej w elemencie <AccessToken>, ale nie udało się rozwiązać zmiennej. GenerateAccessToken
steps.oauth.v2.FailedToResolveAuthorizationCode 500 Polityka oczekiwała znalezienia kodu autoryzacji w zmiennej określonej w elemencie <Code>, ale nie udało się rozwiązać zmiennej. GenerateAuthorizationCode
steps.oauth.v2.FailedToResolveClientId 500 Zasady oczekują znalezienia identyfikatora klienta w zmiennej określonej w elemencie <ClientId>, ale nie udało się rozwiązać zmiennej. GenerateAccessToken
GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
RefreshAccessToken
steps.oauth.v2.FailedToResolveRefreshToken 500 Reguła oczekiwała znalezienia tokena odświeżania w zmiennej określonej w elemencie <RefreshToken>, ale nie udało się odnaleźć tej zmiennej. RefreshAccessToken
steps.oauth.v2.FailedToResolveToken 500 Zasady miały znaleźć token w zmiennej określonej w elemencie <Tokens>, ale nie udało się zinterpretować zmiennej.

ValidateToken
InvalidateToken

steps.oauth.v2.InsufficientScope 403 Token dostępu przedstawiony w żądaniu ma zakres, który nie jest zgodny z zakresem określonym w zasadach weryfikacji tokena dostępu. Więcej informacji o zakresie znajdziesz w artykule Praca z zakresami OAuth2. VerifyAccessToken
steps.oauth.v2.invalid_access_token 401 Token dostępu wysłany z klienta jest nieprawidłowy. VerifyAccessToken
steps.oauth.v2.invalid_client 401

Ta nazwa błędu jest zwracana, gdy właściwość <GenerateResponse> w zasadzie jest ustawiona na true, a identyfikator klienta wysłany w żądaniu jest nieprawidłowy. Sprawdź, czy używasz prawidłowego klucza klienta i wartości tajnego dla aplikacji dewelopera powiązanej z serwerem proxy. Zwykle te wartości są wysyłane jako nagłówek autoryzacji podstawowej zakodowany w formacie Base64.

Uwaga: zalecamy zmianę warunków istniejących reguł błędów, aby uwzględnić nazwy invalid_client i InvalidClientIdentifier. Więcej informacji i przykład znajdziesz w informacjach o wersji z 16 września 2021 r.

GenerateAccessToken
RefreshAccessToken
steps.oauth.v2.InvalidRequest 400 Ta nazwa błędu jest używana w przypadku wielu różnych rodzajów błędów, zwykle w przypadku braku lub nieprawidłowego wysłania parametrów w żądaniu. Jeśli <GenerateResponse> jest ustawiony na false, użyj zmiennych dotyczących błędów (opisanych poniżej), aby pobrać szczegóły dotyczące błędu, takie jak nazwa i przyczyna błędu. GenerateAccessToken
GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
RefreshAccessToken
steps.oauth.v2.InvalidAccessToken 401 W nagłówku autoryzacji brakuje słowa „Bearer”, które jest wymagane. Na przykład: Authorization: Bearer your_access_token VerifyAccessToken
steps.oauth.v2.InvalidAPICallAsNoApiProductMatchFound 401

Serwer proxy interfejsu API nie znajduje się w usłudze powiązanej z tokiem dostępu.

Wskazówki: sprawdź, czy produkt powiązany z tokenem dostępu jest prawidłowo skonfigurowany. Jeśli na przykład używasz symboli wieloznacznych w ścieżkach zasobów, sprawdź, czy są one używane prawidłowo. Więcej informacji znajdziesz w artykule Tworzenie usług API.

Więcej informacji o przyczynach tego błędu znajdziesz też w tym poście na forum społeczności Apigee.

VerifyAccessToken
steps.oauth.v2.InvalidClientIdentifier 500

Ta nazwa błędu jest zwracana, gdy parametr <GenerateResponse> w zasadach ma wartość fałsz, a identyfikator klienta wysłany w żądaniu jest nieprawidłowy. Sprawdź, czy używasz prawidłowego klucza klienta i wartości tajnego dla aplikacji dewelopera powiązanej z proxy. Zwykle te wartości są wysyłane jako zakodowany w formacie Base64 nagłówek podstawowej autoryzacji.

Uwaga: w tej sytuacji ten błąd był nazywany invalid_client. Zalecamy zmianę warunków istniejących reguł błędów, aby uwzględniały nazwy invalid_client i InvalidClientIdentifier. Więcej informacji i przykład znajdziesz w informacjach o wersji z 16 września 2021 r.

GenerateAccessToken
RefreshAccessToken

steps.oauth.v2.InvalidParameter 500 Zasady muszą określać albo token dostępu, albo kod autoryzacji, ale nie oba. GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
steps.oauth.v2.InvalidTokenType 500 Element <Tokens>/<Token> wymaga podania typu tokena (na przykład refreshtoken). Jeśli klient przekaże nieprawidłowy typ, zostanie zgłoszony ten błąd. ValidateToken
InvalidateToken
steps.oauth.v2.MissingParameter 500 Typ odpowiedzi to token, ale nie określono typów dotacji. GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
steps.oauth.v2.UnSupportedGrantType 500

Klient określił typ grantu, który nie jest obsługiwany przez zasady (nie jest wymieniony w elemencie <SupportedGrantTypes>).

Uwaga: występuje obecnie błąd, który powoduje, że błędy dotyczące nieobsługiwanych typów grantów nie są prawidłowo zgłaszane. Jeśli wystąpi błąd nieobsługiwanego typu grantu, serwer proxy nie przechodzi do oczekiwanego przepływu danych w przypadku błędu.

GenerateAccessToken
GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
RefreshAccessToken

Błędy wdrażania

Te błędy mogą wystąpić podczas wdrażania serwera proxy zawierającego tę zasadę.

Nazwa błędu Przyczyna
InvalidValueForExpiresIn

W przypadku elementu <ExpiresIn> prawidłowe wartości to dodatnie liczby całkowite i -1.

InvalidValueForRefreshTokenExpiresIn W przypadku elementu <RefreshTokenExpiresIn> prawidłowe wartości to dodatnie liczby całkowite i -1.
InvalidGrantType W elemencie <SupportedGrantTypes> podano nieprawidłowy typ uprawnień. Listę prawidłowych typów znajdziesz w dokumentacji zasad.
ExpiresInNotApplicableForOperation Upewnij się, że operacje określone w elemencie <Operations> obsługują wygaśnięcie. Na przykład operacja VerifyToken nie jest wywoływana.
RefreshTokenExpiresInNotApplicableForOperation Upewnij się, że operacje określone w elemencie <Operations> obsługują wygaśnięcie tokena odświeżania. Na przykład operacja VerifyToken nie jest wywoływana.
GrantTypesNotApplicableForOperation Upewnij się, że typy uprawnień określone w <SupportedGrantTypes> są obsługiwane w przypadku określonej operacji.
OperationRequired

W tej regule musisz określić operację za pomocą elementu <Operation>.

Uwaga: jeśli element <Operation> jest nieobecny, interfejs użytkownika zwraca błąd walidacji schematu.

InvalidOperation

W tych zasadach musisz określić prawidłową operację za pomocą elementu <Operation>.

Uwaga: jeśli element <Operation> jest nieprawidłowy, interfejs użytkownika zwraca błąd weryfikacji schematu.

TokenValueRequired W elemencie <Tokens> musisz podać wartość tokena <Token>.

Zmienne błędów

Te zmienne są ustawiane, gdy zasada powoduje błąd w czasie wykonywania.

Zmienne Gdzie Przykład
fault.name="fault_name" fault_name to nazwa błędu, jak podano w tabeli Błędy środowiska wykonawczego powyżej. Nazwa błędu to ostatni element kodu błędu. fault.name = "InvalidRequest"
oauthV2.policy_name.failed policy_name to nazwa zasady określona przez użytkownika, która spowodowała błąd. oauthV2.GenerateAccesstoken.failed = true
oauthV2.policy_name.fault.name policy_name to nazwa zasady określona przez użytkownika, która spowodowała błąd. oauthV2.GenerateAccesstoken.fault.name = InvalidRequest

Uwaga: w przypadku operacji VerifyAccessToken nazwa błędu zawiera ten przyrostek: keymanagement.service
Przykład: keymanagement.service.invalid_access_token

oauthV2.policy_name.fault.cause policy_name to nazwa zasady określona przez użytkownika, która spowodowała błąd. oauthV2.GenerateAccesstoken.cause = Required param : grant_type

Przykładowa odpowiedź na błąd

Te odpowiedzi są wysyłane z powrotem do klienta, jeśli element <GenerateResponse> ma wartość true.

Jeśli <GenerateResponse> ma wartość prawda, zasady zwracają błędy w tym formacie w przypadku operacji generujących tokeny i kody. Pełną listę znajdziesz w artykule Przewodnik po odpowiedziach HTTP błędów OAuth.

{"ErrorCode" : "invalid_client", "Error" :"ClientId is Invalid"}

Jeśli <GenerateResponse> ma wartość prawda, zasady zwracają błędy w tym formacie w przypadku operacji weryfikacji i potwierdzania. Pełną listę znajdziesz w artykule Przewodnik po odpowiedziach HTTP błędów OAuth.

{  
   {  
      "fault":{  
         "faultstring":"Invalid Access Token",
         "detail":{  
            "errorcode":"keymanagement.service.invalid_access_token"
         }
      }
   }

Przykładowa reguła błędu

<FaultRule name=OAuthV2 Faults">
    <Step>
        <Name>AM-InvalidClientResponse</Name>
        <Condition>(fault.name = "invalid_client") OR (fault.name = "InvalidClientIdentifier")</Condition>
    </Step>
    <Step>
        <Name>AM-InvalidTokenResponse</Name>
        <Condition>(fault.name = "invalid_access_token")</Condition>
    </Step>
    <Condition>(oauthV2.failed = true) </Condition>
</FaultRule>

Schemat zasad

Każdy typ zasady jest zdefiniowany przez schemat XML (.xsd). Schematy zasad są dostępne na GitHubie.

Praca z domyślną konfiguracją OAuth

Każda organizacja (nawet organizacja w okresie próbnym) w Apigee Edge ma udostępniony punkt końcowy tokena OAuth. Punkt końcowy jest wstępnie skonfigurowany za pomocą zasad w proxy interfejsu API o nazwie oauth. Możesz zacząć korzystać z punktu końcowego tokena od razu po utworzeniu konta w Apigee Edge. Więcej informacji znajdziesz w artykule Punkty końcowe OAuth.

Usuwanie tokenów dostępu

Domyślnie tokeny OAuth2 są usuwane z systemu Apigee Edge po 3 dniach (259 200 sekund) od wygaśnięcia tokena dostępu i tokena odświeżania (jeśli istnieje). W niektórych przypadkach możesz chcieć zmienić to ustawienie domyślne. Jeśli na przykład generowana jest duża liczba tokenów, możesz skrócić czas usuwania, aby zaoszczędzić miejsce na dysku.

Jeśli korzystasz z Edge for Private Cloud, możesz zmienić to ustawienie domyślne, konfigurując właściwości organizacji w sposób opisany w tej sekcji. (3-dniowe usuwanie wygasłych tokenów dotyczy Edge w chmurze prywatnej w wersji 4.19.01 i nowszych. W przypadku wcześniejszych wersji domyślny interwał usuwania wynosi 180 dni).

Aktualizowanie ustawień czyszczenia w Edge Private Cloud w wersji 4.16.01 i nowszych

Uwaga: te ustawienia mają wpływ tylko na tokeny wygenerowane po ich zastosowaniu. Nie dotyczą tokenów wygenerowanych wcześniej.

Aktualizowanie ustawień czyszczenia w przypadku Edge Private Cloud 4.15.07

Uwaga: te ustawienia mają wpływ tylko na tokeny wygenerowane po ich zastosowaniu. Nie dotyczą tokenów wygenerowanych wcześniej.

Zachowanie niezgodne z RFC

Zasady OAuthV2 zwracają odpowiedź tokena, która zawiera pewne właściwości niezgodne z RFC. W tabeli poniżej znajdziesz właściwości niezgodne z zasadami, które są zwracane przez zasadę OAuthV2, oraz odpowiadające im właściwości zgodne z zasadami.

OAuthV2 zwraca: Właściwość zgodna ze standardem RFC:
"token_type":"BearerToken" "token_type":"Bearer"
"expires_in":"3600" "expires_in":3600

(Prawidłowa wartość to liczba, a nie ciąg znaków).

Odpowiedź o błędzie w przypadku wygasłego tokena odświeżania, gdy grant_type = refresh_token, to:

{"ErrorCode" : "InvalidRequest", "Error" :"Refresh Token expired"}

Odpowiedź zgodna z RFC to:

{"error" : "invalid_grant", "error_description" :"refresh token expired"}

Powiązane artykuły