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 Opcjonalnie możesz użyć elementu |
Nie dotyczy | Wymagane |
continueOnError |
Ustaw jako Ustaw jako |
fałsz | Opcjonalnie |
enabled |
Aby egzekwować zasadę, ustaw wartość Aby wyłączyć zasadę, ustaw wartość |
prawda | Opcjonalnie |
async |
Ten atrybut został wycofany. |
fałsz | Wycofano |
<DisplayName> 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 |
---|---|
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
.
<AccessToken>request.header.access_token</AccessToken>
:
curl https://myorg-myenv.apigee.net/oauth2/validate -H "access_token:Rft3dqrs56Blirls56a"
<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: |
|
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: |
|
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ń: |
|
<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: |
|
Obecność: |
Opcjonalnie |
Prawidłowe wartości: |
|
Używane z typami uwierzytelnień: |
|
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ń: |
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ść:
- 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 właściwość zgodnie z potrzebami:
conf_keymanagement_oauth_auth_code_expiry_time_in_millis=3600000
- 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
- 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ń: |
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ń: |
|
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: |
|
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: |
|
<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: |
|
Element <Operation>
<Operation>GenerateAuthorizationCode</Operation>
Operacja OAuth 2.0 wykonywana przez zasadę.
Domyślnie: |
Jeśli nie określisz parametru |
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ń: |
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ń: |
|
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ść:
- 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 właściwość zgodnie z potrzebami:
conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
- 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
- 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ń: |
|
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ń: |
|
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: |
|
Obecność: |
opcjonalnie |
Typ: | wartość logiczna |
Prawidłowe wartości: |
|
Używane w przypadku typu dostępu: |
|
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ń: |
|
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ń: |
|
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ń: |
|
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: |
|
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>
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 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.
proxy.pathsuffix
). Nie musisz jawnie ustawiać zmiennej flow.resource.name.
Jeśli produkty interfejsu API nie są skonfigurowane z prawidłowymi środowiskami i przekierowaniami interfejsu API, zmienna flow.resource.name
musi być jawnie ustawiona, aby wypełnić zmienne produktów interfejsu API w ramach przepływu. Szczegółowe informacje o konfiguracji usługi znajdziesz w artykule Publikowanie interfejsów API za pomocą interfejsu Edge Management API.
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 ExpiresIn okreś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ć |
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
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
Fault code | HTTP status | Cause | Thrown by operations |
---|---|---|---|
steps.oauth.v2.access_token_expired |
401 | The access token is expired. |
VerifyAccessToken |
steps.oauth.v2.access_token_not_approved |
401 | The access token was revoked. | VerifyAccessToken |
steps.oauth.v2.apiresource_doesnot_exist |
401 | The requested resource does not exist any of the API products associated with the access token. | VerifyAccessToken |
steps.oauth.v2.FailedToResolveAccessToken |
500 | The policy expected to find an access token in a variable specified in the
<AccessToken> element, but the variable could not be resolved. |
GenerateAccessToken |
steps.oauth.v2.FailedToResolveAuthorizationCode |
500 | The policy expected to find an authorization code in a variable specified in the
<Code> element, but the variable could not be resolved. |
GenerateAuthorizationCode |
steps.oauth.v2.FailedToResolveClientId |
500 | The policy expected to find the Client ID in a variable specified in the
<ClientId> element, but the variable could not be resolved. |
GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
steps.oauth.v2.FailedToResolveRefreshToken |
500 | The policy expected to find a refresh token in a variable specified in the
<RefreshToken> element, but the variable could not be resolved. |
RefreshAccessToken |
steps.oauth.v2.FailedToResolveToken |
500 | The policy expected to find a token in a variable specified in the
<Tokens> element, but the variable could not be resolved. |
ValidateToken |
steps.oauth.v2.InsufficientScope |
403 | The access token presented in the request has a scope that does not match the scope specified in the verify access token policy. To learn about scope, see Working with OAuth2 scopes. | VerifyAccessToken |
steps.oauth.v2.invalid_access_token |
401 | The access token sent from the client is invalid. | VerifyAccessToken |
steps.oauth.v2.invalid_client |
401 |
This error name is returned when the Note: It is recommended that you change existing fault rule
conditions to catch both the |
GenerateAccessToken RefreshAccessToken |
steps.oauth.v2.InvalidRequest |
400 | This error name is used for multiple different kinds of errors, typically for missing
or incorrect parameters sent in the request. If <GenerateResponse> is
set to false , use fault variables (described below) to retrieve details about
the error, such as the fault name and cause. |
GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
steps.oauth.v2.InvalidAccessToken |
401 | The authorization header does not have the word "Bearer", which is required. For
example: Authorization: Bearer your_access_token |
VerifyAccessToken |
steps.oauth.v2.InvalidAPICallAsNoApiProductMatchFound |
401 |
The API proxy is not in the Product associated with the access token. Tips: Be sure that the product associated with the access token is configured correctly. For example, if you use wildcards in resource paths, be sure the wildcards are being used correctly. See Create API products for details. See also this Apigee Community post for more guidance on causes for this error. |
VerifyAccessToken |
steps.oauth.v2.InvalidClientIdentifier |
500 |
This error name is returned when the |
GenerateAccessToken |
steps.oauth.v2.InvalidParameter |
500 | The policy must specify either an access token or an authorization code, but not both. | GenerateAuthorizationCode GenerateAccessTokenImplicitGrant |
steps.oauth.v2.InvalidTokenType |
500 | The <Tokens>/<Token> element requires you to specify the token
type (for example, refreshtoken ). If the client passes the wrong type, this
error is thrown. |
ValidateToken InvalidateToken |
steps.oauth.v2.MissingParameter |
500 | The response type is token , but no grant types are specified. |
GenerateAuthorizationCode GenerateAccessTokenImplicitGrant |
steps.oauth.v2.UnSupportedGrantType |
500 |
The client specified a grant type that is unsupported by the policy (not listed in the <SupportedGrantTypes> element). Note: There is currently a bug where unsupported grant type errors are not thrown correctly. If an unsupported grant type error occurs, the proxy does not enter the Error Flow, as expected. |
GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
Error name | Cause |
---|---|
InvalidValueForExpiresIn |
For the |
InvalidValueForRefreshTokenExpiresIn |
For the <RefreshTokenExpiresIn> element, valid values are positive
integers and -1 . |
InvalidGrantType |
An invalid grant type is specified in the <SupportedGrantTypes>
element. See the policy reference for a list of valid types. |
ExpiresInNotApplicableForOperation |
Be sure that the operations specified in the <Operations> element support expiration. For example, the VerifyToken operation does not. |
RefreshTokenExpiresInNotApplicableForOperation |
Be sure that the operations specified in the <Operations> element support refresh token expiration. For example, the VerifyToken operation does not. |
GrantTypesNotApplicableForOperation |
Be sure that the grant types specified in <SupportedGrantTypes> are supported for the specified operation. |
OperationRequired |
You must specify an operation in this policy using the Note: If the |
InvalidOperation |
You must specify a valid operation in this policy using the
Note: If the |
TokenValueRequired |
You must specify a token <Token> value in the
<Tokens> element. |
Fault variables
These variables are set when this policy triggers an error at runtime.
<GenerateResponse>
is set to
false
. If <GenerateResponse>
is
true
, the policy returns a response to the client immediately if an error occurs --
the error flow is skipped and these variables are not populated. For more information, see
What you need to
know about policy errors.Variables | Where | Example |
---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name = "InvalidRequest" |
oauthV2.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.GenerateAccesstoken.failed = true |
oauthV2.policy_name.fault.name |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.GenerateAccesstoken.fault.name = InvalidRequest
Note: For the VerifyAccessToken operation, the fault name includes this suffix: |
oauthV2.policy_name.fault.cause |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.GenerateAccesstoken.cause = Required param : grant_type |
Example error response
These responses are sent back to the client if the <GenerateResponse>
element is true.
errorcode
part of the error response. Do not rely on the text in the
faultstring
, because it could change.If <GenerateResponse>
is true, the policy returns errors
in this format for operations that generate tokens and codes. For a complete list, see see
OAuth HTTP error
response reference.
{"ErrorCode" : "invalid_client", "Error" :"ClientId is Invalid"}
If <GenerateResponse>
is true, the policy returns errors
in this format for verify and validate operations. For a complete list, see see OAuth HTTP error
response reference.
{ { "fault":{ "faultstring":"Invalid Access Token", "detail":{ "errorcode":"keymanagement.service.invalid_access_token" } } }
Example fault rule
<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.
- Otwórz ten plik do edycji:
/opt/apigee/customer/application/message-processor.properties
- Aby ustawić liczbę sekund, przez które token będzie oczekiwać przed wyczyszczeniem po wygaśnięciu, dodaj tę właściwość:
conf_keymanagement_oauth.access.token.purge.after.seconds=<number of seconds>
- Ponownie uruchom przetwarzacz wiadomości. Na przykład:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
<ExpiresIn>
i <RefreshTokenExpiresIn>
.
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.
-
Ustaw w zasadach OAuth V2 dodatnie wartości atrybutów
<ExpiresIn>
i<RefreshTokenExpiresIn>
. 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 swojej 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ść usuwania tokenów na „true” w przypadku organizacji o nazwie AutomationOrganization. W takim przypadku token dostępu zostanie usunięty z bazy danych po 120 sekundach od wygaśnięcia tokena i tokena odświeżania.
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" : "InvalidRequest", "Error" :"Refresh Token expired"}
Odpowiedź zgodna z RFC jest jednak następująca:
{"error" : "invalid_grant", "error_description" :"refresh token expired"}