Przeglądasz dokumentację Apigee Edge.
Przejdź do
Dokumentacja Apigee X. informacje.
W tym temacie pokażemy, jak poprosić o tokeny dostępu i kody autoryzacji, skonfigurować OAuth 2.0 i skonfiguruj zasady dla każdego obsługiwanego uwierzytelnienia .
Przykładowy kod
Dla Twojej wygody omówione w tym temacie zasady i punkty końcowe są dostępne na stronie GitHub w projekcie oauth-doc-examples. w repozytorium Apigee api-platform-samples. Możesz wdrożyć przykładowy kod i spróbować przykładowe żądania wyświetlane w tym temacie. Więcej informacji znajdziesz w projekcie README.
Żądanie tokena dostępu: typ przyznania kodu autoryzacji
Ta sekcja wyjaśnia, jak zażądać tokena dostępu za pomocą typu przyznania kodu autoryzacji przepływu danych. Wprowadzenie do typów uwierzytelnienia OAuth 2.0 znajdziesz w artykule Introduction to OAuth 2.0 (Wprowadzenie do OAuth 2.0).
Przykład prośba
$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \ -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \ -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \ -d 'code=I9dMGHAN&grant_type=authorization_code&redirect_uri=http://example-callback.com'
Wymagany
Domyślnie parametry te muszą mieć wartość x-www-form-urlencoded
i należy je określić w parametrze
treść żądania (jak pokazano w przykładzie powyżej); można jednak zmienić tę wartość domyślną
konfigurując <GrantType>
, <Code>
oraz
<RedirectUri>
elementów dołączonej do zasady OAuthV2
Punkt końcowy: /accesstoken
. Więcej informacji znajdziesz w artykule Zasady OAuthV2.
- grant_type – musi mieć wartość.
authorization_code
- code – kod autoryzacji otrzymany z urządzenia
/authorize
. punktu końcowego (lub inną nazwę). Aby zażądać tokena dostępu w ramach autoryzacji procesu przyznawania kodu, musisz najpierw uzyskać kod autoryzacji. Zobacz sekcję Przesyłanie prośby o kod autoryzacji poniżej. Więcej informacji znajdziesz w artykule Wdrażanie typ przyznania kodu autoryzacji. - redirect_uri – musisz podać ten parametr, jeśli
Parametr
redirect_uri
został uwzględniony w poprzednim żądaniu kodu autoryzacji. Jeśli parametrredirect_uri
nie został uwzględniony w żądaniu kodu autoryzacji, Jeśli nie podasz tego parametru, zasada używa wartości adresu URL wywołania zwrotnego, została podana podczas rejestracji aplikacji dewelopera.
Opcjonalne
- state – ciąg znaków, który zostanie odesłany wraz z odpowiedzią. Zwykle używane aby zapobiec atakom polegającym na fałszowaniu żądań z innych stron.
- scope – umożliwia filtrowanie listy usług interfejsu API, w których występuje wartość można użyć wygenerowanego tokena. Szczegółowe informacje o zakresie znajdziesz w artykule o korzystaniu z zakresów OAuth2.
Uwierzytelnianie
Identyfikator klienta i tajny klucz klienta należy przekazać jako nagłówek uwierzytelniania podstawowego.
(zakodowane w formacie Base64) lub jako parametry formularza client_id
i client_secret
. Ty
uzyskać te wartości z zarejestrowanej aplikacji dewelopera. Więcej informacji znajdziesz w artykule „Podstawowe kodowanie”
dane uwierzytelniające”.
Przykładowy punkt końcowy
Oto przykładowa konfiguracja punktu końcowego służąca do generowania tokena dostępu. Wykona Zasada GenerateAccessToken, która musi być skonfigurowana do obsługi przyznawania kodu autoryzacji typu.
... <Flow name="generate-access-token"> <Description>Generate a token</Description> <Request> <Step> <Name>GenerateAccessToken</Name> </Step> </Request> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition> </Flow> ...
Przykładowa zasada
To jest podstawowa zasada GenerateAccessToken skonfigurowana tak, aby akceptowała
authorization_code
typ uwierzytelnienia. Informacje o opcjonalnych elementach konfiguracji
które możesz skonfigurować przy użyciu tych zasad, zapoznaj się z sekcją Zasady OAuthV2.
<OAuthV2 name="GenerateAccessToken"> <Operation>GenerateAccessToken</Operation> <ExpiresIn>1800000</ExpiresIn> <RefreshTokenExpiresIn>86400000</RefreshTokenExpiresIn> <SupportedGrantTypes> <GrantType>authorization_code</GrantType> </SupportedGrantTypes> <GenerateResponse enabled="true"/> </OAuthV2>
Zwroty
Gdy zasada <GenerateResponse>
jest włączona, zasada zwraca odpowiedź JSON, która
zawiera token dostępu, jak pokazano poniżej. Typ uwierzytelnienia authorization_code
tworzy
token dostępu i tokeny odświeżania, więc odpowiedź może wyglądać tak:
{ "issued_at": "1420262924658", "scope": "READ", "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b", "refresh_token_issued_at": "1420262924658", "status": "approved", "refresh_token_status": "approved", "api_product_list": "[PremiumWeatherAPI]", "expires_in": "1799", //--in seconds "developer.email": "tesla@weathersample.com", "organization_id": "0", "token_type": "BearerToken", "refresh_token": "fYACGW7OCPtCNDEnRSnqFlEgogboFPMm", "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT", "access_token": "2l4IQtZXbn5WBJdL6EF7uenOWRsi", "organization_name": "docs", "refresh_token_expires_in": "86399", //--in seconds "refresh_count": "0" }
Jeśli <GenerateResponse>
ma wartość Fałsz, zasada nie zwraca
. Zamiast tego wypełnia poniższy zestaw zmiennych przepływu danymi odnoszącymi się do
token dostępu.
oauthv2accesstoken.{policy-name}.access_token oauthv2accesstoken.{policy-name}.expires_in //--in seconds oauthv2accesstoken.{policy-name}.refresh_token oauthv2accesstoken.{policy-name}.refresh_token_expires_in //--in seconds oauthv2accesstoken.{policy-name}.refresh_token_issued_at oauthv2accesstoken.{policy-name}.refresh_token_status
Na przykład:
oauthv2accesstoken.GenerateAccessToken.access_token oauthv2accesstoken.GenerateAccessToken.expires_in oauthv2accesstoken.GenerateAccessToken.refresh_token oauthv2accesstoken.GenerateAccessToken.refresh_token_expires_in oauthv2accesstoken.GenerateAccessToken.refresh_token_issued_at oauthv2accesstoken.GenerateAccessToken.refresh_token_status
Żądanie tokena dostępu: klient typ przyznania danych logowania
Z tej sekcji dowiesz się, jak zażądać tokena dostępu za pomocą typu przyznania danych logowania klienta przepływu danych. Wprowadzenie do typów uwierzytelnienia OAuth 2.0 znajdziesz w artykule Introduction to OAuth 2.0 (Wprowadzenie do OAuth 2.0).
Przykład prośba
Informacje o kodowaniu nagłówka podstawowego uwierzytelniania w poniższym wywołaniu znajdziesz w materiałach na temat „Kodowanie podstawowych danych uwierzytelniających”.
$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \ -H 'Authorization: Basic c3FIOG9vSGV4VHoAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \ -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \ -d 'grant_type=client_credentials'
Wymagany
Domyślnie wymagany parametr Grants_type musi mieć wartość x-www-form-urlencoded
i
określone w treści żądania (jak pokazano w przykładzie powyżej); można jednak zmienić
domyślnie, konfigurując element <GrantType>
w zasadzie OAuthV2, która
jest podłączony do tego punktu końcowego /accesstoken
. Możesz na przykład przekazać
w parametrze zapytania. Więcej informacji znajdziesz w artykule Zasady OAuthV2.
- grant_type – musi mieć wartość.
client_credentials
Opcjonalne
- state – ciąg znaków, który zostanie odesłany wraz z odpowiedzią. Zwykle używane aby zapobiec atakom polegającym na fałszowaniu żądań z innych stron.
- scope – umożliwia filtrowanie listy usług interfejsu API, w których występuje wartość można użyć wygenerowanego tokena. Szczegółowe informacje o zakresie znajdziesz w artykule o korzystaniu z zakresów OAuth2.
Uwierzytelnianie
Identyfikator klienta i tajny klucz klienta należy przekazać jako nagłówek uwierzytelniania podstawowego.
(zakodowane w formacie Base64) lub jako parametry formularza client_id
i
client_secret
Te wartości pochodzą z zarejestrowanej aplikacji dewelopera
powiązane z żądaniem. Więcej informacji znajdziesz w sekcji „Kodowanie podstawowego uwierzytelniania”.
dane logowania”.
Przykładowy punkt końcowy
Oto przykładowa konfiguracja punktu końcowego służąca do generowania tokena dostępu. Wykona Zasada GenerateAccessToken, która musi być skonfigurowana, aby obsługiwać uwierzytelnienie client_credentials typu.
... <Flow name="generate-access-token"> <Request> <Step> <Name>GenerateAccessToken</Name> </Step> </Request> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition> </Flow> ...
Przykładowa zasada
To jest podstawowa zasada GenerateAccessToken skonfigurowana tak, aby akceptowała
client_credentials
typ uwierzytelnienia. Informacje o opcjonalnych elementach konfiguracji
które możesz skonfigurować przy użyciu tych zasad, zapoznaj się z sekcją Zasady OAuthV2.
<OAuthV2 name="GenerateAccessToken"> <Operation>GenerateAccessToken</Operation> <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes --> <SupportedGrantTypes> <GrantType>client_credentials</GrantType> </SupportedGrantTypes> <GenerateResponse enabled="true"/> </OAuthV2>
Zwroty
Gdy zasada <GenerateResponse>
jest włączona, zasada zwraca odpowiedź JSON. Notatka
że z typem uwierzytelnienia client_credentials
tokeny odświeżania nie są obsługiwane. Tylko
token dostępu. Na przykład:
{ "issued_at": "1420260525643", "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b", "scope": "READ", "status": "approved", "api_product_list": "[PremiumWeatherAPI]", "expires_in": "1799", //--in seconds "developer.email": "tesla@weathersample.com", "organization_id": "0", "token_type": "BearerToken", "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT", "access_token": "XkhU2DFnMGIVL2hvsRHLM00hRWav", "organization_name": "docs" }
Jeśli <GenerateResponse>
ma wartość Fałsz, zasada nie zwraca
. Zamiast tego wypełnia poniższy zestaw zmiennych przepływu danymi odnoszącymi się do
token dostępu.
oauthv2accesstoken.{policy-name}.access_token oauthv2accesstoken.{policy-name}.expires_in //--in seconds
Na przykład:
oauthv2accesstoken.GenerateAccessToken.access_token oauthv2accesstoken.GenerateAccessToken.expires_in //--in seconds
Żądanie tokena dostępu: typ przyznania hasła
Ta sekcja wyjaśnia, jak poprosić o token dostępu za pomocą hasła właściciela zasobu przepływ typu uwierzytelniania danych logowania (hasła). Wprowadzenie do typów uwierzytelnienia OAuth 2.0 znajdziesz w tych artykułach: Wprowadzenie do OAuth 2.0
Więcej informacji o typie przyznawania hasła, w tym 4-minutowy film pokazujący, jak jak go wdrożyć, można znaleźć w sekcji Implementowanie hasła
Przykład prośba
Informacje o kodowaniu nagłówka podstawowego uwierzytelniania w poniższym wywołaniu znajdziesz w materiałach na temat „Kodowanie podstawowych danych uwierzytelniających”.
$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \ -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAySVg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \ -X POST https://docs-test.apigee.net/oauth/token \ -d 'grant_type=password&username=the-user-name&password=the-users-password'
Wymagany
Domyślnie parametry te muszą mieć wartość x-www-form-urlencoded
i należy je określić w parametrze
treść żądania (jak pokazano w przykładzie powyżej); można jednak zmienić tę wartość domyślną
konfigurując <GrantType>
, <Username>
oraz
<Password>
elementów dołączonej do zasady OAuthV2
Punkt końcowy: /token
. Więcej informacji znajdziesz w artykule Zasady OAuthV2.
Dane logowania użytkownika są zwykle sprawdzane w magazynie danych logowania przy użyciu protokołu LDAP lub zasady JavaScript.
- grant_type – musi mieć wartość
password
. - username – nazwa użytkownika właściciela zasobu;
- password – hasło właściciela zasobu.
Opcjonalne
- state – ciąg znaków, który zostanie odesłany wraz z odpowiedzią. Zwykle używane aby zapobiec atakom polegającym na fałszowaniu żądań z innych stron.
- scope – umożliwia filtrowanie listy usług interfejsu API, w których występuje wartość można użyć wygenerowanego tokena. Szczegółowe informacje o zakresie znajdziesz w artykule o korzystaniu z zakresów OAuth2.
Uwierzytelnianie
Identyfikator klienta i tajny klucz klienta należy przekazać jako nagłówek uwierzytelniania podstawowego.
(zakodowane w formacie Base64) lub jako parametry formularza client_id
i
client_secret
Te wartości pochodzą z zarejestrowanej aplikacji dewelopera
powiązane z żądaniem. Więcej informacji znajdziesz w sekcji „Kodowanie podstawowego uwierzytelniania”.
dane logowania”.
Przykładowy punkt końcowy
Oto przykładowa konfiguracja punktu końcowego służąca do generowania tokena dostępu. Wykona Zasada GenerateAccessToken, która musi być skonfigurowana pod kątem obsługi typu przyznawania hasła.
... <Flow name="generate-access-token"> <Request> <Step> <Name>GenerateAccessToken</Name> </Step> </Request> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition> </Flow> ...
Przykładowa zasada
To jest podstawowa zasada GenerateAccessToken skonfigurowana tak, aby akceptowała uwierzytelnienie hasła typu. Informacje o opcjonalnych elementach konfiguracji, które można skonfigurować za pomocą tej zasady, Więcej informacji: Zasady OAuthV2.
<OAuthV2 name="GenerateAccessToken"> <Operation>GenerateAccessToken</Operation> <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes --> <RefreshTokenExpiresIn>28800000</RefreshTokenExpiresIn> <!-- 8 hours --> <SupportedGrantTypes> <GrantType>password</GrantType> </SupportedGrantTypes> <GenerateResponse enabled="true"/> </OAuthV2>
Zwroty
Gdy zasada <GenerateResponse>
jest włączona, zasada zwraca odpowiedź JSON. Notatka
że przy typie uwierzytelnienia hasłem generowany jest zarówno token dostępu, jak i token odświeżania. Dla:
przykład:
{ "issued_at": "1420258685042", "scope": "READ", "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b", "refresh_token_issued_at": "1420258685042", "status": "approved", "refresh_token_status": "approved", "api_product_list": "[PremiumWeatherAPI]", "expires_in": "1799", //--in seconds "developer.email": "tesla@weathersample.com", "organization_id": "0", "token_type": "BearerToken", "refresh_token": "IFl7jlijYuexu6XVSSjLMJq8SVXGOAAq", "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT", "access_token": "I6daIgMSiUgYX1K2qgQWPi37ztS6", "organization_name": "docs", "refresh_token_expires_in": "28799", //--in seconds "refresh_count": "0" }
Jeśli <GenerateResponse>
ma wartość Fałsz, zasada nie zwraca
. Zamiast tego wypełnia poniższy zestaw zmiennych przepływu danymi odnoszącymi się do
token dostępu.
oauthv2accesstoken.{policy-name}.access_token oauthv2accesstoken.{policy-name}.expires_in //--in seconds oauthv2accesstoken.{policy-name}.refresh_token oauthv2accesstoken.{policy-name}.refresh_token_expires_in //--in seconds oauthv2accesstoken.{policy-name}.refresh_token_issued_at oauthv2accesstoken.{policy-name}.refresh_token_status
Na przykład:
oauthv2accesstoken.GenerateAccessToken.access_token oauthv2accesstoken.GenerateAccessToken.expires_in oauthv2accesstoken.GenerateAccessToken.refresh_token oauthv2accesstoken.GenerateAccessToken.refresh_token_expires_in oauthv2accesstoken.GenerateAccessToken.refresh_token_issued_at oauthv2accesstoken.GenerateAccessToken.refresh_token_status
Żądanie tokena dostępu: niejawne uwierzytelnienie typ
W tej sekcji wyjaśniono, jak zażądać tokena dostępu za pomocą przepływu niejawnego typu uwierzytelnienia. Dla: Wprowadzenie do typów uwierzytelnienia OAuth 2.0 znajdziesz we wprowadzeniu do OAuth 2.0.
Przykład prośba
$ curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \ 'https://docs-test.apigee.net/oauth/implicit?response_type=token&client_id=ABC123&redirect_uri=http://callback-example.com'
Wymagany
Domyślnie te parametry muszą być parametrami zapytania (jak pokazano w przykładzie powyżej). jednak
można zmienić tę wartość domyślną, konfigurując <ResponseType>
,
Elementy <ClientId>
i <RedirectUri>
w protokole OAuthV2
która jest dołączona do tego punktu końcowego /token
. Więcej informacji znajdziesz w artykule Zasady OAuthV2.
Dane logowania użytkownika są zwykle sprawdzane w magazynie danych logowania przy użyciu usługi LDAP. lub zasad JavaScript.
- response_type – musi mieć wartość
token
. - client_id – identyfikator klienta zarejestrowanej aplikacji dewelopera.
- redirect_uri – ten parametr jest wymagany, jeśli identyfikator URI wywołania zwrotnego nie został użyty podana podczas rejestrowania aplikacji dewelopera klienta. Jeśli na kliencie podano adres URL wywołania zwrotnego rejestracji, zostanie ona porównana z tą wartością i musi dokładnie odpowiadać.
Opcjonalne
- state – ciąg znaków, który zostanie odesłany wraz z odpowiedzią. Zwykle używane aby zapobiec atakom polegającym na fałszowaniu żądań z innych stron.
- scope – umożliwia filtrowanie listy usług interfejsu API, w których występuje wartość można użyć wygenerowanego tokena. Szczegółowe informacje o zakresie znajdziesz w artykule o korzystaniu z zakresów OAuth2.
Uwierzytelnianie
Uwierzytelnienie pośrednie nie wymaga podstawowego uwierzytelniania. Należy przekazać identyfikator klienta jako zgodnie z tym opisem.
Przykładowy punkt końcowy
Oto przykładowa konfiguracja punktu końcowego służąca do generowania tokena dostępu. Wykona Zasada GenerateAccessTokenImplicitGrant.
... <Flow name="generate-access-token-implicit"> <Request> <Step> <Name>GenerateAccessTokenImplicitGrant</Name> </Step> </Request> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/implicit") and (request.verb = "POST")</Condition> </Flow> ...
Przykładowa zasada
To jest podstawowa zasada GenerateAccessTokenImplicitGrant, która przetwarza żądania tokenów dla przepływ niejawnego uwierzytelnienia. Informacje o opcjonalnych elementach konfiguracji, które możesz skonfigurować za pomocą tej zasady, zapoznaj się z artykułem na temat zasad OAuthV2.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <OAuthV2 name="GenerateAccessTokenImplicit"> <DisplayName>GenerateAccessTokenImplicit</DisplayName> <Operation>GenerateAccessTokenImplicitGrant</Operation> <GenerateResponse enabled="true"/> </OAuthV2>
Zwroty
Gdy zasada <GenerateResponse>
jest włączona, zasada zwraca kod przekierowania 302 (lokalizacja)
w nagłówku odpowiedzi. Przekierowanie wskazuje adres URL podany w polu redirect_uri
i zawiera on informację o czasie ważności tokena. Pamiętaj, że niejawne
typ uwierzytelnienia nie obsługuje tokenów odświeżania. Na przykład:
https://callback-example.com#expires_in=1799&access_token=In4dKm4ueoGZRbIYJhC9yZCmTFw5
Jeśli <GenerateResponse>
ma wartość Fałsz, zasada nie zwraca
. Zamiast tego wypełnia poniższy zestaw zmiennych przepływu danymi odnoszącymi się do
token dostępu.
oauthv2accesstoken.{policy-name}.access_token oauthv2accesstoken.{policy-name}.expires_in //--in seconds
Na przykład:
oauthv2accesstoken.GenerateAccessToken.access_token oauthv2accesstoken.GenerateAccessToken.expires_in //--in seconds
Żądanie kodu autoryzacji
Jeśli korzystasz z przepływu typu przyznania kodu autoryzacji, musisz uzyskać autoryzację przed wysłaniem żądania o token dostępu.
Przykładowe żądanie
$ curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \ 'http://myorg-test.apigee.net/oauth/authorize?client_id={consumer_key}&response_type=code'
gdzie do elementu zamówienia jest podłączona zasada GenerateAuthorizationCode OAuthV2
Punkt końcowy serwera proxy /oauth/authorize
(zobacz przykładowy punkt końcowy poniżej).
Wymagany
Domyślnie te parametry muszą być parametrami zapytania (jak pokazano w przykładzie powyżej). jednak
można zmienić tę wartość domyślną, konfigurując <ResponseType>
,
Elementy <ClientId>
i <RedirectUri>
w protokole OAuthV2
która jest dołączona do tego punktu końcowego /authorize
. Więcej informacji znajdziesz w artykule Zasady OAuthV2.
- response_type – musi mieć wartość
code
. - client_id – identyfikator klienta zarejestrowanej aplikacji dewelopera.
Opcjonalne
- redirect_uri – jeśli pełny (nieczęściowy) identyfikator URI wywołania zwrotnego został określony w w przypadku zarejestrowanej aplikacji klienta, ten parametr jest opcjonalny; w przeciwnym razie jest wymagane. Wywołanie zwrotne to adres URL, na który Edge wysyła nowo wygenerowany kod autoryzacji. Przeczytaj też artykuł Rejestrowanie aplikacji i zarządzanie interfejsem API .
- state – ciąg znaków, który zostanie odesłany wraz z odpowiedzią. Zwykle używane aby zapobiec atakom polegającym na fałszowaniu żądań z innych stron.
- scope – umożliwia filtrowanie listy usług interfejsu API, w których występuje wartość można użyć wygenerowanego tokena. Szczegółowe informacje o zakresie znajdziesz w artykule o korzystaniu z zakresów OAuth2.
Uwierzytelnianie
Nie wymaga podstawowego uwierzytelniania, ale musi mieć identyfikator klienta zarejestrowanej aplikacji klienckiej .
Przykładowy punkt końcowy
Przykładowa konfiguracja punktu końcowego służąca do generowania kodu autoryzacji:
<OAuthV2 name="GenerateAuthorizationCode"> <Operation>GenerateAuthorizationCode</Operation> <!-- ExpiresIn, in milliseconds. The ref is optional. The explicitly specified value is the default, when the variable reference cannot be resolved. 60000 = 1 minute 120000 = 2 minutes --> <ExpiresIn>60000</ExpiresIn> <GenerateResponse enabled="true"/> </OAuthV2>
Przykładowa zasada
To jest podstawowa zasada GenerateAuthorizationCode. Informacje o opcjonalnej konfiguracji elementy, które można skonfigurować za pomocą tych zasad, zawiera artykuł Zasady OAuthV2.
<OAuthV2 name="GenerateAuthorizationCode"> <Operation>GenerateAuthorizationCode</Operation> <GenerateResponse enabled="true"/> </OAuthV2>
Zwroty
Gdy zasada <GenerateResponse>
jest włączona, zasada zwraca wartość ?code
do lokalizacji redirect_uri
(Callback URI) z autoryzacją
z kodem. Jest ona wysyłana przez przekierowanie 302 przeglądarki z adresem URL umieszczonym w nagłówku Location tagu
. Na przykład: ?code=123456
.
Jeśli <GenerateResponse>
ma wartość false
, zasada nie
zwrócić odpowiedź. Zamiast tego wypełnia poniższy zestaw zmiennych przepływu danymi odnoszącymi się do
do kodu autoryzacji.
oauthv2authcode.{policy-name}.code oauthv2authcode.{policy-name}.scope oauthv2authcode.{policy-name}.redirect_uri oauthv2authcode.{policy-name}.client_id
Na przykład:
oauthv2authcode.GenerateAuthorizationCode.code oauthv2authcode.GenerateAuthorizationCode.scope oauthv2authcode.GenerateAuthorizationCode.redirect_uri oauthv2authcode.GenerateAuthorizationCode.client_id
Odświeżanie tokena dostępu
Token odświeżania to dane logowania używane do uzyskania tokena dostępu, zwykle po token utracił ważność lub stanie się nieważny. Token odświeżania jest zwracany w odpowiedzi, gdy otrzymasz token dostępu.
Aby poprosić o nowy token dostępu przy użyciu tokena odświeżania:
Przykładowe żądanie
Informacje o kodowaniu nagłówka podstawowego uwierzytelniania w poniższym wywołaniu znajdziesz w materiałach na temat „Kodowanie podstawowych danych uwierzytelniających”.
$ curl -X POST \ -H "Content-type: application/x-www-form-urlencoded" \ -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \ https://myorg-test.apigee.net/my_oauth_endpoint/refresh_accesstoken \ -d 'grant_type=refresh_token&refresh_token=my-refresh-token'
Parametry wymagane
- grant_type – musi mieć wartość
refresh_token
. - refresh_token – token odświeżania powiązany z Twoim tokenem dostępu które chcesz odnowić.
Domyślnie zasada szuka ich jako parametrów x-www-form-urlencoded
określone w treści żądania, jak widać w powyższym przykładzie. Konfigurowanie alternatywnej lokalizacji
dla tych danych wejściowych możesz użyć funkcji <GrantType>
i
<RefreshToken>
elementów w zasadzie OAuthV2. Więcej informacji znajdziesz w artykule Zasady OAuthV2.
Parametry opcjonalne
- state – ciąg znaków, który zostanie odesłany wraz z odpowiedzią. Zwykle używane aby zapobiec atakom polegającym na fałszowaniu żądań z innych stron.
- scope – umożliwia filtrowanie listy usług interfejsu API, w których występuje wartość można użyć wygenerowanego tokena. Szczegółowe informacje o zakresie znajdziesz w artykule o korzystaniu z zakresów OAuth2.
Uwierzytelnianie
- client_id
- client_secret
Identyfikator klienta i tajny klucz klienta należy przekazać jako nagłówek uwierzytelniania podstawowego.
(zakodowane w formacie Base64) lub jako parametry formularza client_id
i client_secret
. Zobacz
a także „Kodowanie podstawowych danych uwierzytelniających”.
Po odświeżeniu tokena dostępu nie następuje ponowne uwierzytelnienie użytkownika.
Oto przykładowa konfiguracja punktu końcowego służąca do generowania tokena dostępu przy użyciu tokena odświeżania. Wykona ona zasadę RefreshAccessToken.
... <Flow name="generate-refresh-token"> <Request> <Step> <Name>RefreshAccessToken</Name> </Step> </Request> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/refresh") and (request.verb = "POST")</Condition> </Flow> ...
Przykładowa zasada
To jest podstawowa zasada RefreshAccessToken skonfigurowane tak, aby akceptowała
refresh_token
typ uwierzytelnienia. Informacje o opcjonalnych elementach konfiguracji, które
które możesz skonfigurować za pomocą tej zasady, zapoznaj się z sekcją Zasady OAuthV2.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <OAuthV2 name="RefreshAccessToken"> <Operation>RefreshAccessToken</Operation> <GenerateResponse enabled="true"/> <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes --> <RefreshTokenExpiresIn>28800000</RefreshTokenExpiresIn> <!-- 8 hours --> </OAuthV2>
Zwroty
Gdy zasada <GenerateResponse>
jest włączona, zasada zwraca odpowiedź JSON
który zawiera nowy token dostępu. Typ uwierzytelnienia refresh_token
obsługuje tworzenie zarówno
i nowych tokenów odświeżania. Na przykład:
{ "issued_at": "1420301470489", "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b", "scope": "READ", "refresh_token_issued_at": "1420301470489", "status": "approved", "refresh_token_status": "approved", "api_product_list": "[PremiumWeatherAPI]", "expires_in": "1799", //--in seconds "developer.email": "tesla@weathersample.com", "token_type": "BearerToken", "refresh_token": "8fKDHLryAD9KFBsrpixlq3qPJnG2fdZ5", "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT", "access_token": "jmZ2Hqv3iNsABUtAAsfWR3QGNctw", "organization_name": "docs", "refresh_token_expires_in": "28799", //--in seconds "refresh_count": "2" }
Pamiętaj, że po wygenerowaniu nowego tokena odświeżania oryginał utracił ważność.
Powyższą odpowiedź otrzymasz, jeśli zasada <GenerateResponse>
ma wartość Prawda.
Jeśli zasada <GenerateResponse>
ma wartość Fałsz, zasada nie zwraca odpowiedzi.
Zamiast tego wypełnia poniższy zestaw zmiennych kontekstowych (przepływu) danymi odnoszącymi się do
token dostępu.
oauthv2accesstoken.{policy-name}.access_token oauthv2accesstoken.{policy-name}.expires_in //--in seconds oauthv2accesstoken.{policy-name}.refresh_token oauthv2accesstoken.{policy-name}.refresh_token_expires_in //--in seconds oauthv2accesstoken.{policy-name}.refresh_token_issued_at oauthv2accesstoken.{policy-name}.refresh_token_status
Na przykład:
oauthv2accesstoken.RefreshAccessToken.access_token oauthv2accesstoken.RefreshAccessToken.expires_in oauthv2accesstoken.RefreshAccessToken.refresh_token oauthv2accesstoken.RefreshAccessToken.refresh_token_expires_in oauthv2accesstoken.RefreshAccessToken.refresh_token_issued_at oauthv2accesstoken.RefreshAccessToken.refresh_token_status
Kodowanie podstawowe dane uwierzytelniające
Wywołanie interfejsu API w celu żądania tokena lub kodu uwierzytelniania jest dobrą metodą. zalecane przez specyfikację OAuth 2.0, aby przekazywać wartości client_id i client_secret's jako nagłówek uwierzytelniania podstawowego HTTP zgodnie z opisem w dokumencie IETF RFC 2617. Aby to zrobić, zakodować wynik połączenia dwóch wartości, oddzielając je dwukropkiem.
W pseudokodzie:
result = Base64Encode(concat('ns4fQc14Zg4hKFCNaSzArVuwszX95X', ':', 'ZIjFyTsNgQNyxI'))
W tym przykładzie ns4fQc14Zg4hKFCNaSzArVuwszX95X
to identyfikator klienta,
ZIjFyTsNgQNyxI
to tajny klucz klienta.
Niezależnie od języka programowania używanego do obliczania wartości zakodowanej w formacie base64 – dla tych
z danymi logowania klienta, wynik zakodowany w formacie base64 będzie wyglądał tak:
bnM0ZlFjMTRaZzRoS0ZDTmFTekFyVnV3c3pYOTVYOlpJakZ5VHNOZ1FOeXhJOg==
Następnie możesz wysłać żądanie tokena w następujący sposób:
$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \ -H 'Authorization: Basic bnM0ZlFjMTRaZzRoS0ZDTmFTekFyVnV3c3pYOTVYOlpJakZ5VHNOZ1FOeXhJOg==' \ -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \ -d 'grant_type=client_credentials'
Narzędzie curl
utworzy dla Ciebie podstawowy nagłówek HTTP, jeśli użyjesz
opcję -u. Ten fragment jest odpowiednikiem powyższego:
$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \ -u 'ns4fQc14Zg4hKFCNaSzArVuwszX95X:ZIjFyTsNgQNyxI' \ -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \ -d 'grant_type=client_credentials'
Inne środowiska programistyczne mogą mieć podobne skróty, które automatycznie generują zakodowany w formacie base64.
Haszowanie tokenów w bazie danych
Aby chronić dostęp OAuth i tokeny odświeżania w przypadku naruszenia bezpieczeństwa bazy danych, możesz: włączyć automatyczne szyfrowanie tokenów w organizacji Edge. Gdy ta funkcja jest włączona, Edge automatycznie tworzy zahaszowaną wersję nowo wygenerowanych dostępu OAuth i tokenów odświeżania przy użyciu na określonym algorytmie. (Poniżej znajdziesz informacje o szyfrowaniu masowym istniejących tokenów). niezaszyfrowane tokeny są używane w wywołaniach interfejsu API, a Edge weryfikuje je pod kątem zahaszowanych wersji w w bazie danych.
Poniższe właściwości na poziomie organizacji kontrolują szyfrowanie tokenów OAuth.
features.isOAuthTokenHashingEnabled = true features.OAuthTokenHashingAlgorithm = SHA1 | SHA256 | SHA384 | SHA512 | PLAIN
Jeśli masz już zaszyfrowane tokeny i chcesz je przechowywać do czasu ich wygaśnięcia, ustaw parametr poniższe właściwości w organizacji, gdzie algorytm szyfrowania pasuje do (na przykład SHA1 – poprzednia wartość domyślna Edge). Jeśli tokeny nie zostały zahaszowane, użyj PLAIN.
features.isOAuthTokenFallbackHashingEnabled = true features.OAuthTokenFallbackHashingAlgorithm = SHA1 | SHA256 | SHA384 | SHA512 | PLAIN
Jeśli jesteś klientem Edge w chmurze, skontaktuj się z zespołem pomocy Apigee Edge, aby skonfigurować te w swojej organizacji oraz opcjonalnie zahaszować istniejące tokeny.
Powiązane artykuły
- Wdrożenie typ przyznania danych logowania klienta
- Wdrożenie typ przyznania kodu autoryzacji
- Interfejs API kurs online na temat bezpieczeństwa (obejmuje OAuth)
- Zasady OAuthV2 – zawiera wiele przykładów pokazujących, jak wysyłać żądania do serwera autoryzacji i jak je konfigurować zasady OAuthV2.