Zasady OAuthV2

Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
info

Co

OAuthV2 to wieloaspektowa zasada wykonywania operacji na rodzajach uwierzytelnienia OAuth 2.0. To jest podstawowa zasada używana do konfigurowania punktów końcowych OAuth 2.0 w Apigee Edge.

Wskazówka: jeśli chcesz dowiedzieć się więcej o OAuth w usłudze Apigee Edge, zapoznaj się z stroną główną OAuth. Zawiera ona linki do zasobów, przykładów, filmów i innych materiałów. Aby zobaczyć, jak ta zasada jest używana w działającej aplikacji, zapoznaj się z przykładem OAuth zaawansowanego na GitHubie.

Próbki

VerifyAccessToken

VerifyAccessToken

Ta konfiguracja zasady OAuthV2 (z operacją VerifyAccessToken) sprawdza, czy token dostępu przesłany do Apigee Edge jest prawidłowy. Gdy ta operacja zasad zostanie uruchomiona, Edge będzie szukać prawidłowego tokena dostępu w żądaniu. Jeśli token dostępu jest prawidłowy, prośba jest akceptowana. Jeśli jest nieprawidłowy, przetwarzanie zostaje wstrzymane, 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 kodów uwierzytelniających wiadomość (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ć tę wartość domyślną za pomocą elementu <AccessToken>.

GenerateAccessToken

Generowanie tokenów dostępu

Przykłady żądania tokenów dostępu dla każdego z obsługiwanych typów uwierzytelnienia znajdziesz w artykule o wysyłaniu próśb o tokeny dostępu i kody autoryzacji. Temat zawiera przykłady tych operacji:

GenerateAuthorizationCode

Generowanie kodu autoryzacji

Przykłady sposobów żądania kodów autoryzacji znajdziesz w artykule Wysyłanie prośby 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 przepływie odpowiedzi. Możesz to zrobić na przykład w odpowiedzi na niestandardową weryfikację przeprowadzoną w usłudze zaplecza. W tym przykładzie przypadek użycia wymaga tokena dostępu i tokena odświeżania, co wyklucza typ uwierzytelnienia niejawnego. W tym przypadku do wygenerowania tokena użyjemy typu przyznania hasła. Jak zobaczysz, aby to działało, musisz przekazać nagłówek żą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 zastosujesz te zasady w przepływie odpowiedzi, nie uda się ono zakończyć i wystąpi błąd 401 Brak uprawnień, mimo że 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 podstawowego z zakodowanym w formacie Base64 ciągiem client_id:client_secret.

Możesz dodać ten nagłówek, umieszczając zasadę JavaScriptu tuż przed zasadą OAuthV2 w następujący sposób. Zmienne „local_clientid” i „local_secret” muszą być wcześniej ustawione i dostępne w procesie:

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 danych logowania do podstawowego uwierzytelniania”.

Odniesienie do elementu

Opis zasad zawiera opis jej elementów i atrybutów.

Przykładowa zasada widoczna 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 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 wskazuje, że token dostępu powinien być obecny jako parametr zapytania o nazwie access_token.

Przykład, w którym podano wartość <AccessToken>request.header.access_token</AccessToken>:

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

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

Domyślnie:

Nie dotyczy

Obecność:

Opcjonalnie

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

Element <AccessTokenPrefix>

<AccessTokenPrefix>Bearer</AccessTokenPrefix>

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

-H "Authorization: Bearer Rft3dqrs56Blirls56a"

Obecnie Bearer jest jedynym obsługiwanym prefiksem.

Domyślnie:

Nośnik

Obecność:

Opcjonalnie

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

Nośnik

Używane z operacjami:
  • VerifyAccessToken

Element <AppEndUser>

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

W przypadku, gdy identyfikator użytkownika końcowego aplikacji musi zostać wysłany na serwer autoryzacji, ten element umożliwia określenie, gdzie Edge powinien szukać identyfikatora użytkownika końcowego. Mogą być na przykład wysyłane jako parametr zapytania lub w nagłówku HTTP.

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

Dzięki temu ustawieniu możesz uwzględnić identyfikator użytkownika aplikacji w tokenie dostępu. Ta funkcja jest przydatna, jeśli chcesz pobierać lub anulować tokeny dostępu OAuth 2.0 według 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.

Domyślnie:

Nie dotyczy

Obecność:

Opcjonalnie

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

dowolna zmienna przepływu dostępna dla zasad w czasie wykonywania;

Używane w przypadku typów przyznań:
  • authorization_code
  • niejawnie
  • hasło
  • client_credentials

<Atrybuty/atrybut>

<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 umieścić identyfikator użytkownika lub identyfikator sesji w tokenie dostępu, który można wyodrębnić i sprawdzić w czasie działania.

Ten element umożliwia określenie wartości w zmiennej przepływu lub ciągu literału. Jeśli podasz zarówno zmienną, jak i ciąg znaków, zostanie użyta wartość określona w zmiennej przepływu. Jeśli zmiennej nie uda się rozwiązać, zostanie użyty ciąg znaków domyślny.

Więcej informacji o korzystaniu z tego elementu znajdziesz w artykule na temat dostosowywania tokenów i kodów autoryzacji.

Wyświetlanie lub ukrywanie atrybutów niestandardowych w odpowiedzi

Pamiętaj, że jeśli ustawisz element GenerateResponse tej zasady na wartość true, w odpowiedzi zostanie zwrócona pełna reprezentacja tokena w formacie JSON, wraz ze wszystkimi ustawionymi atrybutami niestandardowymi. 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 są widoczne w odpowiedzi. Jeśli chcesz je ukryć, możesz ustawić parametr display na 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 zachowywana. Załóżmy, że wygenerujesz token dostępu z atrybutami niestandardowymi, które chcesz ukryć w wygenerowanej odpowiedzi. Ustawienie display=false spełnia ten cel. Jeśli jednak nowy token dostępu zostanie wygenerowany później za pomocą tokena odświeżania, w odpowiedzi na token odświeżania pojawią się pierwotne atrybuty niestandardowe z tokena dostępu. Dzieje się tak, ponieważ Edge nie pamięta, że atrybut display miał pierwotnie wartość false w zasadzie generowania tokena dostępu – atrybut niestandardowy jest po prostu częścią metadanych tokena dostępu.

Takie samo zachowanie zauważysz po dodaniu do kodu autoryzacji atrybutów niestandardowych – gdy token dostępu zostanie wygenerowany za pomocą tego kodu, pojawią się one w odpowiedzi tokena dostępu. Ponownie, może to nie być pożądane działanie.

Aby ukryć atrybuty niestandardowe w takich przypadkach, masz do wyboru 2 opcje:

  • Wyraźnie zresetuj atrybuty niestandardowe w zasadach dotyczących tokena odświeżania i ustaw ich wyświetlanie na fałsz. W takim przypadku może być konieczne pobranie oryginalnych wartości niestandardowych z oryginalnego tokena dostępu przy użyciu zasady GetOAuthV2Info.
  • Aby ręcznie wyodrębnić atrybuty niestandardowe, których nie chcesz wyświetlać w odpowiedzi, użyj zasady JavaScript do przetwarzania w tle.

Zobacz też artykuł Dostosowywanie tokenów i kodów autoryzacyjnych.

Domyślnie:

N/A

Obecność:

Opcjonalnie

Prawidłowe wartości:
  • name – nazwa atrybutu
  • ref – wartość atrybutu. Może pochodzić ze zmiennej przepływu.
  • display – (opcjonalnie) umożliwia określenie, czy atrybuty niestandardowe mają się wyświetlać w odpowiedzi. Jeśli true, w odpowiedzi pojawiają się atrybuty niestandardowe (jeśli GenerateResponse jest też włączona). Jeśli ustawiona jest wartość false, odpowiedzi nie zawierają atrybutów niestandardowych. Wartość domyślna to true. Zobacz Wyświetlanie lub ukrywanie atrybutów niestandardowych w odpowiedzi.
Używane z typami uwierzytelnień:
  • authorization_code
  • niejawnie
  • hasło
  • client_credentials
  • refresh_token
  • Może być też używany w ramach operacji GenerateAuthorizationCode.

Element <ClientId>

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

W niektórych przypadkach aplikacja klienta 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 do dowolnej innej zmiennej nie jest obsługiwane. Zobacz też Wysyłanie żądania tokenów dostępu i kodów autoryzacji.

Domyślnie:

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

Obecność:

Opcjonalnie

Typ: Ciąg znaków
Prawidłowe wartości: Zmienna przepływu: request.formparam.client_id
Używane z typami uwierzytelnień:
  • authorization_code
  • hasło
  • domyślne
  • client_credentials

Można go też używać w ramach operacji GenerateAuthorizationCode.

Element <Code>

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

W ramach przepływu typu autoryzacji klient musi przesłać kod autoryzacji do serwera autoryzacji (Apigee Edge). Ten element umożliwia określenie, gdzie Edge ma szukać kodu autoryzacji. Może ona być na przykład wysyłana jako parametr zapytania, nagłówek HTTP lub parametr formularza (wartość domyślna).

Zmienna request.queryparam.auth_code wskazuje, że kod autoryzacji powinien być obecny jako parametr zapytania, na przykład ?auth_code=AfGlvs9. Aby wymagać kodu autoryzacji w nagłówku HTTP, ustaw tę wartość na request.header.auth_code. Zobacz też Wysyłanie żądań o tokeny dostępu i kodów autoryzacji.

Domyślne:

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

Obecność:

opcjonalnie

Typ: Ciąg znaków
Prawidłowe wartości: dowolna zmienna przepływu dostępna dla zasad w czasie działania,
Używane w przypadku typów przyznań: authorization_code

Element<ExpiresIn>

<ExpiresIn>10000</ExpiresIn> 

Wymusza czas ważności 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 <ExpiresIn> ma wartość -1, token lub kod wygasa zgodnie z maksymalnym czasem ważności tokena dostępu OAuth. Jeśli zasada <ExpiresIn> nie jest określona, system stosuje wartość domyślną skonfigurowaną na poziomie systemu.

Czas wygaśnięcia można też ustawić w czasie wykonywania za pomocą zaprogramowanej wartości domyślnej lub przez odwołanie do zmiennej przepływu. Możesz na przykład zapisać datę wygaśnięcia tokena w mapie wartości klucza, pobrać ją, przypisać do zmiennej lub odwołać się do niej w zasadzie. Na przykład: kvm.oauth.expires_in.

W usłudze Apigee Edge for Public Cloud Edge przechowuje te elementy w pamięci podręcznej przez co najmniej 180 sekund od momentu ich dostępowania.

  • tokeny dostępu OAuth. Oznacza to, że unieważniony token może być nadal skuteczny przez maksymalnie 3 minuty, dopóki nie wygaśnie limit pamięci podręcznej.
  • elementy usługi Key Management Service (KMS) (aplikacje, deweloperzy, usługi API).
  • Atrybuty niestandardowe w tokenach OAuth i elementach KMS.

Ten wers określa zmienną przepływu i wartość domyślną. Pamiętaj, że wartość zmiennej procesu 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 sposobu wymuszania wygaśnięcia tokena po jego utworzeniu. Jeśli musisz wymusić wygaśnięcie tokena (na przykład na podstawie warunku), możliwe rozwiązanie znajdziesz w tym poście na karcie Społeczność Apigee.

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

Private Cloud: w przypadku instalacji Edge for Private Cloud wartość domyślna jest ustawiana 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ść zgodnie z potrzebami:
    conf_keymanagement_oauth_auth_code_expiry_time_in_millis=3600000
  3. Upewnij się, że właścicielem pliku właściwości jest użytkownik „apigee”:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  4. Ponownie uruchom procesor wiadomości.
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Domyślnie:

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

Obecność:

Opcjonalnie

Typ: Liczba całkowita
Prawidłowe wartości:
Używane w przypadku typów przyznań:
  • authorization_code
  • niejawnie
  • hasło
  • client_credentials
  • refresh_token

Używany również z operacji GenerateAuthorizationCode.

Element <ExternalAccessToken>

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

Określa, gdzie Apigee Edge znajdzie zewnętrzny token dostępu (token dostępu niewygenerowany przez Apigee Edge).

Zmienna request.queryparam.external_access_token wskazuje, że zewnętrzny token dostępu powinien być obecny jako parametr zapytania, na przykład ?external_access_token=12345678. Aby wymagać tokena dostępu zewnętrznego w nagłówku HTTP, ustaw 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 jest nieprawidłowy lub go nie ma, Edge normalnie weryfikuje client_id i client_secret w sklepie autoryzacyjnym Apigee Edge. Użyj tego elementu, jeśli chcesz pracować z tokenami OAuth innych firm. Szczegółowe informacje o korzystaniu z tego elementu znajdziesz w artykule Korzystanie z tokenów OAuth innych firm.

Domyślnie:

fałsz

Obecność:

Opcjonalnie

Typ: Wartość logiczna
Prawidłowe wartości: prawda lub fałsz
Używane w przypadku typów przyznań:
  • authorization_code
  • hasło
  • client_credentials

Element <ExternalAuthorizationCode>

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

Informuje Apigee Edge, gdzie znaleźć zewnętrzny kod uwierzytelniający (kod uwierzytelniający nie wygenerowany przez Apigee Edge).

Zmienna request.queryparam.external_auth_code wskazuje, że kod autoryzacji zewnętrznej powinien być obecny jako parametr zapytania, na przykład ?external_auth_code=12345678. Aby wymagać kodu uwierzytelniania zewnętrznego w nagłówku HTTP, ustaw tę wartość na request.header.external_auth_code. Zobacz też Używanie 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 nie wygenerowany przez Apigee Edge).

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

Element <GenerateResponse>

<GenerateResponse enabled='true'/>

Jeśli ustawisz wartość true, zasada wygeneruje i zwróci odpowiedź. Na przykład w przypadku wywołania 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 zasada jest false, odpowiedź nie jest wysyłana. Zamiast tego zestaw zmiennych przepływu jest wypełniany wartościami powiązanymi z funkcją zasady. Na przykład zmienna przepływu o nazwie oauthv2authcode.OAuthV2-GenerateAuthorizationCode.code zostanie uzupełniona nowo wygenerowanym kodem autoryzacji. Pamiętaj, że expires_in jest wyrażony w odpowiedzi w sekundach.

Domyślnie:

fałsz

Obecność:

Opcjonalnie

Typ: ciąg znaków
Prawidłowe wartości: prawda lub fałsz
Używane w przypadku typów przyznawania dostępu:
  • domyślne
  • hasło
  • client_credentials
  • refresh_token
  • Można go też używać w ramach operacji GenerateAuthorizationCode.

Element <GenerateErrorResponse>

<GenerateErrorResponse enabled='true'/>

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

Domyślne:

fałsz

Obecność:

Opcjonalnie

Typ: ciąg znaków
Prawidłowe wartości: prawda lub fałsz
Używane w przypadku typów przyznawania dostępu:
  • domyślne
  • hasło
  • client_credentials
  • refresh_token
  • Można go też używać w ramach operacji GenerateAuthorizationCode.

<GrantType>

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

Informuje zasadę, gdzie znaleźć parametr typu przyznawania, który jest przekazywany w żądaniu. Zgodnie ze specyfikacją OAuth 2.0 typ przyznawania musi być podawany w żądaniach dotyczących tokenów dostępu i kodów autoryzacji. Zmienna może być nagłówkiem, parametrem zapytania lub parametrem formularza (wartość domyślna).

Przykład request.queryparam.grant_type wskazuje, że jako parametr zapytania powinno być obecne hasło, np. ?grant_type=password. Aby wymagać typu przyznawania w nagłówku HTTP, ustaw tę wartość na request.header.grant_type. Zobacz też Wysyłanie żądania tokenów dostępu i kodów autoryzacji.

Domyślnie:

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

Obecność:

Opcjonalnie

Typ: ciąg znaków
Prawidłowe wartości: Zmienną (jak wyjaśniono powyżej).
Używane w przypadku typów przyznawania dostępu:
  • authorization_code
  • hasło
  • domyślne
  • client_credentials
  • refresh_token

Element <Operation>

<Operation>GenerateAuthorizationCode</Operation>

Operacja OAuth 2.0 wykonywana przez zasadę.

Domyślnie:

Jeśli nie określisz parametru <Operation>, przeglądarka Edge sprawdzi listę <SupportedGrantTypes>. Tylko operacje dotyczące tych typów grantów będą udane. Inaczej mówiąc, możesz pominąć <Operation>, jeśli określisz <GrantType> na liście <SupportedGrantTypes>. Jeśli nie określisz atrybutu <Operation> ani <SupportedGrantTypes>, domyślny typ uwierzytelnienia to authorization_code. Oznacza to, że żądania typu uwierzytelnienia autoryzacji_code będą udane, ale wszystkie pozostałe będą zakończone niepowodzeniem.

Obecność:

Opcjonalnie

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

Element <PassWord>

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

Ten element jest używany tylko w przypadku typu uwierzytelniania hasłem. W przypadku typu uprawnień hasło dane logowania użytkownika (hasło i nazwa użytkownika) muszą być dostępne dla zasad OAuth 2. Elementy <PassWord> i <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 (domyślnie) znalezienia wartości w parametrach formularza o nazwach username i password. Jeśli wartości nie zostaną znalezione, zasada zwróci błąd. Za pomocą elementów <PassWord> i <UserName> możesz odwołać się do dowolnej zmiennej przepływu, która zawiera dane logowania.

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

Zasady OAuth 2 nie robią nic więcej z tymi wartościami danych logowania. Edge po prostu sprawdza, czy są one obecne. To programista interfejsu API musi pobrać żądanie wartości i wysłać je do dostawcy tożsamości przed wykonaniem zasady generowania tokenów.

Zobacz też Wysyłanie żądań o tokeny dostępu i kodów autoryzacji.

Domyślnie:

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

Obecność:

Opcjonalnie

Typ: Ciąg znaków
Prawidłowe wartości: dowolna zmienna przepływu dostępna dla zasad w czasie wykonywania;
Używane w przypadku typów przyznawania dostępu: hasło

Element <RedirectUri>

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

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

Informacje o identyfikatorach URI przekierowania

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

  • (wymagany) Jeśli adres URL wywołania zwrotnego jest zarejestrowany w aplikacji dewelopera powiązanej z kluczami klienta w żądaniu, a w żądaniu występuje parametr redirect_uri, te 2 elementy muszą się dokładnie zgadzać. Jeśli nazwy się nie zgadzają, zwracany jest błąd. Informacje o rejestrowaniu aplikacji dla deweloperów 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, przeglądarka Edge przekierowuje na zarejestrowany adres URL wywołania zwrotnego.
  • (wymagany) Jeśli adres URL wywołania zwrotnego nie jest zarejestrowany, wymagany jest adres redirect_uri. Pamiętaj, że w takim przypadku Edge zaakceptuje DOWOLNY adres URL. W tym przypadku może wystąpić problem z bezpieczeństwem, dlatego należy używać go tylko w przypadku zaufanych aplikacji klienckich. Jeśli aplikacje klienckie nie są zaufane, zalecamy zawsze wymaganie rejestracji adresu URL wywołania zwrotnego.

Możesz wysłać ten parametr w parametrze zapytania lub w nagłówku. Zmienna request.queryparam.redirect_uri wskazuje, że parametr RedirectUri powinien występować jako parametr zapytania, np. ?redirect_uri=login.myapp.com. Aby wymagać wartości RedirectUri w nagłówku HTTP, ustaw tę wartość na request.header.redirect_uri. Zapoznaj się też z sekcją o żądaniu tokenów dostępu i kodów autoryzacji.

Domyślnie:

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

Obecność:

Opcjonalnie

Typ: Ciąg znaków
Prawidłowe wartości: dowolna zmienna przepływu dostępna w zasadach w czasie działania,
Używane z typami uwierzytelnień:
  • authorization_code
  • domyślne

Używany również z operacji GenerateAuthorizationCode.

Element <RefreshToken>

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

Gdy żądasz tokena 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ć tokenu odświeżania. Może ona być na przykład wysyłana jako parametr zapytania, nagłówek HTTP lub parametr formularza (wartość domyślna).

Zmienna request.queryparam.refreshtoken wskazuje, że token odświeżania powinien być obecny jako parametr zapytania, np. ?refresh_token=login.myapp.com. Aby na przykład wymagać nagłówka HTTP RefreshToken, ustaw tę wartość na request.header.refresh_token. Zobacz też Wysyłanie żądań dotyczących tokenów dostępu i kodów autoryzacji.

Domyślnie:

request.formparam.refresh_token (kodowanie x-www-form-url i wskazanie w treści żądania)

Obecność:

Opcjonalnie

Typ: Ciąg znaków
Prawidłowe wartości: dowolna zmienna przepływu dostępna w zasadach w czasie działania,
Używane w przypadku typów przyznań:
  • refresh_token

Element <RefreshTokenExpiresIn>

<RefreshTokenExpiresIn>1000</RefreshTokenExpiresIn>

Wymusza czas ważności tokenów odświeżania w milisekundach. Wartość czasu ważności to wartość wygenerowana przez system plus wartość <RefreshTokenExpiresIn>. Jeśli <RefreshTokenExpiresIn> ma wartość -1, token odświeżania wygasa zgodnie z maksymalnym okresem ważności tokena odświeżania OAuth. Jeśli nie podasz właściwoś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 wykonywania za pomocą zaprogramowanej wartości domyślnej lub przez odwołanie do zmiennej przepływu. Możesz na przykład przechowywać wartość ważności tokena w mapie klucz-wartość, pobierać ją, przypisywać do zmiennej i odwoływać się do niej w zasadach. Na przykład: kvm.oauth.expires_in.

Poniższy zwrotka 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ą.

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

Private Cloud: w przypadku instalacji Edge for Private Cloud domyślna wartość jest ustawiana 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ść zgodnie z potrzebami:
    conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
  3. Upewnij się, że właścicielem pliku właściwości jest użytkownik „apigee”:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  4. Ponownie uruchom 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ść:

Opcjonalnie

Typ: Liczba całkowita
Prawidłowe wartości:
Używane w przypadku typów przyznań:
  • 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 typu udzielania dostępu implicit.

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> do skonfigurowania zmiennej przepływu zawierającej wartość typu odpowiedzi. Jeśli na przykład ustawisz ten element na request.header.response_type, Edge będzie szukać typu odpowiedzi w nagłówku żądania. Zobacz też Wysyłanie żądania tokenów dostępu i kodów autoryzacji.

Domyślnie:

request.formparam.response_type (kodowany w formacie x-www-form-urlencoded i określany 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 za pomocą kodu autoryzacji) lub token (w przypadku typu uwierzytelnienia powiązanego).
Używane w przypadku typów przyznań:
  • domyślne
  • Używany również w operacji GenerateAuthorizationCode.

Element <ReuseRefreshToken>

<ReuseRefreshToken>true</ReuseRefreshToken>

Gdy ustawiona jest wartość true, istniejący token odświeżania jest używany ponownie, dopóki nie wygaśnie. Jeśli false, nowy token odświeżania jest wydawany przez Apigee Edge, 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żywane w przypadku typu dostępu:
  • refresh_token

Element <Scope>

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

Jeśli ten element znajduje się w jednej z zasad GenerateAccessToken lub GenerateAuthorizationCode, służy do określania zakresów, które mają przyznać token lub kod. Te wartości są zazwyczaj przekazywane do zasad w żądaniu z aplikacji klienckiej. Możesz skonfigurować element tak, aby przyjmował zmienną przepływu, co pozwoli Ci wybrać sposób przekazywania zakresów w żądaniu. W poniższym przykładzie request.queryparam.scope wskazuje, że zakres powinien być obecny jako parametr zapytania, np. ?scope=READ. Aby wymagać zakresu w nagłówku HTTP, ustaw tę wartość na request.header.scope.

Jeśli ten element pojawia się w zasadzie „VerifyAccessToken”, służy do określania zakresów, które ma narzucać zasada. W przypadku tego typu zasad wartość musi być „twardo zakodowaną” nazwą zakresu – nie można używać zmiennych. Na przykład:

<Scope>A B</Scope>

Zobacz też Zakresy uprawnień OAuth2 i Wysyłanie żądań o tokeny dostępu i kody autoryzacji.

Domyślnie:

Brak zakresu

Obecność:

Opcjonalnie

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

Jeśli używana w ramach zasad generowania*, zmienna przepływu.

Jeśli jest używana z VerifyAccessToken, zawiera listę rozdzielonych spacjami nazw zakresów (ciągów).

Używane w przypadku typów przyznań:
  • authorization_code
  • niejawnie
  • hasło
  • client_credentials
  • Może być też używany w operacjach GenerateAuthorizationCode i VerifyAccessToken.

Element <State>

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

W przypadku, gdy aplikacja klienta musi wysłać informacje o stanie do serwera autoryzacji, ten element umożliwia określenie, gdzie Edge powinien szukać wartości stanu. Może ona na przykład być wysyłana jako parametr zapytania lub w nagłówku HTTP. Wartość stanu jest zwykle używana jako zabezpieczenie w celu zapobiegania atakom CSRF.

Na przykład request.queryparam.state wskazuje, że stan powinien być obecny jako parametr zapytania, np. ?state=HjoiuKJH32. Aby wymagać stanu w nagłówku HTTP, ustaw tę wartość na request.header.state. Zapoznaj się też z sekcją o wysyłaniu próśb o tokeny dostępu i kody autoryzacji.

Domyślnie:

Brak stanu

Obecność:

Opcjonalnie

Typ: Ciąg znaków
Prawidłowe wartości: dowolna zmienna przepływu dostępna dla zasad w czasie działania,
Używane w przypadku typów przyznań:
  • Wszystko
  • Może być też używany w ramach operacji GenerateAuthorizationCode

Element <StoreToken>

 <StoreToken>true</StoreToken> 

Ustaw ten element na true, gdy element <ExternalAuthorization> ma wartość true. Element <StoreToken> informuje Apigee Edge o zapisaniu zewnętrznego tokena dostępu. W przeciwnym razie nie zostanie zachowana.

Domyślne:

fałsz

Obecność:

Opcjonalnie

Typ: Wartość logiczna
Prawidłowe wartości: prawda lub fałsz
Używane w przypadku typów przyznań:
  • 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 usłudze Apigee Edge. Punkt końcowy może obsługiwać wiele typów uprawnień (czyli jeden punkt końcowy może być skonfigurowany tak, aby rozpowszechniać tokeny dostępu dla wielu typów uprawnień). Więcej informacji o punktach końcowych znajdziesz w artykule Informacje o punktach końcowych OAuth. Typ uwierzytelnienia jest przekazywany w żądaniach tokena w parametrze grant_type.

Jeśli nie zostaną określone żadne obsługiwane typy grantów, jedynymi dozwolonymi typami będą authorization_code i implicit. Zobacz też element <GrantType> (element wyższego poziomu używany do określania, gdzie Apigee Edge ma szukać parametru grant_type przekazywanego w żądaniu klienta. Edge sprawdzi, czy wartość parametru grant_type odpowiada jednemu z obsługiwanych typów grantów.

Domyślne:

authorization_code i implicit

Obecność:

Wymagane

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

Element <Tokens>/<Token>

Używany w operacjach ValidateToken i InvalidateToken. Zapoznaj się też z sekcją Zatwierdzanie i unieważnianie tokenów dostępu. Element <Token> wskazuje zmienną przepływu, która określa źródło tokena do unieważnienia. Jeśli deweloperzy mają przesyłać tokeny dostępu jako parametry zapytania o nazwie access_token, należy użyć request.queryparam.access_token.

Element <UserName>

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

Ten element jest używany tylko z typem uwierzytelnienia hasłem. W przypadku typu uprawnień hasło dane logowania użytkownika (hasło i nazwa użytkownika) muszą być dostępne dla zasad OAuth 2. 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 spodziewa się znaleźć wartości (domyślnie) w parametrach formularza o nazwach username i password. Jeśli wartości nie zostaną znalezione, zasada zwróci błąd. Za pomocą elementów <PassWord> i <UserName> możesz odwołać się do dowolnej zmiennej przepływu, która zawiera 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ć podawania nazwy użytkownika w nagłówku HTTP, ustaw tę wartość na request.header.username.

Zasady OAuth 2 nie robią nic więcej z tymi wartościami; Edge po prostu sprawdza, czy są one obecne. Przed wykonaniem zasad generowania tokenów to twórca interfejsu API musi pobrać wartości żądania i przesłać je do dostawcy tożsamości.

Zapoznaj się też z sekcją o wysyłaniu próśb o tokeny dostępu i kody autoryzacji.

Domyślne:

request.formparam.username (zakodowany adres URL formularza x-www i określony w treści żądania)

Obecność:

Opcjonalnie

Typ: Ciąg znaków
Prawidłowe wartości: dowolne ustawienie zmiennej;
Używane w przypadku typów przyznań: hasło

Weryfikowanie tokenów dostępu

Gdy punkt końcowy tokena zostanie skonfigurowany dla serwera proxy interfejsu API, do przepływu, który udostępnia zasobów chronionych, zostanie dołączona odpowiednia zasada OAuthV2, która określa operację VerifyAccessToken.

Aby na przykład zapewnić autoryzację wszystkich żądań do interfejsu API, możesz narzucić weryfikację tokena dostępu za pomocą tej polityki:

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

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

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

Wymienionych poniżej elementów opcjonalnych można używać do zastępowania domyślnych ustawień operacji VerifyAccessToken.

Nazwa Opis
Zakres

Lista zakresów rozdzielona spacjami. Weryfikacja się powiedzie, jeśli w tokenie dostępu jest co najmniej 1 z wymienionych poniżej zakresów. Na przykład te zasady będą sprawdzać 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 się znajdować token dostępu. Na przykład:request.queryparam.accesstoken. Zgodnie ze specyfikacją OAuth 2.0 token dostępu powinien być domyślnie pokazywany przez aplikację w nagłówku autoryzacji HTTP. Użyj tego ustawienia, jeśli token dostępu ma być prezentowany w niestandardowym miejscu, takim jak parametr zapytania lub nagłówek HTTP o nazwie innej niż Autoryzacja.

Zapoznaj się też z artykułami Weryfikowanie tokenów dostępu oraz Wysyłanie próśb o tokeny dostępu i kody autoryzacji.

Określanie lokalizacji zmiennych żądań

W przypadku każdego typu finansowania zasady zakładają, że w wiadomościach z prośbami o finansowanie znajduje się lokalizacja lub wymagane informacje. 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 dla poszczególnych parametrów. Podczas obsługi kodu autoryzacji możesz na przykład określić lokalizację kodu autoryzacji, identyfikator klienta, identyfikator URI przekierowania oraz zakres. Mogą one być określone jako nagłówki HTTP, parametry zapytania lub parametry formularza.

Przykład poniżej pokazuje, jak określić lokalizację wymaganych parametrów kodu autoryzacji jako nagłówków 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>
  ...

Jeśli to konieczne, aby obsługiwać aplikacje klientów, możesz stosować nagłówki i parametry zapytań w różny sposób:

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

Na każdy parametr można skonfigurować tylko jedną lokalizację.

Zmienne przepływu

Zmienne przepływu zdefiniowane w tej tabeli są wypełniane podczas wykonywania odpowiednich zasad OAuth, dlatego są dostępne dla innych zasad i aplikacji działających w przepływie serwera proxy interfejsu API.

Operacja VerifyAccessToken

Podczas wykonywania operacji VerifyAccessToken duża liczba zmiennych przepływu jest wypełniana w kontekście wykonania zastępnika. Te zmienne udostępniają właściwości związane z tokenem dostępu, aplikacją dewelopera, deweloperem i firmą. Aby odczytać dowolną z tych zmiennych i użyć jej w odpowiednim momencie w ramach procesu, możesz użyć na przykład zasady przypisywania wiadomości lub JavaScript. Te zmienne mogą też być przydatne do debugowania.

Zmienne specyficzne dla tokena

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ą kliencką.
client_id Identyfikator klienta zarejestrowanej aplikacji klienta.
grant_type Typ uprawnień powiązany z żądaniem.
token_type Typ tokena powiązany z żądaniem.
access_token Token dostępu, który jest weryfikowany.
accesstoken.{custom_attribute} Nazwa atrybutu niestandardowego w tokenie dostępu.
issued_at Data wystawienia tokena dostępu wyrażona w czasie uniksowym w milisekundach.
expires_in Czas ważności tokena dostępu. Wyrażony w sekundach. Chociaż element ExpiresInokreśla czas ważności w milisekundach, w tokenie odpowiedzi i wartościach przepływu zmiennych czas jest wyrażony w sekundach.
status stan tokena dostępu (np. zatwierdzony lub unieważniony).
scope Zakres (jeśli występuje) powiązany z tokenem dostępu.
apiproduct.<custom_attribute_name> Nazwany niestandardowy atrybut produktu interfejsu API powiązany z zarejestrowaną aplikacją klienta.
apiproduct.name Nazwa usługi API powiązanej z zarejestrowaną aplikacją kliencką.
revoke_reason

(Tylko rozwiązanie Apigee w wersji hybrydowej) Wskazuje, dlaczego token dostępu został unieważniony.

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

Zmienne dotyczące aplikacji

Te zmienne są powiązane z aplikacją dewelopera powiązaną 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 Przykład: programista
app.appParentId
app.created_by
app.created_at
app.last_modified_at
app.last_modified_by
app.{custom_attributes} Nazwany atrybut niestandardowy zarejestrowanej aplikacji klienckiej.

Zmienne dla programistów

Jeśli atrybut app.appType ma wartość „Firma”, atrybuty firmy są uzupełnione, a jeśli app.appType ma wartość „Deweloper”, wypełnione są atrybuty dewelopera.

Zmienne Opis
Zmienne 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 specyficzne dla 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 po wykonaniu operacji GenerateAuthorizationCode:

Prefiks: oauthv2authcode.{policy_name}.{variable_name}

Przykład: oauthv2authcode.GenerateCodePolicy.code.

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

operacje GenerateAccessToken i RefreshAccessToken,

Te zmienne są ustawiane po pomyślnym wykonaniu operacji GenerateAccessToken i RefreshAccessToken. Pamiętaj, że zmienne tokenu odświeżania nie mają zastosowania w przypadku procesu udzielania dostępu z użyciem poświadczeń 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ść daty wygaśnięcia tokena. Szczegółowe informacje znajdziesz w elemencie <ExpiresIn>. Pamiętaj, że w odpowiedzi wartość expires_in jest wyrażona w sekundach.
scope Lista dostępnych zakresów skonfigurowanych dla tokena. Zobacz artykuł 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 produktów powiązanych z aplikacją dewelopera przypisaną do tokena.
refresh_count
refresh_token Wygenerowany token odświeżania. Pamiętaj, że tokeny odświeżania nie są generowane w przypadku typu uprawnień danych logowania klienta.
refresh_token_expires_in Czas życia tokena odświeżania (w sekundach).
refresh_token_issued_at Ta wartość czasowa jest reprezentacją ciągu znaków odpowiadającej 32-bitowej ilości czasu z sygnaturą czasową. Na przykład data „Śr, 21 sie 2013 r., 19:16:47 UTC” odpowiada sygnaturze czasowej 1377112607413.
refresh_token_status Może to być approved lub revoked.

GenerateAccessTokenImplicitGrant

Te zmienne są ustawiane po pomyślnym wykonaniu operacji GenerateAccessTokenImplicit w przypadku przepływu typu niejawny.

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 Czas wygaśnięcia tokena (w sekundach). Szczegółowe informacje znajdziesz w elemencie <ExpirationIn>.

Informacje o błędach

W tej sekcji opisano kody błędów i komunikaty o błędach, które są zwracane, oraz zmienne błędów ustawiane przez Edge, gdy ta zasada wyzwala błąd. Warto o tym wiedzieć, jeśli rozwijasz reguły błędów, aby obsługi błędów. Więcej informacji znajdziesz w artykule Co musisz wiedzieć o błędach związanych z zasadami i postępowaniu z błędami

Błędy w czasie wykonywania

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

Kod błędu Stan HTTP Przyczyna Zgłoszone 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 żadna z usług API powiązanych z token dostępu. VerifyAccessToken
steps.oauth.v2.FailedToResolveAccessToken 500 Zasada powinna znaleźć token dostępu w zmiennej określonej w tagu <AccessToken>, ale nie udało się znaleźć zmiennej. GenerateAccessToken
steps.oauth.v2.FailedToResolveAuthorizationCode 500 Zasada powinna znaleźć kod autoryzacji w zmiennej określonej w tagu <Code>, ale nie udało się znaleźć zmiennej. GenerateAuthorizationCode
steps.oauth.v2.FailedToResolveClientId 500 Zasada ma znaleźć identyfikator klienta w zmiennej określonej w tagu <ClientId>, ale nie udało się znaleźć zmiennej. GenerateAccessToken
GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
RefreshAccessToken
steps.oauth.v2.FailedToResolveRefreshToken 500 Zasada powinna znaleźć token odświeżania w zmiennej określonej w tagu <RefreshToken>, ale nie udało się znaleźć zmiennej. RefreshAccessToken
steps.oauth.v2.FailedToResolveToken 500 Zasada oczekuje, że znajdzie token w zmiennej określonej w tagu <Tokens>, ale nie udało się znaleźć zmiennej.

ValidateToken
InvalidateToken

steps.oauth.v2.InsufficientScope 403 Token dostępu przedstawiony w żądaniu ma zakres, który nie pasuje do zakresu określone w zasadzie weryfikacji tokena dostępu. Więcej informacji o zakresie znajdziesz w artykule o korzystaniu z zakresów OAuth2. VerifyAccessToken
steps.oauth.v2.invalid_access_token 401 Token dostępu wysłany przez klienta jest nieprawidłowy. VerifyAccessToken
steps.oauth.v2.invalid_client 401

Nazwa błędu jest zwracana, gdy właściwość <GenerateResponse> elementu ma wartość true, a identyfikator klienta wysłany w żądaniu to jest nieprawidłowa. Sprawdź, czy używasz prawidłowych wartości klucza i hasła klienta dla aplikację deweloperską powiązaną z Twoim serwerem proxy. Wartości te są zwykle wysyłane jako Nagłówek podstawowej autoryzacji zakodowany algorytmem Base64.

Uwaga: zalecamy zmianę istniejącej reguły błędu. warunki, aby wychwytywać zarówno invalid_client, jak i InvalidClientIdentifier nazwy. Zobacz wersję 16.09.21 uwagi, gdzie znajdziesz więcej informacji i przykład.

GenerateAccessToken
RefreshAccessToken
steps.oauth.v2.invalid_request 400 Ta nazwa błędu jest używana w wielu różnych rodzajach błędów, zwykle w przypadku braku lub nieprawidłowe parametry przesłane w żądaniu. Jeśli <GenerateResponse> to ma wartość false, użyj zmiennych błędów (opisanych poniżej), aby pobrać szczegółowe informacje o np. nazwę i przyczynę błędu. GenerateAccessToken
GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
RefreshAccessToken
steps.oauth.v2.InvalidAccessToken 401 Nagłówek autoryzacji nie zawiera wymaganego słowa „Bearer”. Dla: przykład: Authorization: Bearer your_access_token VerifyAccessToken
steps.oauth.v2.InvalidAPICallAsNo\
steps.oauth.v2.ApiProductMatchFound
401

Serwera proxy interfejsu API nie ma w usłudze powiązanej z tokenem dostępu.

Wskazówki: upewnij się, że usługa powiązana z tokenem dostępu jest poprawnie skonfigurowane. Jeśli na przykład używasz symboli wieloznacznych w ścieżkach zasobów, upewnij się, że parametr symbole wieloznaczne są prawidłowo używane. Więcej informacji znajdziesz w artykule Tworzenie usług API.

Zobacz też ten artykuł post na karcie Społeczność Apigee, w którym znajdziesz więcej wskazówek na temat przyczyn tego błędu.

VerifyAccessToken
steps.oauth.v2.InvalidClientIdentifier 500

Nazwa błędu jest zwracana, gdy właściwość <GenerateResponse> elementu ma wartość false (fałsz), a identyfikator klienta wysłany w żądaniu to jest nieprawidłowa. Upewnij się, że dla parametru Aplikacja dewelopera powiązana z Twoim serwerem proxy. Zazwyczaj wartości te są wysyłane w formacie Base64. zakodowany nagłówek podstawowej autoryzacji.

Uwaga: w tym przypadku ten błąd był nazywany wcześniej invalid_client Zalecamy zmianę istniejącej reguły błędu warunki, aby wychwytywać zarówno invalid_client, jak i InvalidClientIdentifier nazwa. Zobacz wersję 16.09.21 uwagi, gdzie znajdziesz więcej informacji i przykład.

GenerateAccessToken
RefreshAccessToken

steps.oauth.v2.InvalidParameter 500 Zasada musi określać token dostępu lub kod autoryzacji, ale nie może i jednym, i drugim. GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
steps.oauth.v2.InvalidTokenType 500 Element <Tokens>/<Token> wymaga podania tokena typ (np. refreshtoken). Jeśli klient przekazuje nieprawidłowy typ, pojawia się błąd. ValidateToken
InvalidateToken
steps.oauth.v2.MissingParameter 500 Typ odpowiedzi to token, ale nie określono typów uwierzytelnienia. GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
steps.oauth.v2.UnSupportedGrantType 500

Klient podał typ uwierzytelnienia, który nie jest obsługiwany przez zasadę (niewymieniony w &lt;SupportedGrantTypes&gt; ).

Uwaga: obecnie występuje błąd polegający na nieobsługiwanym typie uwierzytelnienia. nie są poprawnie rzucane. Jeśli wystąpi błąd nieobsługiwanego typu uwierzytelnienia, serwer proxy nie zgodnie z oczekiwaniami przejdź do przepływu błędów.

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

InvalidValueForRefreshTokenExpiresIn W przypadku elementu <RefreshTokenExpiresIn> prawidłowe wartości są dodatnie liczb całkowitych oraz -1.
InvalidGrantType W <SupportedGrantTypes> podano nieprawidłowy typ uwierzytelnienia . Listę prawidłowych typów znajdziesz w informacjach o zasadach.
ExpiresInNotApplicableForOperation Upewnij się, że operacje określone w <Operations> obsługa elementów utraty ważności. Nie działa na przykład operacja VerifyToken.
RefreshTokenExpiresInNotApplicableForOperation Upewnij się, że operacje określone w <Operations> odświeżenie obsługi elementów wygaśnięcie tokenu. Nie działa na przykład operacja VerifyToken.
GrantTypesNotApplicableForOperation Sprawdź, czy typy uwierzytelnień określone w <SupportedGrantTypes> są obsługiwane w przypadku w wybranej operacji.
OperationRequired

Musisz określić operację w tej zasadzie za pomocą funkcji <Operation> .

Uwaga: jeśli brakuje elementu <Operation>, w parametrze Interfejs zgłasza błąd weryfikacji schematu.

InvalidOperation

Musisz określić prawidłową operację w tej zasadzie za pomocą funkcji <Operation> element.

Uwaga: jeśli element <Operation> jest nieprawidłowy, parametr Interfejs zgłasza błąd weryfikacji schematu.

TokenValueRequired Musisz podać wartość tokena <Token> w <Tokens>.

Zmienne błędów

Te zmienne są ustawiane, gdy ta zasada wywołuje błąd w czasie działania.

Zmienne Gdzie Przykład
fault.name="fault_name" fault_name to nazwa błędu podana w tabeli Błędy czasu działania powyżej. Nazwa błędu to ostatnia część kodu błędu. fault.name = "invalid_request"
oauthV2.policy_name.failed policy_name to określona przez użytkownika nazwa zasady, która spowodowała błąd. oauthV2.GenerateAccesstoken.failed = true
oauthV2.policy_name.fault.name policy_name to określona przez użytkownika nazwa zasady, która spowodowała błąd. oauthV2.GenerateAccesstoken.fault.name = invalid_request

Uwaga: w przypadku operacji VerifyAccessToken nazwa błędu zawiera ten sufiks: keymanagement.service
Na przykład: keymanagement.service.invalid_access_token

oauthV2.policy_name.fault.cause policy_name to określona przez użytkownika nazwa zasady, 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 <GenerateResponse> ma wartość true.

Jeśli <GenerateResponse> ma wartość true, zasada zwraca błędy w tym formacie na potrzeby operacji generowania tokenów i kodów. Pełną listę znajdziesz tutaj Błąd HTTP OAuth odniesienie do odpowiedzi.

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

Jeśli <GenerateResponse> ma wartość true, zasada zwraca błędy w tym formacie na potrzeby weryfikacji operacji. Pełną listę znajdziesz w artykule Błąd HTTP OAuth odniesienie do odpowiedzi.

{  
   {  
      "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 zasad jest definiowany przez schemat XML (.xsd). Informacje na temat schematów zasad znajdziesz na GitHubie.

Praca z domyślną konfiguracją OAuth

Każda organizacja (nawet ta w ramach bezpłatnego okresu próbnego) w usłudze Apigee Edge jest obsługiwana za pomocą punktu końcowego tokena OAuth. Punkt końcowy jest wstępnie skonfigurowany za pomocą zasad w serwisie proxy interfejsu API o nazwie oauth. Punkt końcowy tokena możesz zacząć używać od razu po utworzeniu konta w Apigee Edge. Więcej informacji znajdziesz w artykule Omówienie punktów końcowych OAuth.

Czyszczenie tokenów dostępu

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

Jeśli korzystasz z Edge for Private Cloud, możesz zmienić to ustawienie domyślne przez ustawienie właściwości organizacji w sposób opisany w tej sekcji. (usuwanie wygasłych tokenów po 3 dniach) dotyczy Edge for Private Cloud w wersji 4.19.01 lub nowszej. We wcześniejszych wersjach domyślny okres trwałego usuwania wynosi 180 dni.

Aktualizacja ustawień oczyszczania w Edge Private Cloud w wersji 4.16.01 i nowszych

Uwaga: ma to wpływ tylko na tokeny wygenerowane po zastosowaniu tych ustawień. Ustawienia nie dotyczą tokenów wygenerowanych wcześniej.

Aktualizacja ustawień oczyszczania w Edge Private Cloud 4.15.07

Uwaga: zmiany te mają wpływ tylko na tokeny wygenerowane po ich zastosowaniu. Nie mają one wpływu na tokeny wygenerowane wcześniej.

Zachowanie niezgodne z RFC

Zasady OAuth 2 zwracają odpowiedź tokena, która zawiera pewne właściwości niezgodne ze standardem RFC. W tabeli poniżej przedstawiono niezgodne właściwości zwrócone przez zasadę OAuthV2 oraz odpowiadające im zgodne właściwości.

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

(wartość zgodna z wymaganiami to liczba, a nie ciąg znaków).

Ponadto odpowiedź o błędzie z wygasłym tokenem odświeżania, gdy grant_type = refresh_token to:

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

Odpowiedź zgodna z RFC jest jednak następująca:

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

Powiązane artykuły