Anda sedang melihat dokumentasi Apigee Edge.
Buka
dokumentasi Apigee X. info
Apa
Mendapatkan atribut token akses, token refresh, kode otorisasi, dan atribut aplikasi klien serta mengisi variabel dengan nilai atribut tersebut.
Kebijakan ini berguna saat Anda perlu mengonfigurasi perilaku bersyarat yang dinamis berdasarkan nilai dalam token atau kode otorisasi. Setiap kali validasi token terjadi, variabel akan otomatis diisi dengan nilai atribut token. Namun, jika validasi token belum terjadi, Anda dapat menggunakan fitur ini untuk mengisi variabel secara eksplisit dengan nilai atribut token. Lihat juga Menyesuaikan Token dan Kode Otorisasi.
Token akses yang Anda teruskan ke kebijakan ini harus valid atau kebijakan akan menampilkan error
invalid_access_token.
Contoh
Contoh berikut menggunakan kebijakan Get OAuth V2 Info untuk mengambil informasi tentang berbagai komponen alur kerja OAuth2, lalu mengakses informasi tersebut dalam kode.
Token akses
Untuk mendapatkan referensi ke token akses, gunakan elemen <AccessToken> dalam
kebijakan Anda.
Contoh berikut mengharapkan untuk menemukan token akses dalam parameter kueri bernama "access_token" (detail penerapan sebenarnya terserah Anda):
<GetOAuthV2Info name="MyTokenAttrsPolicy"> <AccessToken ref="request.queryparam.access_token"></AccessToken> </GetOAuthV2Info>
Dengan token akses yang diberikan, kebijakan akan mencari profil token dan mengisi serangkaian variabel dengan data profil.
Kemudian, Anda dapat mengakses variabel menggunakan JavaScript atau cara lain. Contoh berikut mengambil cakupan yang terkait dengan token akses menggunakan JavaScript:
var scope = context.getVariable('oauthv2accesstoken.MyTokenAttrsPolicy.scope');
Perhatikan bahwa untuk mengakses variabel tersebut dalam kode, Anda harus menambahkan awalan "oauthv2accesstoken". Untuk daftar lengkap variabel yang tersedia melalui token akses, lihat Variabel token akses.
Kode Auth
Untuk mendapatkan atribut kode otorisasi, gunakan elemen <AuthorizationCode>
dalam kebijakan Anda.
Contoh berikut mengharapkan untuk menemukan token akses dalam parameter formulir bernama "code" (detail implementasi sebenarnya terserah Anda):
<GetOAuthV2Info name="MyAuthCodeAttrsPolicy"> <AuthorizationCode ref="request.formparam.code"></AuthorizationCode> </GetOAuthV2Info>
Mengingat kode otorisasi, kebijakan akan mencari informasi kode dan mengisi serangkaian variabel dengan data kode otorisasi.
Kemudian, Anda dapat mengakses variabel menggunakan JavaScript atau cara lain. Contoh berikut mengambil atribut kustom yang terkait dengan kode otorisasi menggunakan JavaScript:
var attr = context.getVariable(‘oauthv2authcode.MyAuthCodeAttrsPolicy.custom_attribute_name’);
Perhatikan bahwa untuk mengakses variabel tersebut dalam kode, Anda harus menambahkan awalan "oauthv2authcode". Untuk mengetahui daftar lengkap variabel yang tersedia melalui kode otorisasi, lihat Variabel kode otorisasi.
Token refresh
Untuk mendapatkan atribut token refresh, gunakan elemen <RefreshToken> dalam
kebijakan Anda.
Contoh berikut mengharapkan untuk menemukan token akses dalam parameter kueri bernama "refresh_token" (detail penerapan sebenarnya terserah Anda):
<GetOAuthV2Info name="MyRefreshTokenAttrsPolicy"> <RefreshToken ref="request.queryparam.refresh_token"/> </GetOAuthV2Info>
Dengan token refresh, kebijakan akan mencari informasi token refresh dan mengisi sekumpulan variabel dengan data token refresh.
Kemudian, Anda dapat mengakses variabel tersebut menggunakan JavaScript atau cara lain. Contoh berikut mengambil atribut kustom yang terkait dengan token refresh menggunakan JavaScript:
var attr = context.getVariable(‘oauthv2refreshtoken.MyRefreshTokenAttrsPolicy.accesstoken.custom_attribute_name’);
Perhatikan bahwa untuk mengakses variabel dalam kode, Anda harus menambahkan awalan "oauthv2refreshtoken". Untuk mengetahui daftar lengkap variabel yang tersedia melalui token refresh, lihat Variabel token refresh.
Statis
Dalam beberapa kasus yang jarang terjadi, Anda mungkin perlu mendapatkan profil token yang dikonfigurasi secara statis (token yang tidak dapat diakses melalui variabel). Anda dapat melakukannya dengan memberikan nilai token akses sebagai elemen.
<GetOAuthV2Info name="GetTokenAttributes"> <AccessToken>shTUmeI1geSKin0TODcGLXBNe9vp</AccessToken> </GetOAuthV2Info>
Anda juga dapat melakukannya dengan semua jenis token lainnya (ID klien, kode otorisasi, dan token refresh).
ID Klien
Contoh ini menunjukkan cara mengambil informasi tentang aplikasi klien menggunakan ID klien.
Setelah dieksekusi, kebijakan akan mengisi sekumpulan variabel dengan informasi klien. Dalam
kasus ini, kebijakan mengharapkan untuk menemukan client ID dalam parameter kueri
yang disebut client_id. Dengan ID klien, kebijakan akan mencari profil klien
dan mengisi serangkaian variabel dengan data profil. Variabel akan diawali dengan
oauthv2client.
<GetOAuthV2Info name="GetClientAttributes"> <ClientId ref="request.queryparam.client_id"></ClientId> </GetOAuthV2Info>
Kemudian, Anda dapat mengakses variabel menggunakan JavaScript atau cara lain. Misalnya, untuk mendapatkan nama aplikasi developer dan email developer yang terkait dengan aplikasi klien menggunakan JavaScript:
context.getVariable("oauthv2client.GetClientAttributes.developer.email");
context.getVariable("oauthv2client.GetClientAttributes.developer.app.name");Referensi Elemen
Referensi elemen menjelaskan elemen dan atribut kebijakan GetOAuthV2Info.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <GetOAuthV2Info async="false" continueOnError="false" enabled="true" name="GetOAuthV2Info-1" <DisplayName>Get OAuth v2.0 Info 1</DisplayName> <AccessToken ref="variable"></AccessToken> <AuthorizationCode ref="variable"></AuthorizationCode> <ClientId ref="variable"></ClientId> <RefreshToken ref="variable"></RefreshToken> </GetOAuthV2Info>
Atribut <GetOAuthV2Info>
<GetOAuthV2Info async="false" continueOnError="false" enabled="true" name="Get-OAuth-v20-Info-1">
Tabel berikut menjelaskan atribut yang umum untuk semua elemen induk kebijakan:
| Atribut | Deskripsi | Default | Ketersediaan |
|---|---|---|---|
name |
Nama internal kebijakan. Nilai atribut Secara opsional, gunakan elemen |
T/A | Wajib |
continueOnError |
Tetapkan ke Setel ke |
salah | Opsional |
enabled |
Setel ke Setel ke |
true | Opsional |
async |
Atribut ini tidak digunakan lagi. |
salah | Tidak digunakan lagi |
<DisplayName> elemen
Gunakan selain atribut name untuk memberi label kebijakan di
editor proxy UI dengan nama natural language yang berbeda.
<DisplayName>Policy Display Name</DisplayName>
| Default |
T/A Jika Anda menghapus elemen ini, nilai atribut |
|---|---|
| Ketersediaan | Opsional |
| Jenis | String |
Elemen <AccessToken>
Mengambil profil untuk token akses. Anda meneruskan variabel yang berisi string token akses atau string token literal (kasus yang jarang terjadi). Dalam contoh ini, token akses diambil dari parameter kueri yang diteruskan dalam permintaan. Gunakan elemen <IgnoreAccessTokenStatus> jika Anda ingin menampilkan informasi untuk token yang dicabut atau habis masa berlakunya.
<AccessToken ref="request.queryparam.access_token"></AccessToken>
|
Default: |
request.formparam.access_token (x-www-form-urlencoded dan ditentukan dalam isi permintaan) |
|
Kehadiran: |
Opsional |
| Jenis: | String |
| Nilai yang valid: |
Variabel alur yang berisi string token akses, atau string literal. |
Elemen <AuthorizationCode>
Mengambil profil untuk kode otorisasi. Anda meneruskan variabel yang berisi string kode otorisasi atau string token literal (kasus langka). Dalam contoh ini, kode otorisasi diambil dari parameter kueri yang diteruskan dalam permintaan. Untuk mengetahui daftar variabel yang diisi oleh operasi ini, lihat "Variabel alur".
<AuthorizationCode ref="request.queryparam.authorization_code"></AuthorizationCode>
|
Default: |
request.formparam.access_token (x-www-form-urlencoded dan ditentukan dalam isi permintaan) |
|
Kehadiran: |
Opsional |
| Jenis: | String |
| Nilai yang valid: |
Dapat berupa variabel alur yang berisi string kode autentikasi, atau string literal. |
Elemen <ClientId>
Mengambil informasi yang terkait dengan ID klien. Dalam contoh ini, ID klien diambil dari parameter kueri yang diteruskan dalam permintaan. Untuk mengetahui daftar variabel yang diisi oleh operasi ini, lihat "Variabel alur".
<ClientId ref="request.queryparam.client_id"></ClientId>|
Default: |
request.formparam.access_token (x-www-form-urlencoded dan ditentukan dalam isi permintaan) |
|
Kehadiran: |
Opsional |
| Jenis: | String |
| Nilai yang valid: | Dapat berupa variabel alur yang berisi string kode autentikasi, atau string literal. |
Elemen <IgnoreAccessTokenStatus>
Menampilkan informasi token meskipun token telah habis masa berlakunya atau dicabut. Elemen ini hanya dapat digunakan dengan token akses. Informasi untuk entitas lain seperti token refresh dan kode otorisasi ditampilkan terlepas dari statusnya, secara default.
<IgnoreAccessTokenStatus>true</IgnoreAccessTokenStatus>
|
Default: |
false |
|
Kehadiran: |
Opsional |
| Jenis: | Boolean |
| Nilai yang valid: | benar atau salah |
Elemen <RefreshToken>
Mengambil profil untuk token refresh. Anda meneruskan variabel yang berisi string token refresh atau string token literal (kasus yang jarang terjadi). Dalam contoh ini, token refresh diambil dari parameter kueri yang diteruskan dalam permintaan. Untuk mengetahui daftar variabel yang diisi oleh operasi ini, lihat "Variabel alur".
<RefreshToken ref="request.queryparam.refresh_token"></RefreshToken>
|
Default: |
request.formparam.access_token (x-www-form-urlencoded dan ditentukan dalam isi permintaan) |
|
Kehadiran: |
Opsional |
| Jenis: | String |
| Nilai yang valid: |
Variabel alur yang berisi string token refresh, atau string literal. |
Variabel alur
Kebijakan GetOAuthV2Info mengisi variabel ini, dan biasanya digunakan dalam kasus saat Anda memerlukan data profil, tetapi pemberian atau validasi belum terjadi. .
Variabel Client-ID
Variabel ini diisi saat elemen ClientId ditetapkan:
oauthv2client.{policy_name}.client_id
oauthv2client.{policy_name}.client_secret
oauthv2client.{policy_name}.redirection_uris // Note the spelling -- 'redirection_uris'
oauthv2client.{policy_name}.developer.email
oauthv2client.{policy_name}.developer.app.name
oauthv2client.{policy_name}.developer.id
oauthv2client.{policy_name}.{developer_app_custom_attribute_name}Variabel token akses
Variabel ini diisi saat elemen AccessToken ditetapkan:
oauthv2accesstoken.{policy_name}.developer.id oauthv2accesstoken.{policy_name}.developer.app.name oauthv2accesstoken.{policy_name}.developer.app.id oauthv2accesstoken.{policy_name}.developer.email oauthv2accesstoken.{policy_name}.organization_name oauthv2accesstoken.{policy_name}.api_product_list oauthv2accesstoken.{policy_name}.access_token oauthv2accesstoken.{policy_name}.scope oauthv2accesstoken.{policy_name}.expires_in //in seconds oauthv2accesstoken.{policy_name}.status oauthv2accesstoken.{policy_name}.client_id oauthv2accesstoken.{policy_name}.accesstoken.{custom_attribute_name} oauthv2accesstoken.{policy_name}.refresh_token oauthv2accesstoken.{policy_name}.refresh_token_status oauthv2accesstoken.{policy_name}.refresh_token_expires_in //in seconds oauthv2accesstoken.{policy_name}.refresh_count oauthv2accesstoken.{policy_name}.refresh_token_issued_at oauthv2accesstoken.{policy_name}.revoke_reason //Apigee hybrid only with value of REVOKED_BY_APP, REVOKED_BY_ENDUSER, REVOKED_BY_APP_ENDUSER, or TOKEN_REVOKED
Variabel kode otorisasi
Variabel ini diisi saat elemen AuthorizationCode ditetapkan:
oauthv2authcode.{policy_name}.code
oauthv2authcode.{policy_name}.scope
oauthv2authcode.{policy_name}.redirect_uri
oauthv2authcode.{policy_name}.client_id
oauthv2authcode.{policy_name}.{auth_code_custom_attribute_name}Variabel token refresh
Variabel ini diisi saat elemen RefreshToken ditetapkan:
oauthv2refreshtoken.{policy_name}.developer.id oauthv2refreshtoken.{policy_name}.developer.app.name oauthv2refreshtoken.{policy_name}.developer.app.id oauthv2refreshtoken.{policy_name}.developer.email oauthv2refreshtoken.{policy_name}.organization_name oauthv2refreshtoken.{policy_name}.api_product_list oauthv2refreshtoken.{policy_name}.access_token oauthv2refreshtoken.{policy_name}.scope oauthv2refreshtoken.{policy_name}.expires_in //in seconds oauthv2refreshtoken.{policy_name}.status oauthv2refreshtoken.{policy_name}.client_id oauthv2refreshtoken.{policy_name}.accesstoken.{custom_attribute_name} oauthv2refreshtoken.{policy_name}.refresh_token oauthv2refreshtoken.{policy_name}.refresh_token_status oauthv2refreshtoken.{policy_name}.refresh_token_expires_in //in seconds oauthv2refreshtoken.{policy_name}.refresh_count oauthv2refreshtoken.{policy_name}.refresh_token_issued_at oauthv2refreshtoken.{policy_name}.revoke_reason //Apigee hybrid only with value of REVOKED_BY_APP, REVOKED_BY_ENDUSER, REVOKED_BY_APP_ENDUSER, or TOKEN_REVOKED
Skema
Setiap jenis kebijakan ditentukan oleh skema XML (.xsd). Sebagai referensi, skema kebijakan
tersedia di GitHub.
Referensi error
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. The error names shown below are the strings
that are assigned to the fault.name variable when an error occurs. See the Fault
variables section below for more details.
| Fault code | HTTP status | Cause |
|---|---|---|
steps.oauth.v2.access_token_expired |
500 | The access token sent to the policy is expired. |
steps.oauth.v2.authorization_code_expired |
500 | The authorization code sent to the policy is expired. |
steps.oauth.v2.invalid_access_token |
500 | The access token sent to the policy is invalid. |
steps.oauth.v2.invalid_client-invalid_client_id |
500 | The client ID sent to the policy is invalid. |
steps.oauth.v2.invalid_refresh_token |
500 | The refresh token sent to the policy is invalid. |
steps.oauth.v2.invalid_request-authorization_code_invalid |
500 | The authorization code sent to the policy is invalid. |
steps.oauth.v2.InvalidAPICallAsNoApiProductMatchFound |
401 | Please see this Apigee Community post for information about troubleshooting this error. |
steps.oauth.v2.refresh_token_expired |
500 | The refresh token sent to the policy is expired. |
Deployment errors
Refer to the message reported in the UI for information about deployment errors.
Fault variables
These variables are set when this policy triggers an error at runtime.
| 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 Matches "IPDeniedAccess" |
oauthV2.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.GetTokenInfo.failed = true |
oauthV2.policy_name.fault.name |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.GetToKenInfo.fault.name = invalid_client-invalid_client_id |
oauthV2.policy_name.fault.cause |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.GetTokenInfo.cause = ClientID is Invalid |
Example error response
{ "fault":{ "faultstring":"ClientId is Invalid", "detail":{ "errorcode":"keymanagement.service.invalid_client-invalid_client_id" } } }
Example fault rule
<FaultRule name="OAuthV2 Faults">
<Step>
<Name>AM-InvalidClientIdResponse</Name>
</Step>
<Condition>(fault.name = "invalid_client-invalid_client_id")</Condition>
</FaultRule>