Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
![](https://docs.apigee.com/static/api-platform/images/icon_policy_security.jpg?hl=pl)
Co
OAuthV2 to wieloaspektowa zasada służąca do wykonywania operacji typu uwierzytelniania OAuth 2.0. Jest to podstawowa zasada używana do konfigurowania punktów końcowych OAuth 2.0 w Apigee Edge.
Wskazówka: więcej informacji o protokole OAuth w Apigee Edge znajdziesz na stronie głównej OAuth. Znajdziesz w niej linki do zasobów, przykładów, filmów i innych treści. Zobacz przykład zaawansowanego protokołu OAuth na GitHubie, aby zobaczyć, jak ta zasada jest używana w działającej aplikacji.
Przykłady
VerifyAccessToken
VerifyAccessToken
Ta konfiguracja zasad OAuthV2 (z operacją VerificationAccessToken) weryfikuje, czy token dostępu przesłany do Apigee Edge jest prawidłowy. Po uruchomieniu tej operacji zasady Edge szuka w żądaniu prawidłowego tokena dostępu. Jeśli token dostępu jest prawidłowy, żądanie może być kontynuowane. Jeśli wartość jest nieprawidłowa, przetwarzanie zostanie zatrzymane, a w odpowiedzi zostanie zwrócony 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 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 za pomocą elementu <AccessToken>
.
GenerateAccessToken
Generowanie tokenów dostępu
Przykłady pokazujące, jak poprosić o tokeny dostępu dla każdego z obsługiwanych typów uwierzytelniania, znajdziesz w sekcji Wysyłanie żądań tokenów dostępu i kodów autoryzacji. Omawiany temat zawiera przykłady takich operacji:
GenerateAuthorizationCode
Wygeneruj kod autoryzacji
Instrukcje dotyczące żądania kodu autoryzacji znajdziesz w sekcji Żądanie kodu autoryzacji.
RefreshAccessToken
Odświeżanie tokena dostępu
Przykłady pokazujące, jak zażądać tokenów dostępu za pomocą tokena odświeżania, znajdziesz w sekcji Odświeżanie tokena dostępu.
Token przepływu odpowiedzi
Generowanie tokena dostępu w przepływie odpowiedzi
Czasami w procesie odpowiedzi konieczne może być wygenerowanie tokena dostępu. Może to być na przykład w odpowiedzi na niestandardową weryfikację wykonaną w usłudze backendu. W tym przykładzie przypadek użycia wymaga zarówno tokena dostępu, jak i tokena odświeżania, co zapobiega niejawnemu typowi uwierzytelnienia. W tym przypadku do wygenerowania tokena użyjemy typu uwierzytelnienia hasła. Jak zobaczysz, kluczem do działania jest przekazanie nagłówka żądania autoryzacji z zasadą JavaScript.
Przyjrzyjmy się najpierw przykładowej zasadzie:
<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 (Nieautoryzowane), mimo że w zasadzie określone są prawidłowe parametry logowania. Aby rozwiązać ten problem, musisz ustawić nagłówek żądania autoryzacji.
Nagłówek autoryzacji musi zawierać schemat dostępu podstawowego z zakodowanym w standardzie Base64 identyfikatorem client_id:client_secret.
Możesz dodać ten nagłówek z zasadą JavaScript umieszczoną tuż przed zasadą OAuthV2 w ten 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 podstawowych danych uwierzytelniających”.
Dokumentacja elementu
Dokumentacja zasad zawiera opis elementów i atrybutów zasady OAuthV2.
Przykładowa zasada przedstawiona poniżej to jedna z wielu możliwych konfiguracji. Ten przykład pokazuje zasadę OAuthV2 skonfigurowaną na potrzeby 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">
Tabela poniżej zawiera opis atrybutów wspólnych dla wszystkich elementów nadrzędnych zasad:
Atrybut | Opis | Domyślne | Obecność |
---|---|---|---|
name |
Wewnętrzna nazwa zasady. Wartość atrybutu Opcjonalnie możesz użyć elementu |
Nie dotyczy | Wymagane |
continueOnError |
Ustaw wartość Ustaw jako |
false | Opcjonalnie |
enabled |
Ustaw jako Ustaw wartość |
prawda | Opcjonalnie |
async |
Ten atrybut został wycofany. |
false | Wycofano |
Element <DisplayName>
Użyj oprócz atrybutu name
, aby oznaczyć zasadę w edytorze serwera proxy interfejsu zarządzania inną nazwą w języku naturalnym.
<DisplayName>Policy Display Name</DisplayName>
Domyślne |
Nie dotyczy Jeśli pominiesz ten element, zostanie użyta wartość atrybutu |
---|---|
Obecność | Opcjonalnie |
Typ | Ciąg znaków |
Element <AccessToken>
<AccessToken>request.header.access_token</AccessToken>
Domyślnie VerificationAccessToken oczekuje, że token dostępu zostanie wysłany w nagłówku Authorization
.
Za pomocą tego elementu możesz zmienić to ustawienie. Na przykład request.queryparam.access_token
wskazuje, że token dostępu powinien być obecny jako parametr zapytania o nazwie access_token
.
<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 właściwość
<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żywane razem z operacjami: |
|
Element <AccessTokenPrefix>
<AccessTokenPrefix>Bearer</AccessTokenPrefix>
Domyślnie VerificationAccessToken wymaga, aby token dostępu został wysłany w nagłówku autoryzacji jako token okaziciela. Na przykład:
-H "Authorization: Bearer Rft3dqrs56Blirls56a"
Obecnie jedynym obsługiwanym prefiksem jest nośnik.
Domyślnie: |
Nośnik |
Obecność: |
Opcjonalnie |
Typ: | Ciąg znaków |
Prawidłowe wartości: |
Nośnik |
Używane razem z operacjami: |
|
Element <AppEndUser>
<AppEndUser>request.queryparam.app_enduser</AppEndUser>
Jeśli identyfikator użytkownika aplikacji musi być wysłany do serwera autoryzacji, ten element pozwala określić, gdzie Edge ma szukać identyfikatora użytkownika. Można go wysłać na przykład jako parametr zapytania lub w nagłówku HTTP.
Na 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ć elementu AppEndUser w nagłówku HTTP, ustaw tę wartość na request.header.app_enduser
.
Udostępnienie tego ustawienia umożliwia uwzględnianie 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 według identyfikatora użytkownika. Więcej informacji znajdziesz w artykule o włączaniu pobierania i unieważniania tokenów dostępu OAuth 2.0 według identyfikatora użytkownika, identyfikatora aplikacji lub obu tych parametrów.
Domyślnie: |
Nie dotyczy |
Obecność: |
Opcjonalnie |
Typ: | Ciąg znaków |
Prawidłowe wartości: |
Każda zmienna przepływu dostępna dla zasady w czasie działania. |
Używane z typami uwierzytelnienia: |
|
<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>
Za pomocą tego elementu możesz dodać atrybuty niestandardowe do tokena dostępu lub kodu autoryzacji. Możesz na przykład umieścić w tokenie dostępu identyfikator użytkownika lub sesji, 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 nie można rozpoznać zmiennej, zwracany jest ciąg znaków domyślny.
Więcej informacji o używaniu tego elementu znajdziesz w artykule o dostosowywaniu 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 razem z wszelkimi ustawionymi atrybutami niestandardowymi. W niektórych przypadkach możesz 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ć dla parametru display 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 została zachowana. 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, pierwotne atrybuty niestandardowe z tokena dostępu pojawią się w odpowiedzi tokena odświeżania. Dzieje się tak, ponieważ Edge nie zapamiętuje, że atrybut display
był pierwotnie ustawiony na false
w zasadach generowania tokenów dostępu – atrybut niestandardowy jest po prostu częścią metadanych tokena dostępu.
Podobnie będzie, jeśli dodasz do kodu autoryzacji atrybuty niestandardowe – gdy token dostępu zostanie wygenerowany za pomocą tego kodu, atrybuty niestandardowe pojawią się w odpowiedzi tokena dostępu. Pamiętaj, że może to nie być zgodne z Twoimi oczekiwaniami.
Aby ukryć atrybuty niestandardowe w takich przypadkach, masz do wyboru te opcje:
- Wyraźnie zresetuj atrybuty niestandardowe w zasadzie tokenów odświeżania i ustaw ich wyświetlanie na false (fałsz). W takim przypadku może być konieczne pobranie oryginalnych wartości niestandardowych z pierwotnego tokena dostępu za pomocą zasady GetOAuthV2Info.
- Użyj zasady JavaScript przetwarzania po przetwarzaniu, 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: |
|
Obecność: |
Opcjonalnie |
Prawidłowe wartości: |
|
Używane z typami uwierzytelnienia: |
|
Element <ClientId>
<ClientId>request.formparam.client_id</ClientId>
W kilku przypadkach aplikacja kliencka musi wysłać identyfikator klienta do serwera autoryzacji. Ten element pozwala określić, gdzie Edge ma szukać identyfikatora klienta. Jedyną prawidłową lokalizacją, jaką możesz ustawić, jest lokalizacja domyślna, czyli zmienna przepływu request.formparam.client_id
. Ustawienie ClientId
na dowolną inną zmienną nie jest obsługiwane.
Zobacz też Wysyłanie prośby o tokeny dostępu i kody autoryzacji.
Domyślnie: |
request.formparam.client_id (zakodowany w adresie URL w formacie x-www i określony w treści żądania) |
Obecność: |
Opcjonalnie |
Typ: | Ciąg znaków |
Prawidłowe wartości: | Zmienna przepływu: request.formparam.client_id |
Używane z typami uwierzytelnienia: |
Można jej również używać z operacją GenerateAuthorizationCode. |
Element <Code>
<Code>request.queryparam.code</Code>
W procedurze typu uwierzytelnienia autoryzacji klient musi przesłać kod autoryzacji do serwera autoryzacji (Apigee Edge). Ten element pozwala określić, gdzie Edge ma szukać kodu autoryzacji. Możesz go na przykład wysłać jako parametr zapytania, nagłówek HTTP lub parametr formularza (domyślnie).
Zmienna request.queryparam.auth_code
wskazuje, że kod autoryzacji powinien znajdować się jako parametr zapytania, np. ?auth_code=AfGlvs9
. Aby na przykład wymagać kodu autoryzacji w nagłówku HTTP, ustaw tę wartość na request.header.auth_code
. Zapoznaj się też z prośbą o tokeny dostępu i kody autoryzacji.
Domyślnie: |
request.formparam.code (zakodowany w formacie x-www-form-url zakodowany w treści żądania) |
Obecność: |
opcjonalnie |
Typ: | Ciąg znaków |
Prawidłowe wartości: | Każda zmienna przepływu dostępna dla zasady w czasie działania |
Używane z typami uwierzytelnienia: | authorization_code |
Element<ExpiresIn>
<ExpiresIn>10000</ExpiresIn>
Wymusza wygaśnięcie tokenów dostępu i kodów autoryzacji (w milisekundach). W przypadku tokenów odświeżania użyj <RefreshTokenExpiresIn>
. Wartość wygaśnięcia ważności to wartość wygenerowana przez system plus wartość <ExpiresIn>
. Jeśli <ExpiresIn>
ma wartość -1, token lub kod wygasa zgodnie z maksymalnym czasem wygaśnięcia 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 działania za pomocą zakodowanej na stałe wartości domyślnej lub przez odwołanie 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 zasadzie. Na przykład: kvm.oauth.expires_in
.
W przypadku Apigee Edge dla chmury publicznej Edge przechowuje następujące encje w pamięci podręcznej przez co najmniej 180 sekund po uzyskaniu dostępu do encji.
- tokeny dostępu OAuth. Oznacza to, że unieważniony token może nadal działać przez maksymalnie 3 minuty, aż do wygaśnięcia limitu pamięci podręcznej.
- Jednostki usługi zarządzania kluczami (KMS) (aplikacje, deweloperzy, produkty API).
- Atrybuty niestandardowe tokenów OAuth i encji KMS.
Poniższa sekcja określa też 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 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 w społeczności Apigee.
Domyślnie wygasłe tokeny dostępu są automatycznie usuwane z systemu Apigee Edge po 3 dniach po wygaśnięciu. Zobacz też Trwałe usuwanie tokenów dostępu
Private Cloud: w przypadku instalacji Edge dla Private Cloud wartość domyślną jest ustawiana przez właściwość conf_keymanagement_oauth_auth_code_expiry_time_in_millis
.
Aby ustawić tę właściwość:
- Otwórz plik
message-processor.properties
w edytorze. Jeśli plik nie istnieje, utwórz go:vi /opt/apigee/customer/application/message-processor.properties
- Ustaw odpowiednią usługę:
conf_keymanagement_oauth_auth_code_expiry_time_in_millis=3600000
- Upewnij się, że plik właściwości należy do użytkownika „apigee”:
chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- Ponownie uruchom procesor wiadomości.
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Domyślnie: |
Jeśli jej nie określisz, system zastosuje wartość domyślną skonfigurowaną na poziomie systemu. |
Obecność: |
Opcjonalnie |
Typ: | Liczba całkowita |
Prawidłowe wartości: |
|
Używane z typami uwierzytelnienia: |
Używany także z operacją GenerateAuthorizationCode. |
Element <ExternalAccessToken>
<ExternalAccessToken>request.queryparam.external_access_token</ExternalAccessToken>
Informuje Apigee Edge, gdzie znajduje się zewnętrzny token dostępu (token dostępu, który nie został wygenerowany przez Apigee Edge).
Zmienna request.queryparam.external_access_token
wskazuje, że zewnętrzny token dostępu powinien być obecny jako parametr zapytania, np. ?external_access_token=12345678
. Aby na przykład wymagać tokena dostępu zewnętrznego w nagłówku HTTP, ustaw tę wartość na request.header.external_access_token
. Zapoznaj się też z informacjami o używaniu tokenów OAuth innych firm.
Element <ExternalAuthorization>
<ExternalAuthorization>true</ExternalAuthorization>
Jeśli ten element ma wartość Fałsz lub nie istnieje, Edge weryfikuje parametry client_id i client_secret w normalny sposób pod kątem magazynu autoryzacji Apigee Edge. Użyj tego elementu, jeśli chcesz pracować z tokenami OAuth innych firm. Szczegółowe informacje o używaniu tego elementu znajdziesz w artykule Używanie tokenów OAuth innych firm.
Domyślnie: |
false |
Obecność: |
Opcjonalnie |
Typ: | Wartość logiczna |
Prawidłowe wartości: | prawda lub fałsz |
Używane z typami uwierzytelnienia: |
|
Element <ExternalAuthorizationCode>
<ExternalAuthorizationCode>request.queryparam.external_auth_code</ExternalAuthorizationCode>
Informuje Apigee Edge, gdzie znajduje się zewnętrzny kod autoryzacji (kod autoryzacji nie wygenerowany przez Apigee Edge).
Zmienna request.queryparam.external_auth_code
wskazuje, że zewnętrzny kod autoryzacji powinien znajdować się jako parametr zapytania, np. ?external_auth_code=12345678
. Aby na przykład wymagać zewnętrznego kodu autoryzacji w nagłówku HTTP, ustaw tę wartość na request.header.external_auth_code
. Zapoznaj się też z informacjami o używaniu tokenów OAuth innych firm.
Element <ExternalOdświeżToken>
<ExternalRefreshToken>request.queryparam.external_refresh_token</ExternalRefreshToken>
Informuje Apigee Edge, gdzie znajduje się zewnętrzny token odświeżania (token odświeżania nie został wygenerowany przez Apigee Edge).
Zmienna request.queryparam.external_refresh_token
wskazuje, że zewnętrzny token odświeżania powinien być obecny jako parametr zapytania, np. ?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
. Zapoznaj się też z informacjami o używaniu tokenów OAuth innych firm.
Element <GenerateResponse>
<GenerateResponse enabled='true'/>
Jeśli zasada ma wartość true
, zasada generuje i zwraca odpowiedź. Na przykład w przypadku metody 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 ustawiona jest wartość 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
jest wypełniana nowo wygenerowanym kodem autoryzacji. Pamiętaj, że parametr expires_in jest wyrażony w sekundach w odpowiedzi.
Domyślnie: |
false |
Obecność: |
Opcjonalnie |
Typ: | string, |
Prawidłowe wartości: | prawda lub fałsz |
Używane z typami uwierzytelnienia: |
|
Element <GenerateErrorResponse>
<GenerateErrorResponse enabled='true'/>
Jeśli zasada ma wartość true
, zasada generuje i zwraca odpowiedź, jeśli atrybut kontynuacji z błędem ma wartość Prawda. Jeśli ustawiona jest wartość false
, odpowiedź nie jest wysyłana. Zamiast tego zestaw zmiennych przepływu jest wypełniany wartościami powiązanymi z funkcją zasady.
Domyślnie: |
false |
Obecność: |
Opcjonalnie |
Typ: | string, |
Prawidłowe wartości: | prawda lub fałsz |
Używane z typami uwierzytelnienia: |
|
<GrantType>
<GrantType>request.queryparam.grant_type</GrantType>
Informuje zasadę, gdzie znajduje się parametr typu uwierzytelnienia przekazywany w żądaniu. Zgodnie ze specyfikacją OAuth 2.0 typ uwierzytelnienia musi być podawany z żądaniami 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
wskazuje, że hasło powinno występować jako parametr zapytania, np. ?grant_type=password
.
Aby na przykład wymagać typu uwierzytelnienia w nagłówku HTTP, ustaw tę wartość na request.header.grant_type
. Zobacz też Wysyłanie prośby o tokeny dostępu i kody autoryzacji.
Domyślnie: |
request.formparam.grant_type (zakodowany w formacie x-www-form-url zakodowany w treści żądania) |
Obecność: |
Opcjonalnie |
Typ: | string, |
Prawidłowe wartości: | Zmienna (jak opisano powyżej). |
Używane z typami uwierzytelnienia: |
|
Element <Operation>
<Operation>GenerateAuthorizationCode</Operation>
Operacja OAuth 2.0 wykonywana przez zasadę.
Domyślnie: |
Jeśli |
Obecność: |
Opcjonalnie |
Typ: | Ciąg znaków |
Prawidłowe wartości: |
|
Element <PassWord>
<PassWord>request.queryparam.password</PassWord>
Ten element jest używany tylko z typem przyznania hasła. 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>
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, że powinny znaleźć wartości (domyślnie) w parametrach formularzy o nazwach username
i password
. W przypadku braku wartości zasada zwraca błąd. Za pomocą elementów <PassWord>
i <UserName>
możesz 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 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
.
Zasada OAuthV2 nie ma żadnego innego działania z tymi wartościami danych logowania. Edge po prostu sprawdza ich obecność. To deweloper interfejsu API musi pobrać żądanie wartości i wysłać je do dostawcy tożsamości przed uruchomieniem zasady generowania tokenów.
Zobacz też Wysyłanie prośby o tokeny dostępu i kody autoryzacji.
Domyślnie: |
request.formparam.password (zakodowany w formacie x-www-formularz i określony w treści żądania) |
Obecność: |
Opcjonalnie |
Typ: | Ciąg znaków |
Prawidłowe wartości: | Dowolna zmienna przepływu dostępna dla zasady w czasie działania. |
Używane z typami uwierzytelnienia: | 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 kodem autoryzacji i niejawnymi typami uwierzytelnienia. Identyfikator URI przekierowania informuje serwer autoryzacji (Edge), gdzie należy wysłać kod autoryzacji (w przypadku typu uwierzytelnienia kodu autoryzacji) lub token dostępu (w przypadku niejawnego typu uwierzytelnienia). Ważne jest, aby wiedzieć, kiedy ten parametr jest wymagany, kiedy jest opcjonalny i jak go używać:
-
(Wymagane) Jeśli URL wywołania zwrotnego jest zarejestrowany w aplikacji dewelopera, która jest powiązana z kluczami klienta żądania, i jeśli żądanie zawiera
redirect_uri
, muszą one być dokładnie takie same. W przeciwnym razie zwracany jest błąd. Informacje o rejestrowaniu aplikacji dla programistó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 URL wywołania zwrotnego jest zarejestrowany, ale w żądaniu brakuje
redirect_uri
, Edge przekierowuje na zarejestrowany adres URL wywołania zwrotnego. - (Wymagane) Jeśli URL wywołania zwrotnego nie jest zarejestrowany, wymagany jest parametr
redirect_uri
. Pamiętaj, że w tym przypadku Edge akceptuje DOWOLNY URL. To zgłoszenie może zagrażać bezpieczeństwu, dlatego należy go używać tylko w przypadku zaufanych aplikacji klienckich. Jeśli aplikacje klienckie nie są zaufane, najlepiej jest zawsze wymagać zarejestrowania adresu URL wywołania zwrotnego.
Możesz wysyłać ten parametr w parametrze zapytania lub w nagłówku. Zmienna request.queryparam.redirect_uri
wskazuje, że parametr RedirectUri powinien być obecny jako parametr zapytania, np. ?redirect_uri=login.myapp.com
. Aby na przykład wymagać parametru RedirectUri w nagłówku HTTP, ustaw tę wartość na request.header.redirect_uri
. Zapoznaj się też z prośbą o tokeny dostępu i kody autoryzacji.
Domyślnie: |
request.formparam.redirect_uri (adres URL zakodowany w formacie x-www i określony w treści żądania) |
Obecność: |
Opcjonalnie |
Typ: | Ciąg znaków |
Prawidłowe wartości: | Dowolna zmienna przepływu dostępna w zasadzie w czasie działania |
Używane z typami uwierzytelnienia: |
Jest również używany w operacji GenerateAuthorizationCode. |
Element <OdświeżToken>
<RefreshToken>request.queryparam.refreshtoken</RefreshToken>
Jeśli żądasz tokena dostępu za pomocą tokena odświeżania, musisz podać w żądaniu token odświeżania. Ten element pozwala określić, gdzie Edge ma szukać tokena odświeżania. Można go wysłać na przykład jako parametr zapytania, nagłówek HTTP lub parametr formularza (domyślnie).
Zmienna request.queryparam.refreshtoken
wskazuje, że token odświeżania powinien znajdować się jako parametr zapytania, np. ?refresh_token=login.myapp.com
. Aby na przykład wymagać elementu refreshToken w nagłówku HTTP, ustaw tę wartość na request.header.refresh_token
. Zapoznaj się też z prośbą o tokeny dostępu i kody autoryzacji.
Domyślnie: |
request.formparam.refresh_token (zakodowany w adresie URL x-www-formularz i podany w treści żądania) |
Obecność: |
Opcjonalnie |
Typ: | Ciąg znaków |
Prawidłowe wartości: | Dowolna zmienna przepływu dostępna w zasadzie w czasie działania |
Używane z typami uwierzytelnienia: |
|
Element <OdświeżTokenExpiresIn>
<RefreshTokenExpiresIn>1000</RefreshTokenExpiresIn>
Wymusza wygaśnięcie tokenów odświeżania w milisekundach. Wartość czasu wygaśnięcia to wartość wygenerowana przez system plus wartość <RefreshTokenExpiresIn>
. Jeśli <RefreshTokenExpiresIn>
ma wartość -1, token odświeżania wygaśnie zgodnie z maksymalną datą wygaśnięcia tokena odświeżania OAuth. Jeśli nie podasz <RefreshTokenExpiresIn>
, domyślnie okres ważności jest nieokreślony.
Czas wygaśnięcia można też ustawić w czasie działania za pomocą zakodowanej na stałe wartości domyślnej lub przez odwołanie 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 zasadzie. Na przykład: kvm.oauth.expires_in
.
Poniższa sekcja określa też 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 dla Private Cloud wartość domyślną jest ustawiana przez właściwość conf_keymanagement_oauth_refresh_token_expiry_time_in_millis
.
Aby ustawić tę właściwość:
- Otwórz plik
message-processor.properties
w edytorze. Jeśli plik nie istnieje, utwórz go:vi /opt/apigee/customer/application/message-processor.properties
- Ustaw odpowiednią usługę:
conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
- Upewnij się, że plik właściwości należy do użytkownika „apigee”:
chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- Ponownie uruchom procesor wiadomości.
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Domyślnie: |
Jeśli jej nie określisz, system zastosuje wartość domyślną skonfigurowaną na poziomie systemu. |
Obecność: |
Opcjonalnie |
Typ: | Liczba całkowita |
Prawidłowe wartości: |
|
Używane z typami uwierzytelnienia: |
|
"refresh_token_expires_in" : "0"
.Element <ResponseType>
<ResponseType>request.queryparam.response_type</ResponseType>
Ten element informuje Edge o typie uwierzytelnienia, którego żąda aplikacja kliencka. Jest używany tylko z kodem autoryzacji i niejawnymi przepływami typu uwierzytelnienia.
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 szuka typu odpowiedzi w nagłówku żądania. Zobacz też Wysyłanie prośby o tokeny dostępu i kody autoryzacji.
Domyślnie: |
request.formparam.response_type (zakodowany w formacie x-www-form-url zakodowany 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 kodem autoryzacji) lub token (w przypadku niejawnego typu uwierzytelnienia) |
Używane z typami uwierzytelnienia: |
|
Element <ReuserefreshToken>
<ReuseRefreshToken>true</ReuseRefreshToken>
Jeśli ma wartość true
, istniejący token odświeżania jest używany ponownie, dopóki nie wygaśnie. Jeśli false
, po przedstawieniu prawidłowego tokena odświeżania przez Apigee Edge wystawiany jest nowy token odświeżania.
Domyślnie: |
|
Obecność: |
opcjonalnie |
Typ: | boolean |
Prawidłowe wartości: |
|
Używane z typem uwierzytelnienia: |
|
Element <Scope>
<Scope>request.queryparam.scope</Scope>
Jeśli ten element występuje w jednej z zasad GenerateAccessToken lub GenerateAuthorizationCode, jest używany do określania zakresów, które mają przyznać token lub kod. Te wartości są zwykle przekazywane do zasady w żądaniu z aplikacji klienckiej. Możesz skonfigurować element tak, aby pobierał zmienną przepływu, co daje możliwość wyboru sposobu przekazywania zakresów w żądaniu. W poniższym przykładzie request.queryparam.scope
wskazuje, że zakres powinien występować jako parametr zapytania, np. ?scope=READ
. Aby na przykład wymagać zakresu w nagłówku HTTP, ustaw tę wartość na request.header.scope
.
Jeśli ten element pojawia się w zasadzie „VerifyAccessToken”, jest używany do określania zakresów, które powinna egzekwować zasada. W zasadach tego typu wartość musi być „zakodowaną na stałe” nazwą zakresu – nie można używać zmiennych. Na przykład:
<Scope>A B</Scope>
Zapoznaj się też z informacjami o korzystaniu z zakresów OAuth2 oraz o żądaniu tokenów dostępu i kodów autoryzacji.
Domyślnie: |
Brak zakresu |
Obecność: |
Opcjonalnie |
Typ: | Ciąg znaków |
Prawidłowe wartości: |
Jeśli jest używany z zasadami Wygeneruj*, zmienną przepływu. Jeśli jest używany z VerAccessToken: oddzielona spacjami lista nazw zakresów (ciągi). |
Używane z typami uwierzytelnienia: |
|
Element <State>
<State>request.queryparam.state</State>
Jeśli aplikacja klienta musi wysyłać informacje o stanie do serwera autoryzacji, ten element pozwala określić, gdzie Edge ma szukać wartości stanu. Można go wysłać na przykład jako parametr zapytania lub w nagłówku HTTP. Wartość stanu jest zwykle używana jako środek bezpieczeństwa zapobiegający atakom typu CSRF.
Na przykład request.queryparam.state
wskazuje, że stan powinien występować jako parametr zapytania, np. ?state=HjoiuKJH32
. Aby na przykład wymagać stanu w nagłówku HTTP, ustaw tę wartość na request.header.state
. Zapoznaj się też z informacjami 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: | Każda zmienna przepływu dostępna dla zasady w czasie działania |
Używane z typami uwierzytelnienia: |
|
Element <StoreToken>
<StoreToken>true</StoreToken>
Ustaw ten element na true
, gdy element <ExternalAuthorization>
ma wartość true
. Element <StoreToken>
informuje Apigee Edge, że ma zapisać token dostępu zewnętrznego. W przeciwnym razie nie zostaną zachowane.
Domyślnie: |
false |
Obecność: |
Opcjonalnie |
Typ: | Wartość logiczna |
Prawidłowe wartości: | prawda lub fałsz |
Używane z typami uwierzytelnienia: |
|
Element <SupportedGrantTypes>/<GrantType>
<SupportedGrantTypes> <GrantType>authorization_code</GrantType> <GrantType>client_credentials</GrantType> <GrantType>implicit</GrantType> <GrantType>password</GrantType> </SupportedGrantTypes>
Określa typy uwierzytelniania obsługiwane przez punkt końcowy tokena OAuth w Apigee Edge. Punkt końcowy może obsługiwać wiele typów uwierzytelnienia (to znaczy, że pojedynczy punkt końcowy można skonfigurować tak, aby rozprowadzał tokeny dostępu dla wielu typów uwierzytelnienia). Więcej informacji o punktach końcowych znajdziesz w artykule Omówienie punktów końcowych OAuth. Typ przyznania jest przekazywany w żądaniach tokenów w parametrze grant_type
.
Jeśli nie określono żadnych obsługiwanych typów uwierzytelnienia, jedyne dozwolone typy uwierzytelnienia to authorization_code
i implicit
. Zobacz też element <GrantType> (jest to element wyższego poziomu, który służy do określania miejsca, w którym Apigee Edge ma szukać parametru grant_type
przekazywanego w żądaniu klienta. Edge dopilnuje, aby wartość parametru grant_type
była zgodna z jednym z obsługiwanych typów uwierzytelniania.
Domyślnie: |
kod_autoryzacji i implicit |
Obecność: |
Wymagane |
Typ: | Ciąg znaków |
Prawidłowe wartości: |
|
Element <Tokens>/<Token>
Używana z operacjami ValidateToken i InvalidateToken. Zobacz też Zatwierdzanie i cofanie tokenów dostępu. Element <Token> określa zmienną przepływu definiującą źródło tokena do unieważnienia. Jeśli deweloperzy mają przesyłać tokeny dostępu jako parametry zapytania o nazwie access_token
, na przykład użyj request.queryparam.access_token
.
Element <UserName>
<UserName>request.queryparam.user_name</UserName>
Ten element jest używany tylko z typem przyznania hasła. 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>
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, że powinny znaleźć wartości (domyślnie) w parametrach formularzy o nazwach username
i password
. W przypadku braku wartości zasada zwraca błąd. Za pomocą elementów <PassWord>
i <UserName>
możesz 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ć podawania nazwy użytkownika w nagłówku HTTP, ustaw tę wartość na request.header.username
.
Zasada OAuthV2 nie ma żadnego innego działania z tymi wartościami danych logowania. Edge po prostu sprawdza ich obecność. To deweloper interfejsu API musi pobrać żądanie wartości i wysłać je do dostawcy tożsamości przed uruchomieniem zasady generowania tokenów.
Zobacz też Wysyłanie prośby o tokeny dostępu i kody autoryzacji.
Domyślnie: |
request.formparam.username (adres URL zakodowany w formacie x-www i określony w treści żądania) |
Obecność: |
Opcjonalnie |
Typ: | Ciąg znaków |
Prawidłowe wartości: | Dowolne ustawienie zmiennej. |
Używane z typami uwierzytelnienia: | hasło |
Weryfikowanie tokenów dostępu
Po skonfigurowaniu punktu końcowego tokena dla serwera proxy interfejsu API odpowiednia zasada OAuthV2, która określa operację VerifyAccessToken
, jest dołączana do procesu, który ujawnia zabezpieczony zasób.
Aby na przykład upewnić się, że wszystkie żądania wysyłane 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ą zweryfikowane, dołącz zasadę do żądania PreFlow ProxyEndpoint w ten sposób:
<PreFlow> <Request> <Step><Name>VerifyOAuthAccessToken</Name></Step> </Request> </PreFlow>
Poniższe elementy opcjonalne mogą posłużyć do zastąpienia domyślnych ustawień operacjiVerifyAccessToken.
Nazwa | Opis |
---|---|
Zakres |
Lista zakresów oddzielonych spacjami. Weryfikacja się powiedzie, jeśli w tokenie dostępu będzie znajdować się co najmniej 1 z wymienionych zakresów. Na przykład ta zasada sprawdzi token dostępu, aby upewnić się, że zawiera on co najmniej 1 z wymienionych zakresów. Jeśli dostępna jest wartość 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ć prezentowany przez aplikację w nagłówku HTTP autoryzacji zgodnie ze specyfikacją protokołu OAuth 2.0. Użyj tego ustawienia, jeśli token dostępu ma się znajdować w niestandardowej lokalizacji, np. w parametrze zapytania lub nagłówku HTTP o nazwie innej niż Autoryzacja. |
Zobacz też Weryfikowanie tokenów dostępu oraz Żądanie tokenów dostępu i kodów autoryzacji.
Określanie lokalizacji zmiennych żądania
W przypadku każdego typu uwierzytelnienia zasada przyjmuje założenia dotyczące lokalizacji lub wymaganych informacji w komunikatach z żądaniami. 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ć lokalizację kodu autoryzacji, identyfikator klienta, identyfikator URI przekierowania oraz zakres. Możesz je określić jako nagłówki HTTP, parametry zapytania lub parametry formularza.
Poniższy przykład pokazuje, jak 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> ...
Jeśli jest to konieczne, aby obsługiwać aplikacje klienckie, możesz łączyć i dopasowywać nagłówki oraz parametry zapytania:
... <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> ...
Dla każdego parametru 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 lub aplikacji wykonywanych w procesie przekazywania serwera proxy interfejsu API.
OperacjaVerifyAccessToken
OperacjaVerifyAccessToken jest wykonywana, a w kontekście wykonywania serwera proxy jest zapełniana duża liczba zmiennych przepływu. Te zmienne udostępniają właściwości powiązane z tokenem dostępu, aplikacją dewelopera, programistą i firmą. Możesz na przykład użyć zasady AssignMessage lub JavaScript, by odczytać dowolne z tych zmiennych i użyć ich w razie potrzeby na późniejszym etapie procesu. Zmienne te mogą też być przydatne podczas debugowania.
proxy.pathsuffix
). Jednoznaczne ustawienie zmiennej Flow.resource.name nie jest wymagane.
Jeśli usługi API nie są skonfigurowane z prawidłowymi środowiskami i serwerami proxy interfejsu API, właściwość flow.resource.name
musi być jawnie ustawiona tak, aby wypełniała zmienne usług API w procesie. Szczegółowe informacje o konfiguracji usługi znajdziesz w artykule o publikowaniu interfejsów API przy użyciu interfejsu Edge Management API.
Zmienne związane z tokenem
Zmienne | Opis |
---|---|
organization_name |
Nazwa organizacji, w której wykonuje się serwer proxy. |
developer.id |
Identyfikator dewelopera powiązanego z zarejestrowaną aplikacją kliencką. |
developer.app.name |
Nazwa dewelopera powiązanego z zarejestrowaną aplikacją kliencką. |
client_id |
Identyfikator klienta zarejestrowanej aplikacji klienckiej. |
grant_type |
Typ uwierzytelnienia powiązany z prośbą. |
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 wydania tokena dostępu wyrażona w czasie uniksowym w milisekundach. |
expires_in |
Czas ważności tokena dostępu. Wyrażona w sekundach. Mimo że element ExpiresIn ustawia czas wygaśnięcia w milisekundach, w zmiennych odpowiedzi tokena i przepływu wartość jest wyrażana w sekundach. |
status |
stan tokena dostępu (np. zatwierdzony lub unieważniony); |
scope |
Zakres (jeśli dotyczy) powiązany z tokenem dostępu. |
apiproduct.<custom_attribute_name> |
Nazwany atrybut niestandardowy usługi API powiązanej z zarejestrowaną aplikacją kliencką. |
apiproduct.name |
Nazwa usługi API powiązanej z zarejestrowaną aplikacją kliencką. |
revoke_reason |
(Tylko Apigee hybrydowe) Wskazuje powód unieważnienia tokena dostępu. Wartością może być |
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 |
zatwierdzone lub unieważnione |
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 klienckiej. |
Zmienne specyficzne dla dewelopera
Jeśli typ app.appType to „Company”, atrybuty firmy zostaną wypełnione, a jeśli app.appType ma wartość „developer”, atrybuty programisty zostaną wypełnione.
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 specyficzne dla firmy
Jeśli typ app.appType to „Company”, atrybuty firmy zostaną wypełnione, a jeśli app.appType ma wartość „developer”, atrybuty programisty zostaną wypełnione.
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 WygenerujAuthorizationCode
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 protokołu 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. Zwróć uwagę, że zmienne tokena odświeżania nie mają zastosowania do procesu przyznawania danych logowania 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 |
Wygaśnięcie tokena. Szczegóły znajdziesz w elemencie <ExpiresIn>. Pamiętaj, że w odpowiedzi parametr expires_in jest wyrażony 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 |
Ustawiono 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 odpowiednią aplikacją dewelopera z tym tokenem. |
refresh_count |
|
refresh_token |
Wygenerowany token odświeżania. Tokeny odświeżania nie są generowane dla typu przyznania danych logowania klienta. |
refresh_token_expires_in |
Czas życia tokena odświeżania w sekundach. |
refresh_token_issued_at |
Ta wartość czasu jest ciągiem znaków reprezentującym odpowiednią 32-bitową wartość sygnatury czasowej. Na przykład „Śr, 21 sie 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 po pomyślnym wykonaniu operacji GenerateAccessTokenImplicit dla przepływu niejawnego typu uwierzytelnienia.
Prefiks: oauthv2accesstoken.{policy_name}.{variable_name}
Przykład: oauthv2accesstoken.RefreshTokenPolicy.access_token
Zmienna | Opis |
---|---|
oauthv2accesstoken.access_token |
Token dostępu generowany podczas wykonywania zasady. |
oauthv2accesstoken.{policy_name}.expires_in |
Wartość wygaśnięcia tokena w sekundach. Szczegółowe informacje znajdziesz w elemencie <ExpiresIn>. |
Informacje o błędach
W tej sekcji opisujemy kody błędów i komunikaty o błędach, które są zwracane, oraz zmienne błędów ustawiane przez Edge, gdy ta zasada wywołuje błąd. Te informacje są ważne, jeśli opracowujesz reguły dotyczące błędów do obsługi takich błędów. Więcej informacji znajdziesz w sekcjach Co musisz wiedzieć o błędach zasad i Postępowanie w przypadku błędów.
Błędy w czasie wykonywania
Te błędy mogą wystąpić podczas wykonywania zasady.
Kod błędu | Stan HTTP | Przyczyna | Odrzucono według operacji |
---|---|---|---|
steps.oauth.v2.access_token_expired |
401 | Token dostępu wygasł. |
VerAccessToken |
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 żadnej usłudze API powiązanej z tokenem dostępu. | VerifyAccessToken |
steps.oauth.v2.FailedToResolveAccessToken |
500 | Zasada powinna znaleźć token dostępu w zmiennej określonej w elemencie <AccessToken> , ale nie udało się znaleźć tej zmiennej. |
GenerateAccessToken |
steps.oauth.v2.FailedToResolveAuthorizationCode |
500 | Zasada powinna znaleźć kod autoryzacji w zmiennej określonej w elemencie <Code> , ale nie udało się znaleźć tej zmiennej. |
GenerateAuthorizationCode |
steps.oauth.v2.FailedToResolveClientId |
500 | Zasada powinna znaleźć identyfikator klienta w zmiennej określonej w elemencie <ClientId> , ale nie udało się znaleźć tej zmiennej. |
GenerateAccessToken WygenerujAuthorizationCode GenerateAccessTokenImplicitGrant refreshAccessToken |
steps.oauth.v2.FailedToResolveRefreshToken |
500 | Zasada powinna znaleźć token odświeżania w zmiennej określonej w elemencie <RefreshToken> , ale nie udało się znaleźć tej zmiennej. |
RefreshAccessToken |
steps.oauth.v2.FailedToResolveToken |
500 | Zasada powinna znaleźć token w zmiennej określonej w elemencie <Tokens> , ale nie udało się znaleźć zmiennej. |
ValidateToken |
steps.oauth.v2.InsufficientScope |
403 | Token dostępu przedstawiony w żądaniu ma zakres niepasujący do zakresu określonego w zasadach dotyczących tokena dostępu do weryfikacji. Więcej informacji o zakresie znajdziesz w artykule na temat korzystania z zakresów 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ść Uwaga: zalecamy zmianę istniejących warunków reguły błędów tak, aby przechwytywały zarówno nazwy |
generateAccessToken refreshAccessToken |
steps.oauth.v2.invalid_request |
400 | Ta nazwa błędu jest używana w przypadku wielu różnych rodzajów błędów, zwykle z powodu brakujących lub nieprawidłowych parametrów wysyłanych w żądaniu. Jeśli <GenerateResponse> ma wartość false , użyj zmiennych błędu (opisanych poniżej), aby pobrać szczegółowe informacje o błędzie, takie jak nazwa i przyczyna błędu. |
GenerateAccessToken WygenerujAuthorizationCode GenerateAccessTokenImplicitGrant refreshAccessToken |
steps.oauth.v2.InvalidAccessToken |
401 | Nagłówek autoryzacji nie zawiera wymaganego słowa „Bearer”, które jest wymagane. Na przykład: Authorization: Bearer your_access_token |
VerifyAccessToken |
steps.oauth.v2.InvalidAPICallAsNo\ |
401 |
Serwera proxy interfejsu API nie ma w usłudze powiązanej z tokenem dostępu. Wskazówki: sprawdź, czy usługa powiązana z tokenem dostępu jest prawidłowo skonfigurowana. Jeśli na przykład w ścieżkach do zasobów używasz symboli wieloznacznych, upewnij się, że zostały one użyte prawidłowo. Więcej informacji znajdziesz w artykule Tworzenie usług API. Zapoznaj się też z tym postem w społeczności Apigee, aby dowiedzieć się więcej o przyczynach tego błędu. |
VerifyAccessToken |
steps.oauth.v2.InvalidClientIdentifier |
500 |
Ta nazwa błędu jest zwracana, gdy właściwość |
generateAccessToken |
steps.oauth.v2.InvalidParameter |
500 | Zasada musi określać token dostępu lub kod autoryzacji, ale nie oba te elementy jednocześnie. | GenerateAuthorizationCode Wygeneruj tokenImplicitGrant |
steps.oauth.v2.InvalidTokenType |
500 | Element <Tokens>/<Token> wymaga określenia typu tokena (na przykład refreshtoken ). Jeśli klient poda 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 uwierzytelnienia. |
GenerateAuthorizationCode Wygeneruj tokenImplicitGrant |
steps.oauth.v2.UnSupportedGrantType |
500 |
Klient określił typ uwierzytelnienia, który nie jest obsługiwany przez zasadę (nie jest wymieniony w elemencie <SupportedGrantTypes>). Uwaga: obecnie występuje błąd, który powoduje, że błędy typu uwierzytelnienia nie są prawidłowo zgłaszane. Jeśli wystąpi błąd nieobsługiwanego typu uwierzytelnienia, serwer proxy nie przechodzi do procesu błędów zgodnie z oczekiwaniami. |
GenerateAccessToken WygenerujAuthorizationCode GenerateAccessTokenImplicitGrant refreshAccessToken |
Błędy wdrażania
Te błędy mogą wystąpić podczas wdrażania serwera proxy zawierającego te zasady.
Nazwa błędu | Przyczyna |
---|---|
InvalidValueForExpiresIn |
W przypadku elementu |
InvalidValueForRefreshTokenExpiresIn |
W przypadku elementu <RefreshTokenExpiresIn> prawidłowe wartości to dodatnie liczby całkowite i -1 . |
InvalidGrantType |
W elemencie <SupportedGrantTypes> podano nieprawidłowy typ przyznania. Listę prawidłowych typów znajdziesz w informacjach o zasadach. |
ExpiresInNotApplicableForOperation |
Pamiętaj, że operacje określone w elemencie <Operations> obsługują wygasanie ważności. Na przykład operacjaVerifyToken tego nie robi. |
RefreshTokenExpiresInNotApplicableForOperation |
Pamiętaj, że operacje określone w elemencie <Operations> obsługują wygasanie tokena odświeżania. Na przykład operacjaVerifyToken tego nie robi. |
GrantTypesNotApplicableForOperation |
Sprawdź, czy typy uwierzytelnienia określone w <SupportedGrantTypes> są obsługiwane w przypadku określonej operacji. |
OperationRequired |
W tej zasadzie musisz określić operację za pomocą elementu Uwaga: jeśli brakuje elementu |
InvalidOperation |
Musisz określić w tej zasadzie prawidłową operację za pomocą elementu Uwaga: jeśli element |
TokenValueRequired |
Musisz podać wartość <Token> tokena w elemencie <Tokens> . |
Zmienne błędów
Te zmienne są ustawiane, gdy zasada wywołuje błąd w czasie działania.
<GenerateResponse>
ustawiona jest wartość false
. Jeśli <GenerateResponse>
ma wartość true
, zasada zwraca odpowiedź natychmiast w przypadku wystąpienia błędu – przepływ błędu jest pomijany, a te zmienne nie są wypełniane. Więcej informacji znajdziesz w artykule Co musisz wiedzieć o błędach związanych z zasadami.Zmienne | Gdzie | Przykład |
---|---|---|
fault.name="fault_name" |
fault_name to nazwa błędu podana w tabeli Błędy środowiska wykonawczego powyżej. Nazwa błędu to ostatnia część kodu. | fault.name = "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 VerificationAccessToken nazwa błędu zawiera ten sufiks: |
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ą odsyłane z powrotem do klienta, jeśli element <GenerateResponse>
ma wartość true.
errorcode
. Nie polegaj na tekście w polu faultstring
, ponieważ może się on zmienić.Jeśli <GenerateResponse>
ma wartość true, zasada zwraca błędy w tym formacie w przypadku operacji generujących tokeny i kody. Pełną listę znajdziesz w artykule Informacje o odpowiedziach na błędy HTTP OAuth.
{"ErrorCode" : "invalid_client", "Error" :"ClientId is Invalid"}
Jeśli <GenerateResponse>
ma wartość true, zasada zwraca błędy w tym formacie na potrzeby operacji weryfikacji. Pełną listę znajdziesz w artykule Informacje o odpowiedziach na błędy HTTP 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 definiowany przez schemat XML (.xsd
). Schematy zasad są dostępne na GitHubie.
Praca z domyślną konfiguracją OAuth
Każda organizacja (nawet organizacja bezpłatnego okresu próbnego) w Apigee Edge ma udostępniony punkt końcowy tokena OAuth. Punkt końcowy jest wstępnie skonfigurowany z użyciem zasad na serwerze proxy interfejsu API o nazwie oauth. Możesz zacząć korzystać z punktu końcowego tokena, gdy tylko utworzysz konto w Apigee Edge. Więcej informacji znajdziesz w artykule Omówienie punktów końcowych OAuth.
Trwałe usuwanie tokenów dostępu
Domyślnie tokeny OAuth2 są trwale usuwane z systemu Apigee Edge po 3 dniach (259200 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. Możesz na przykład skrócić czas trwałego usuwania, aby zaoszczędzić miejsce na dysku w przypadku generowania dużej liczby tokenów.
Jeśli korzystasz z Edge for Private Cloud, możesz zmienić to ustawienie domyślne, ustawiając właściwości organizacji w sposób opisany w tej sekcji. (3-dniowe trwałe usunięcie tokenów wygasłych dotyczy Edge dla Private Cloud w wersji 4.19.01 i nowszych. W przypadku wcześniejszych wersji domyślny okres trwałego usuwania wynosi 180 dni.
Aktualizowanie ustawień trwałego usuwania w Edge Private Cloud 4.16.01 i nowszych
Uwaga: zmiana będzie miała wpływ tylko na tokeny wygenerowane po zastosowaniu tych ustawień. Ustawienia nie dotyczą tokenów wygenerowanych wcześniej.
- Otwórz ten plik do edycji:
/opt/apigee/customer/application/message-processor.properties
- Dodaj tę właściwość, aby ustawić liczbę sekund oczekiwania przed trwałym usunięciem tokena po jego wygaśnięciu:
conf_keymanagement_oauth.access.token.purge.after.seconds=<number of seconds>
- Ponownie uruchom procesor wiadomości. Przykład:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
<ExpiresIn>
i <RefreshTokenExpiresIn>
.
Aktualizuję ustawienia trwałego usuwania usługi Edge Private Cloud 4.15.07
Uwaga: ta zmiana będzie miała wpływ tylko na tokeny wygenerowane po zastosowaniu tych ustawień. Ustawienia nie dotyczą tokenów wygenerowanych wcześniej.
-
Ustaw dodatnie wartości atrybutów
<ExpiresIn>
i<RefreshTokenExpiresIn>
w zasadzie OAuthV2. Wartości są podane w milisekundach. Na przykład:<ExpiresIn>1000</ExpiresIn> <RefreshTokenExpiresIn>10000</RefreshTokenExpiresIn>
-
Wdróż ponownie serwer proxy.
-
Użyj tego interfejsu API, aby zaktualizować właściwości trwałego usuwania tokenów w organizacji:
POST https://<host-name>/v1/organizations/<org-name>
Ładunek:
<Organization name="AutomationOrganization"> <Description>Desc</Description> <Properties> <Property name="keymanagement.oauth20.access.token.purge">true</Property> <Property name="keymanagement.oauth20.access.token.purge.after.seconds">120</Property> </Properties> </Organization>
-
Ponownie uruchom procesor wiadomości. Na przykład:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Ten interfejs API ustawia właściwość trwałego usuwania tokenów na wartość Prawda w organizacji o nazwie AutomationOrganization. W tym przypadku token dostępu zostanie trwale usunięty z bazy danych 120 sekund po wygaśnięciu tokena i tokena odświeżania.
Działanie niezgodne z RFC
Zasada OAuthV2 zwraca odpowiedź tokena zawierającą określone właściwości niezgodne z RFC. W tabeli poniżej znajdziesz niezgodne właściwości zwrócone przez zasadę OAuthV2 i odpowiadające im zgodne właściwości.
OAuthV2 zwraca: | Właściwość zgodna ze standardem RFC: |
---|---|
"token_type":"BearerToken" |
"token_type":"Bearer"
|
"expires_in":"3600" |
"expires_in":3600
(zgodna wartość jest liczbą, a nie ciągiem znaków). |
Oprócz tego zwracana jest odpowiedź o błędzie w przypadku wygasłego tokena odświeżania, gdy grant_type = refresh_token
:
{"ErrorCode" : "invalid_request", "Error" :"Refresh Token expired"}
Jednak odpowiedź zgodna ze standardem RFC to:
{"error" : "invalid_grant", "error_description" :"refresh token expired"}