Anda sedang melihat dokumentasi Apigee Edge.
Buka
dokumentasi Apigee X. info
Apa
OAuthV2 adalah kebijakan multifaset untuk melakukan operasi jenis pemberian izin OAuth 2.0. Kebijakan ini adalah kebijakan utama yang digunakan untuk mengonfigurasi endpoint OAuth 2.0 di Apigee Edge.
Tips: Jika Anda ingin mempelajari lebih lanjut OAuth di Apigee Edge, lihat halaman beranda OAuth. Di sini tersedia link ke referensi, contoh, video, dan lainnya. Lihat contoh OAuth lanjutan di GitHub untuk melihat demonstrasi yang baik tentang cara kebijakan ini digunakan dalam aplikasi yang berfungsi.
Contoh
VerifyAccessToken
VerifyAccessToken
Konfigurasi kebijakan OAuthV2 ini (dengan operasi VerifyAccessToken) memverifikasi bahwa token akses yang dikirimkan ke Apigee Edge valid. Saat operasi kebijakan ini dipicu, Edge akan mencari token akses yang valid dalam permintaan. Jika token akses valid, permintaan diizinkan untuk dilanjutkan. Jika tidak valid, semua pemrosesan akan berhenti dan error akan ditampilkan dalam respons.
<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>Catatan: Hanya Token Bearer OAuth 2.0 yang didukung. Token Kode Otentikasi Pesan (MAC) tidak didukung.
Contoh:
$ curl -H "Authorization: Bearer ylSkZIjbdWybfsUQe9BqP0LH5Z" http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282
Secara default, Edge menerima token akses di header Authorization dengan
awalan Bearer. Anda dapat mengubah default ini dengan elemen <AccessToken>.
GenerateAccessToken
Membuat token akses
Untuk contoh yang menunjukkan cara meminta token akses untuk setiap jenis pemberian yang didukung, lihat Meminta token akses dan kode otorisasi. Topik ini mencakup contoh operasi ini:
GenerateAuthorizationCode
Buat kode otorisasi
Untuk contoh yang menunjukkan cara meminta kode otorisasi, lihat Meminta kode otorisasi.
RefreshAccessToken
Memperbarui token akses
Untuk contoh yang menunjukkan cara meminta token akses menggunakan token refresh, lihat Memperbarui token akses.
Token alur respons
Membuat token akses pada alur respons
Terkadang Anda mungkin perlu membuat token akses dalam alur respons. Misalnya, Anda dapat melakukannya sebagai respons terhadap beberapa validasi kustom yang dilakukan di layanan backend. Dalam contoh ini, kasus penggunaan memerlukan token akses dan token refresh, sehingga tidak memungkinkan jenis pemberian implisit. Dalam hal ini, kita akan menggunakan jenis pemberian sandi untuk membuat token. Seperti yang akan Anda lihat, trik agar ini berfungsi adalah meneruskan header permintaan Otorisasi dengan kebijakan JavaScript.
Pertama, mari kita lihat contoh kebijakan:
<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>
Jika Anda menerapkan kebijakan ini pada alur respons, kebijakan akan gagal dengan error 401 UnAuthorized meskipun parameter login yang benar ditentukan dalam kebijakan. Untuk mengatasi masalah ini, Anda perlu menyetel header permintaan Otorisasi.
Header Otorisasi harus berisi skema akses Dasar dengan client_id:client_secret yang dienkode Base64.
Anda dapat menambahkan header ini dengan kebijakan JavaScript yang ditempatkan tepat sebelum kebijakan OAuthV2, seperti ini. Variabel "local_clientid" dan "local_secret" harus ditetapkan sebelumnya dan tersedia dalam alur:
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)));
Lihat juga "Mengenkode kredensial autentikasi dasar".
Referensi elemen
Referensi kebijakan menjelaskan elemen dan atribut kebijakan OAuthV2.
Contoh kebijakan yang ditampilkan di bawah adalah salah satu dari banyak kemungkinan konfigurasi. Contoh ini menunjukkan kebijakan OAuthV2 yang dikonfigurasi untuk operasi GenerateAccessToken. Hal ini mencakup elemen wajib dan opsional. Lihat deskripsi elemen di bagian ini untuk mengetahui detailnya.
<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>
Atribut <OAuthV2>
<OAuthV2 async="false" continueOnError="false" enabled="true" name="MyOAuthPolicy">
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>
<AccessToken>request.header.access_token</AccessToken>
Secara default, VerifyAccessToken mengharapkan token akses dikirim di header Authorization.
Anda dapat mengubah default tersebut menggunakan elemen ini. Misalnya, request.queryparam.access_token menunjukkan bahwa token akses harus ada sebagai parameter kueri bernama access_token.
<AccessToken>request.header.access_token</AccessToken> ditentukan:
curl https://myorg-myenv.apigee.net/oauth2/validate -H "access_token:Rft3dqrs56Blirls56a"
<AccessToken>request.queryparam.access_token</AccessToken> ditentukan:
curl "https://myorg-myenv.apigee.net/oauth2/validate?access_token:Rft3dqrs56Blirls56a"
|
Default: |
T/A |
|
Kehadiran: |
Opsional |
| Jenis: | String |
| Digunakan dengan operasi: |
|
Elemen <AccessTokenPrefix>
<AccessTokenPrefix>Bearer</AccessTokenPrefix>
Secara default, VerifyAccessToken mengharapkan token akses dikirim di header Otorisasi sebagai token Bearer. Contoh:
-H "Authorization: Bearer Rft3dqrs56Blirls56a"
Saat ini, hanya Bearer yang merupakan awalan yang didukung.
|
Default: |
Bearer |
|
Kehadiran: |
Opsional |
| Jenis: | String |
| Nilai yang valid: |
Bearer |
| Digunakan dengan operasi: |
|
Elemen <AppEndUser>
<AppEndUser>request.queryparam.app_enduser</AppEndUser>
Dalam kasus saat ID pengguna akhir aplikasi harus dikirim ke server otorisasi, elemen ini memungkinkan Anda menentukan tempat Edge harus mencari ID pengguna akhir. Misalnya, ID dapat dikirim sebagai parameter kueri atau di header HTTP.
Misalnya, request.queryparam.app_enduser menunjukkan bahwa
AppEndUser harus ada sebagai parameter kueri, seperti, misalnya,
?app_enduser=ntesla@theramin.com. Untuk mewajibkan AppEndUser di header
HTTP, misalnya, tetapkan nilai ini ke request.header.app_enduser.
Dengan menyediakan setelan ini, Anda dapat menyertakan ID pengguna akhir aplikasi dalam token akses. Fitur ini berguna jika Anda ingin dapat mengambil atau mencabut token akses OAuth 2.0 berdasarkan ID pengguna akhir. Untuk mengetahui informasi selengkapnya, lihat Mengaktifkan pengambilan dan pencabutan token akses OAuth 2.0 menurut ID pengguna akhir, ID aplikasi, atau keduanya.
|
Default: |
T/A |
|
Kehadiran: |
Opsional |
| Jenis: | String |
| Nilai yang valid: |
Variabel alur apa pun yang dapat diakses oleh kebijakan saat runtime. |
| Digunakan dengan jenis pemberian akses: |
|
<Attributes/Attribute>
<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>
Gunakan elemen ini untuk menambahkan atribut kustom ke token akses atau kode otorisasi. Misalnya, Anda dapat menyematkan ID pengguna atau ID sesi dalam token akses yang dapat diekstrak dan diperiksa saat runtime.
Elemen ini memungkinkan Anda menentukan nilai dalam variabel alur atau dari string literal. Jika Anda menentukan variabel dan string, nilai yang ditentukan dalam variabel alur akan digunakan. Jika variabel tidak dapat diselesaikan, string akan menjadi default.
Untuk mengetahui informasi selengkapnya tentang penggunaan elemen ini, lihat Menyesuaikan Token dan Kode Otorisasi.
Menampilkan atau menyembunyikan atribut khusus dalam respons
Ingatlah bahwa jika Anda menyetel elemen GenerateResponse kebijakan ini ke true, representasi JSON lengkap token akan ditampilkan dalam respons, termasuk atribut kustom yang Anda tetapkan. Dalam beberapa kasus, Anda mungkin ingin menyembunyikan beberapa atau semua atribut kustom dalam respons agar tidak terlihat oleh aplikasi klien.
Secara default, atribut khusus akan muncul dalam respons. Jika ingin menyembunyikannya, Anda dapat menyetel parameter display ke false. Contoh:
<Attributes>
<Attribute name="employee_id" ref="employee.id" display="false"/>
<Attribute name="employee_name" ref="employee.name" display="false"/>
</Attributes>Nilai atribut display tidak
dipertahankan. Misalnya, Anda membuat token akses dengan atribut kustom yang ingin disembunyikan dalam
respons yang dihasilkan. Menetapkan display=false akan mencapai tujuan tersebut. Namun, jika token akses baru dibuat nanti menggunakan token refresh, atribut kustom asli dari token akses akan muncul dalam respons token refresh. Hal ini karena Edge tidak mengingat bahwa
atribut display awalnya ditetapkan ke false dalam kebijakan pembuatan token akses--atribut
kustom hanyalah bagian dari metadata token akses.
Anda akan melihat perilaku yang sama jika menambahkan atribut kustom ke kode otorisasi--saat token akses dibuat menggunakan kode tersebut, atribut kustom tersebut akan muncul dalam respons token akses. Sekali lagi, ini mungkin bukan perilaku yang Anda maksudkan.
Untuk menyembunyikan atribut kustom dalam kasus ini, Anda memiliki pilihan berikut:
- Reset secara eksplisit atribut kustom dalam kebijakan token refresh dan setel tampilannya ke false. Dalam hal ini, Anda mungkin perlu mengambil nilai kustom asli dari token akses asli menggunakan kebijakan GetOAuthV2Info.
- Gunakan kebijakan JavaScript pasca-pemrosesan untuk mengekstrak secara manual atribut kustom yang tidak ingin Anda lihat dalam respons.
Lihat juga Menyesuaikan Token dan Kode Otorisasi.
|
Default: |
|
|
Kehadiran: |
Opsional |
| Nilai yang valid: |
|
| Digunakan dengan jenis pemberian akses: |
|
Elemen <ClientId>
<ClientId>request.formparam.client_id</ClientId>
Dalam beberapa kasus, aplikasi klien harus mengirimkan client ID ke server otorisasi. Elemen ini
menentukan bahwa Apigee harus mencari ID klien dalam variabel alur
request.formparam.client_id. Menetapkan ClientId
ke variabel lain tidak didukung.
Lihat juga Meminta token akses dan kode otorisasi.
|
Default: |
request.formparam.client_id (x-www-form-urlencoded dan ditentukan dalam isi permintaan) |
|
Kehadiran: |
Opsional |
| Jenis: | String |
| Nilai yang valid: | Variabel alur: request.formparam.client_id |
| Digunakan dengan jenis pemberian akses: |
Dapat juga digunakan dengan operasi GenerateAuthorizationCode. |
Elemen <Code>
<Code>request.queryparam.code</Code>
Dalam alur jenis pemberian otorisasi, klien harus mengirimkan kode otorisasi ke server otorisasi (Apigee Edge). Dengan elemen ini, Anda dapat menentukan tempat Edge harus mencari kode otorisasi. Misalnya, dapat dikirim sebagai parameter kueri, header HTTP, atau parameter formulir (default).
Variabel, request.queryparam.auth_code menunjukkan bahwa
kode otorisasi harus ada sebagai parameter kueri, misalnya, ?auth_code=AfGlvs9. Untuk mewajibkan kode otorisasi di header HTTP, misalnya, tetapkan nilai ini ke request.header.auth_code. Lihat juga
Meminta token akses dan
kode otorisasi.
|
Default: |
request.formparam.code (x-www-form-urlencoded dan ditentukan dalam isi permintaan) |
|
Kehadiran: |
opsional |
| Jenis: | String |
| Nilai yang valid: | Variabel alur apa pun yang dapat diakses oleh kebijakan saat runtime |
| Digunakan dengan jenis pemberian akses: | authorization_code |
Elemen <ExpiresIn>
<ExpiresIn>10000</ExpiresIn>
Menerapkan waktu habis masa berlaku token akses dan kode otorisasi dalam milidetik. (Untuk
token refresh, gunakan <RefreshTokenExpiresIn>.) Nilai waktu habis masa berlaku adalah
nilai yang dihasilkan sistem ditambah nilai <ExpiresIn>. Jika
<ExpiresIn> disetel ke -1, token atau kode akan berakhir sesuai dengan masa berlaku maksimum token akses OAuth.
Jika <ExpiresIn> tidak ditentukan, sistem akan menerapkan
nilai default yang dikonfigurasi di tingkat sistem.
Waktu habis masa berlaku juga dapat ditetapkan saat runtime menggunakan nilai default yang dikodekan secara permanen atau dengan
mereferensikan variabel alur. Misalnya, Anda dapat menyimpan nilai masa berlaku token dalam peta nilai kunci, mengambilnya, menetapkannya ke variabel, dan mereferensikannya dalam kebijakan. Contoh,
kvm.oauth.expires_in.
Dengan Apigee Edge untuk Public Cloud, Edge menyimpan entitas berikut dalam cache selama minimal 180 detik setelah entitas diakses.
- Token akses OAuth. Artinya, token yang dicabut masih dapat berhasil hingga tiga menit, hingga batas cache-nya berakhir.
- Entitas Key Management Service (KMS) (Aplikasi, Developer, Produk API).
- Atribut kustom pada token OAuth dan entitas KMS.
Stanza berikut juga menentukan variabel alur dan nilai default. Perhatikan bahwa nilai variabel alur lebih diutamakan daripada nilai default yang ditentukan.
<ExpiresIn ref="kvm.oauth.expires_in">
3600000 <!--default value in milliseconds-->
</ExpiresIn>Edge tidak mendukung cara untuk memaksa masa berlaku token berakhir setelah dibuat. Jika Anda perlu memaksa masa berlaku token berakhir (misalnya, berdasarkan kondisi), kemungkinan solusinya dijelaskan dalam postingan Komunitas Apigee ini.
Secara default, token akses yang sudah habis masa berlakunya akan dihapus dari sistem Apigee Edge secara otomatis 3 hari setelah masa berlakunya habis. Lihat juga Menghapus token akses
Private Cloud: Untuk penginstalan Edge untuk Private Cloud, nilai
default ditetapkan oleh properti conf_keymanagement_oauth_auth_code_expiry_time_in_millis.
Untuk menyetel properti ini:
- Buka file
message-processor.propertiesdi editor. Jika file tidak ada, buat file:vi /opt/apigee/customer/application/message-processor.properties
- Tetapkan properti sesuai keinginan:
conf_keymanagement_oauth_auth_code_expiry_time_in_millis=3600000
- Pastikan file properti dimiliki oleh pengguna "apigee":
chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- Mulai ulang Pemroses Pesan.
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
|
Default: |
Jika tidak ditentukan, sistem akan menerapkan nilai default yang dikonfigurasi di tingkat sistem. |
|
Kehadiran: |
Opsional |
| Jenis: | Bilangan bulat |
| Nilai yang valid: |
|
| Digunakan dengan jenis pemberian akses: |
Juga digunakan dengan operasi GenerateAuthorizationCode. |
Elemen <ExternalAccessToken>
<ExternalAccessToken>request.queryparam.external_access_token</ExternalAccessToken>
Memberi tahu Apigee Edge tempat menemukan token akses eksternal (token akses yang tidak dibuat oleh Apigee Edge).
Variabel request.queryparam.external_access_token menunjukkan bahwa
token akses eksternal harus ada sebagai parameter kueri, seperti, misalnya, ?external_access_token=12345678. Untuk mewajibkan token akses eksternal
di header HTTP, misalnya, tetapkan nilai ini
ke request.header.external_access_token. Lihat juga Menggunakan Token OAuth Pihak Ketiga.
Elemen <ExternalAuthorization>
<ExternalAuthorization>true</ExternalAuthorization>
Jika elemen ini salah atau tidak ada, Edge akan memvalidasi client_id dan client_secret secara normal terhadap penyimpanan otorisasi Apigee Edge. Gunakan elemen ini jika Anda ingin menggunakan token OAuth pihak ketiga. Untuk mengetahui detail tentang penggunaan elemen ini, lihat Menggunakan Token OAuth Pihak Ketiga.
|
Default: |
false |
|
Kehadiran: |
Opsional |
| Jenis: | Boolean |
| Nilai yang valid: | benar atau salah |
| Digunakan dengan jenis pemberian akses: |
|
Elemen <ExternalAuthorizationCode>
<ExternalAuthorizationCode>request.queryparam.external_auth_code</ExternalAuthorizationCode>
Memberi tahu Apigee Edge tempat menemukan kode otorisasi eksternal (kode otorisasi yang tidak dibuat oleh Apigee Edge).
Variabel request.queryparam.external_auth_code menunjukkan bahwa
kode autentikasi eksternal harus ada sebagai parameter kueri, seperti, misalnya, ?external_auth_code=12345678. Untuk mewajibkan kode
auth eksternal
di header HTTP, misalnya, tetapkan nilai ini
ke request.header.external_auth_code. Lihat juga Menggunakan Token OAuth Pihak Ketiga.
Elemen <ExternalRefreshToken>
<ExternalRefreshToken>request.queryparam.external_refresh_token</ExternalRefreshToken>
Memberi tahu Apigee Edge tempat menemukan token refresh eksternal (token refresh yang tidak dibuat oleh Apigee Edge).
Variabel request.queryparam.external_refresh_token menunjukkan bahwa
token refresh eksternal harus ada sebagai parameter kueri, seperti, misalnya, ?external_refresh_token=12345678. Untuk mewajibkan token refresh eksternal
di header HTTP, misalnya, tetapkan nilai ini
ke request.header.external_refresh_token. Lihat juga Menggunakan Token OAuth Pihak Ketiga.
Elemen <GenerateResponse>
<GenerateResponse enabled='true'/>
Jika disetel ke true, kebijakan akan membuat dan menampilkan respons. Misalnya, untuk
GenerateAccessToken, responsnya mungkin seperti:
{ "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" }
Jika false, tidak ada respons yang dikirim. Sebagai gantinya, serangkaian variabel alur diisi dengan nilai yang terkait dengan fungsi kebijakan. Misalnya, variabel alur yang disebut
oauthv2authcode.OAuthV2-GenerateAuthorizationCode.code diisi dengan kode otorisasi yang
baru dibuat. Perhatikan bahwa expires_in dinyatakan dalam detik dalam
respons.
|
Default: |
false |
|
Kehadiran: |
Opsional |
| Jenis: | string |
| Nilai yang valid: | benar atau salah |
| Digunakan dengan jenis pemberian akses: |
|
Elemen <GenerateErrorResponse>
<GenerateErrorResponse enabled='true'/>
Jika disetel ke true, kebijakan akan membuat dan menampilkan respons jika atribut ContinueOnError disetel ke benar (true). Jika false (default), tidak ada respons yang dikirim. Sebagai gantinya, serangkaian variabel alur diisi dengan nilai yang terkait dengan
fungsi kebijakan.
|
Default: |
false |
|
Kehadiran: |
Opsional |
| Jenis: | string |
| Nilai yang valid: | benar atau salah |
| Digunakan dengan jenis pemberian akses: |
|
<GrantType>
<GrantType>request.queryparam.grant_type</GrantType>
Memberi tahu kebijakan tempat menemukan parameter jenis pemberian yang diteruskan dalam permintaan. Sesuai dengan spesifikasi OAuth 2.0, jenis pemberian izin harus diberikan dengan permintaan token akses dan kode otorisasi. Variabel dapat berupa header, parameter kueri, atau parameter formulir (default).
Misalnya, request.queryparam.grant_type menunjukkan bahwa Sandi
harus ada sebagai parameter kueri, misalnya, ?grant_type=password.
Untuk mewajibkan jenis pemberian dalam header HTTP, misalnya, tetapkan nilai ini
ke request.header.grant_type. Lihat juga Meminta token akses dan kode otorisasi.
|
Default: |
request.formparam.grant_type (x-www-form-urlencoded dan ditentukan dalam isi permintaan) |
|
Kehadiran: |
Opsional |
| Jenis: | string |
| Nilai yang valid: | Variabel, seperti yang dijelaskan di atas. |
| Digunakan dengan jenis pemberian akses: |
|
Elemen <Operation>
<Operation>GenerateAuthorizationCode</Operation>
Operasi OAuth 2.0 yang dijalankan oleh kebijakan.
|
Default: |
Jika |
|
Kehadiran: |
Opsional |
| Jenis: | String |
| Nilai yang valid: |
|
Elemen <PassWord>
<PassWord>request.queryparam.password</PassWord>
Elemen ini hanya digunakan dengan jenis pemberian sandi. Dengan
jenis pemberian sandi, kredensial pengguna (sandi dan nama pengguna) harus tersedia untuk
kebijakan OAuthV2. Elemen <PassWord> dan <UserName> digunakan untuk menentukan variabel tempat Edge dapat menemukan nilai ini. Jika elemen ini tidak ditentukan,
kebijakan mengharapkan untuk menemukan nilai (secara default) dalam parameter formulir bernama username
dan password. Jika nilai tidak ditemukan, kebijakan akan memunculkan error. Anda dapat menggunakan
elemen <PassWord> dan <UserName> untuk mereferensikan variabel
alur yang berisi kredensial.
Misalnya, Anda dapat meneruskan sandi dalam permintaan token menggunakan parameter kueri dan menetapkan
elemen seperti ini:
<PassWord>request.queryparam.password</PassWord>. Untuk
mewajibkan sandi di header HTTP, tetapkan nilai ini
ke request.header.password.
Kebijakan OAuthV2 tidak melakukan hal lain dengan nilai kredensial ini; Edge hanya memverifikasi bahwa nilai tersebut ada. Developer API yang akan mengambil nilai permintaan dan mengirimkannya ke penyedia identitas sebelum kebijakan pembuatan token dijalankan.
Lihat juga Meminta token akses dan kode otorisasi.
|
Default: |
request.formparam.password (x-www-form-urlencoded dan ditentukan dalam isi permintaan) |
|
Kehadiran: |
Opsional |
| Jenis: | String |
| Nilai yang valid: | Setiap variabel alur yang tersedia untuk kebijakan saat runtime. |
| Digunakan dengan jenis pemberian akses: | sandi |
Elemen <RedirectUri>
<RedirectUri>request.queryparam.redirect_uri</RedirectUri>
Menentukan tempat Edge harus mencari parameter redirect_uri dalam
permintaan.
Tentang URI pengalihan
URI pengalihan digunakan dengan jenis pemberian kode otorisasi dan implisit. URI pengalihan memberi tahu server otorisasi (Edge) ke mana harus mengirim kode otorisasi (untuk jenis pemberian kode otorisasi) atau token akses (untuk jenis pemberian implisit). Penting untuk memahami kapan parameter ini diperlukan, kapan bersifat opsional, dan cara penggunaannya:
-
(wajib) Jika URL Panggilan Balik terdaftar dengan aplikasi developer yang terkait dengan kunci klien permintaan, dan jika
redirect_uriada dalam permintaan, maka keduanya harus sama persis. Jika tidak cocok, error akan ditampilkan. Untuk mengetahui informasi tentang cara mendaftarkan aplikasi developer di Edge dan menentukan URL Panggilan Balik, lihat Mendaftarkan aplikasi dan mengelola kunci API. - (opsional) Jika URL Panggilan Balik terdaftar, dan
redirect_uritidak ada dalam permintaan, Edge akan mengalihkan ke URL Panggilan Balik yang terdaftar. - (wajib) Jika URL Callback tidak terdaftar, maka
redirect_uridiperlukan. Perhatikan bahwa dalam kasus ini, Edge akan menerima URL APA PUN. Kasus ini dapat menimbulkan masalah keamanan, dan oleh karena itu hanya boleh digunakan dengan aplikasi klien tepercaya. Jika aplikasi klien tidak tepercaya, praktik terbaiknya adalah selalu mewajibkan pendaftaran URL Panggilan Balik.
Anda dapat mengirim parameter ini dalam parameter kueri atau di header. Variabel
request.queryparam.redirect_uri menunjukkan bahwa RedirectUri
harus ada sebagai parameter kueri, seperti, misalnya, ?redirect_uri=login.myapp.com. Untuk mewajibkan RedirectUri di header HTTP, misalnya, tetapkan nilai ini ke request.header.redirect_uri. Lihat
juga Meminta token akses dan
kode otorisasi.
|
Default: |
request.formparam.redirect_uri (x-www-form-urlencoded dan ditentukan dalam isi permintaan) |
|
Kehadiran: |
Opsional |
| Jenis: | String |
| Nilai yang valid: | Variabel alur apa pun yang dapat diakses dalam kebijakan saat runtime |
| Digunakan dengan jenis pemberian akses: |
Juga digunakan dengan operasi GenerateAuthorizationCode. |
Elemen <RefreshToken>
<RefreshToken>request.queryparam.refreshtoken</RefreshToken>
Saat meminta token akses menggunakan token refresh, Anda harus memberikan token refresh dalam permintaan. Elemen ini memungkinkan Anda menentukan tempat Edge harus mencari token refresh. Misalnya, parameter ini dapat dikirim sebagai parameter kueri, header HTTP, atau parameter formulir (default).
Variabel request.queryparam.refreshtoken menunjukkan bahwa token
refresh harus ada sebagai parameter kueri, seperti, misalnya, ?refresh_token=login.myapp.com. Untuk mewajibkan RefreshToken di header HTTP, misalnya, tetapkan nilai ini ke request.header.refresh_token. Lihat
juga Meminta token akses dan
kode otorisasi.
|
Default: |
request.formparam.refresh_token (x-www-form-urlencoded dan ditentukan dalam isi permintaan) |
|
Kehadiran: |
Opsional |
| Jenis: | String |
| Nilai yang valid: | Variabel alur apa pun yang dapat diakses dalam kebijakan saat runtime |
| Digunakan dengan jenis pemberian akses: |
|
Elemen <RefreshTokenExpiresIn>
<RefreshTokenExpiresIn>1000</RefreshTokenExpiresIn>
Menerapkan waktu habis masa berlaku token refresh dalam milidetik. Nilai waktu habis masa berlaku adalah nilai yang dihasilkan sistem ditambah nilai <RefreshTokenExpiresIn>. Jika
<RefreshTokenExpiresIn> ditetapkan ke -1, masa berlaku token refresh
berakhir sesuai dengan masa berlaku maksimum token refresh OAuth. Jika <RefreshTokenExpiresIn> tidak ditentukan,
sistem akan menerapkan nilai default yang dikonfigurasi di tingkat sistem. Hubungi Dukungan Apigee Edge untuk mengetahui informasi selengkapnya tentang setelan sistem default.
Waktu habis masa berlaku juga dapat ditetapkan saat runtime menggunakan nilai default yang dikodekan secara permanen atau dengan
mereferensikan variabel alur. Misalnya, Anda dapat menyimpan nilai masa berlaku token dalam peta nilai kunci, mengambilnya, menetapkannya ke variabel, dan mereferensikannya dalam kebijakan. Misalnya, kvm.oauth.expires_in.
Stanza berikut juga menentukan variabel alur dan nilai default. Perhatikan bahwa nilai variabel aliran lebih diutamakan daripada nilai default yang ditentukan.
<RefreshTokenExpiresIn ref="kvm.oauth.expires_in">
3600000 <!--default value in milliseconds-->
</RefreshTokenExpiresIn>Private Cloud: Untuk penginstalan Edge untuk Private Cloud, nilai
default ditetapkan oleh properti conf_keymanagement_oauth_refresh_token_expiry_time_in_millis.
Untuk menyetel properti ini:
- Buka file
message-processor.propertiesdi editor. Jika file tidak ada, buat file:vi /opt/apigee/customer/application/message-processor.properties
- Tetapkan properti sesuai keinginan:
conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
- Pastikan file properti dimiliki oleh pengguna "apigee":
chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- Mulai ulang Pemroses Pesan.
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
|
Default: |
63072000000 md (2 tahun) (berlaku mulai 05 Agustus 2024) |
|
Kehadiran: |
Opsional |
| Jenis: | Bilangan bulat |
| Nilai yang valid: |
|
| Digunakan dengan jenis pemberian akses: |
|
Elemen <ResponseType>
<ResponseType>request.queryparam.response_type</ResponseType>
Elemen ini memberi tahu Edge jenis pemberian yang diminta aplikasi klien. Parameter ini hanya digunakan dengan alur jenis pemberian implisit dan kode otorisasi.
Secara default, Edge mencari nilai jenis respons dalam parameter kueri response_type. Jika Anda ingin mengganti perilaku default ini, gunakan elemen <ResponseType> untuk
mengonfigurasi variabel alur yang berisi nilai jenis respons. Misalnya, jika Anda menyetel elemen
ini ke request.header.response_type, Edge akan mencari jenis respons yang akan
diteruskan di header permintaan. Lihat juga Meminta token akses dan kode otorisasi.
|
Default: |
request.formparam.response_type (x-www-form-urlencoded dan ditentukan dalam isi permintaan) |
|
Kehadiran: |
Opsional. Gunakan elemen ini jika Anda ingin mengganti perilaku default. |
| Jenis: | String |
| Nilai yang valid: | code (untuk jenis pemberian kode otorisasi) atau token
(untuk jenis pemberian implisit) |
| Digunakan dengan jenis pemberian akses: |
|
Elemen <ReuseRefreshToken>
<ReuseRefreshToken>true</ReuseRefreshToken>
Jika disetel ke true, token refresh yang ada akan digunakan kembali hingga masa berlakunya habis. Jika
false, token refresh baru dikeluarkan oleh Apigee Edge saat token refresh yang valid
diberikan.
|
Default: |
|
|
Kehadiran: |
opsional |
| Jenis: | boolean |
| Nilai yang valid: |
|
| Digunakan dengan jenis pemberian akses: |
|
Elemen <Scope>
<Scope>request.queryparam.scope</Scope>
Jika elemen ini ada di salah satu kebijakan GenerateAccessToken atau GenerateAuthorizationCode, elemen ini digunakan untuk menentukan cakupan yang akan diberikan ke token atau kode. Nilai ini biasanya diteruskan ke kebijakan dalam permintaan dari aplikasi klien. Anda dapat mengonfigurasi elemen untuk mengambil variabel alur, sehingga Anda dapat memilih cara cakupan diteruskan dalam permintaan. Pada
contoh berikut, request.queryparam.scope menunjukkan bahwa cakupan harus
ada sebagai parameter kueri, misalnya, ?scope=READ. Untuk mewajibkan cakupan
dalam header HTTP, misalnya, tetapkan nilai ini
ke request.header.scope.
Jika elemen ini muncul dalam kebijakan "VerifyAccessToken", maka elemen ini digunakan untuk menentukan cakupan yang harus diterapkan oleh kebijakan. Dalam jenis kebijakan ini, nilai harus berupa nama cakupan "hard coded" -- Anda tidak dapat menggunakan variabel. Contoh:
<Scope>A B</Scope>
Lihat juga Bekerja dengan cakupan OAuth2 dan Meminta token akses dan kode otorisasi.
|
Default: |
Tidak ada cakupan |
|
Kehadiran: |
Opsional |
| Jenis: | String |
| Nilai yang valid: |
Jika digunakan dengan kebijakan Generate*, variabel alur. Jika digunakan dengan VerifyAccessToken, daftar nama cakupan (string) yang dipisahkan spasi. |
| Digunakan dengan jenis pemberian akses: |
|
Elemen <State>
<State>request.queryparam.state</State>
Jika aplikasi klien harus mengirim informasi status ke server otorisasi, elemen ini memungkinkan Anda menentukan tempat Edge harus mencari nilai status. Misalnya, token dapat dikirim sebagai parameter kueri atau di header HTTP. Nilai status biasanya digunakan sebagai langkah keamanan untuk mencegah serangan CSRF.
Misalnya, request.queryparam.state menunjukkan bahwa status harus ada sebagai parameter kueri, seperti, misalnya, ?state=HjoiuKJH32. Untuk mewajibkan
status di header HTTP, misalnya, tetapkan nilai ini
ke request.header.state. Lihat juga Meminta token akses dan kode otorisasi.
|
Default: |
Tanpa status |
|
Kehadiran: |
Opsional |
| Jenis: | String |
| Nilai yang valid: | Variabel alur apa pun yang dapat diakses oleh kebijakan saat runtime |
| Digunakan dengan jenis pemberian akses: |
|
Elemen <StoreToken>
<StoreToken>true</StoreToken>
Tetapkan elemen ini ke true jika elemen <ExternalAuthorization>
adalah true. Elemen <StoreToken> memberi tahu Apigee Edge untuk
menyimpan token akses eksternal. Jika tidak, data tidak akan dipertahankan.
|
Default: |
false |
|
Kehadiran: |
Opsional |
| Jenis: | Boolean |
| Nilai yang valid: | benar atau salah |
| Digunakan dengan jenis pemberian akses: |
|
<SupportedGrantTypes>/<GrantType> element
<SupportedGrantTypes> <GrantType>authorization_code</GrantType> <GrantType>client_credentials</GrantType> <GrantType>implicit</GrantType> <GrantType>password</GrantType> </SupportedGrantTypes>
Menentukan jenis pemberian yang didukung oleh endpoint token OAuth di Apigee Edge. Endpoint dapat
mendukung beberapa jenis pemberian (yaitu, satu endpoint dapat dikonfigurasi untuk mendistribusikan token akses
untuk beberapa jenis pemberian). Untuk mengetahui informasi selengkapnya tentang endpoint, lihat Memahami endpoint OAuth. Jenis pemberian diteruskan dalam permintaan token di parameter grant_type.
Jika tidak ada jenis pemberian yang didukung yang ditentukan, maka satu-satunya jenis pemberian yang diizinkan adalah
authorization_code dan implicit. Lihat juga elemen <GrantType> (yang merupakan elemen tingkat yang lebih tinggi yang digunakan untuk
menentukan tempat Apigee Edge harus mencari parameter grant_type yang diteruskan dalam
permintaan klien. Edge akan memastikan bahwa nilai parameter grant_type
cocok dengan salah satu jenis pemberian yang didukung).
|
Default: |
kode _otorisasi dan implisit |
|
Kehadiran: |
Wajib |
| Jenis: | String |
| Nilai yang valid: |
|
Elemen <Tokens>/<Token>
Digunakan dengan operasi ValidateToken dan InvalidateToken. Lihat juga Menyetujui dan
mencabut token akses. Elemen <Token> mengidentifikasi variabel alur yang menentukan
sumber token yang akan dibatalkan. Jika developer diharapkan mengirimkan token akses sebagai
parameter kueri bernama access_token, misalnya,
gunakan request.queryparam.access_token.
Elemen <UserName>
<UserName>request.queryparam.user_name</UserName>
Elemen ini hanya digunakan dengan jenis pemberian sandi. Dengan
jenis pemberian sandi, kredensial pengguna (sandi dan nama pengguna) harus tersedia untuk
kebijakan OAuthV2. Elemen <PassWord> dan <UserName> digunakan untuk menentukan variabel tempat Edge dapat menemukan nilai ini. Jika elemen ini tidak ditentukan,
kebijakan mengharapkan untuk menemukan nilai (secara default) dalam parameter formulir bernama username
dan password. Jika nilai tidak ditemukan, kebijakan akan memunculkan error. Anda dapat menggunakan
elemen <PassWord> dan <UserName> untuk mereferensikan variabel
alur yang berisi kredensial.
Misalnya, Anda dapat meneruskan nama pengguna dalam parameter kueri dan menetapkan
elemen <UserName> seperti ini:
<UserName>request.queryparam.username</UserName>.Untuk mewajibkan
nama pengguna di header HTTP, tetapkan nilai ini
ke request.header.username.
Kebijakan OAuthV2 tidak melakukan hal lain dengan nilai kredensial ini; Edge hanya memverifikasi bahwa nilai tersebut ada. Developer API yang akan mengambil nilai permintaan dan mengirimkannya ke penyedia identitas sebelum kebijakan pembuatan token dijalankan.
Lihat juga Meminta token akses dan kode otorisasi.
|
Default: |
request.formparam.username (x-www-form-urlencoded dan ditentukan dalam isi permintaan) |
|
Kehadiran: |
Opsional |
| Jenis: | String |
| Nilai yang valid: | Setelan variabel apa pun. |
| Digunakan dengan jenis pemberian akses: | sandi |
Memverifikasi token akses
Setelah endpoint token disiapkan untuk proxy API, kebijakan OAuthV2 yang sesuai yang
menentukan operasi VerifyAccessToken dilampirkan ke Alur yang mengekspos
resource yang dilindungi.
Misalnya, untuk memastikan bahwa semua permintaan ke API diberi otorisasi, kebijakan berikut menerapkan verifikasi token akses:
<OAuthV2 name="VerifyOAuthAccessToken"> <Operation>VerifyAccessToken</Operation> </OAuthV2>
Kebijakan dilampirkan ke resource API yang akan dilindungi. Untuk memastikan bahwa semua permintaan ke API diverifikasi, lampirkan kebijakan ke PreFlow permintaan ProxyEndpoint, sebagai berikut:
<PreFlow>
<Request>
<Step><Name>VerifyOAuthAccessToken</Name></Step>
</Request>
</PreFlow>Elemen opsional berikut dapat digunakan untuk mengganti setelan default untuk operasi VerifyAccessToken.
| Nama | Deskripsi |
|---|---|
| Cakupan |
Daftar cakupan yang dipisahkan spasi. Verifikasi akan berhasil jika setidaknya salah satu cakupan yang tercantum ada di token akses. Misalnya, kebijakan berikut akan memeriksa token akses untuk memastikan bahwa token tersebut berisi setidaknya salah satu cakupan yang tercantum. Jika READ atau WRITE ada, verifikasi akan berhasil. <OAuthV2 name="ValidateOauthScopePolicy"> <Operation>VerifyAccessToken</Operation> <Scope>READ WRITE</Scope> </OAuthV2> |
| AccessToken | Variabel tempat token akses diharapkan berada. Misalnya
request.queryparam.accesstoken. Secara default, token akses diharapkan ditampilkan oleh aplikasi di header HTTP Otorisasi, sesuai dengan spesifikasi OAuth 2.0. Gunakan setelan ini jika token akses diharapkan ditampilkan di lokasi non-standar, seperti parameter kueri, atau header HTTP dengan nama selain Authorization. |
Lihat juga Memverifikasi token akses dan Meminta token akses dan kode otorisasi.
Menentukan lokasi variabel permintaan
Untuk setiap jenis pemberian, kebijakan membuat asumsi tentang lokasi atau informasi yang diperlukan dalam pesan permintaan. Asumsi ini didasarkan pada spesifikasi OAuth 2.0. Jika aplikasi Anda perlu menyimpang dari spesifikasi OAuth 2.0, Anda dapat menentukan lokasi yang diharapkan untuk setiap parameter. Misalnya, saat menangani kode otorisasi, Anda dapat menentukan lokasi kode otorisasi, ID klien, URI pengalihan, dan cakupan. Parameter ini dapat ditentukan sebagai header HTTP, parameter kueri, atau parameter formulir.
Contoh di bawah menunjukkan cara menentukan lokasi parameter kode otorisasi yang diperlukan sebagai header 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> ...
Atau, jika perlu untuk mendukung dasar aplikasi klien Anda, Anda dapat mencampur dan mencocokkan header dan parameter kueri:
... <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> ...
Hanya satu lokasi yang dapat dikonfigurasi per parameter.
Variabel alur
Variabel alur yang ditentukan dalam tabel ini diisi saat kebijakan OAuth masing-masing dijalankan, sehingga tersedia untuk kebijakan atau aplikasi lain yang dijalankan dalam alur proxy API.
Operasi VerifyAccessToken
Operasi VerifyAccessToken dijalankan, sejumlah besar variabel alur diisi dalam konteks eksekusi proxy. Variabel ini memberi Anda properti yang terkait dengan token akses, aplikasi developer, developer, dan perusahaan. Anda dapat menggunakan kebijakan AssignMessage atau JavaScript, misalnya, untuk membaca salah satu variabel ini dan menggunakannya sesuai kebutuhan nanti dalam alur. Variabel ini juga dapat berguna untuk tujuan proses debug.
proxy.pathsuffix). Variabel flow.resource.name tidak perlu ditetapkan secara eksplisit.
Jika produk API tidak dikonfigurasi dengan lingkungan dan proxy API yang valid, maka
flow.resource.name harus ditetapkan secara eksplisit untuk mengisi variabel produk API dalam
alur. Untuk mengetahui detail konfigurasi produk, lihat Menggunakan Edge Management API untuk Memublikasikan API.
Variabel khusus token
| Variabel | Deskripsi |
|---|---|
organization_name |
Nama organisasi tempat proxy dieksekusi. |
developer.id |
ID developer yang terkait dengan aplikasi klien terdaftar. |
developer.app.name |
Nama developer yang terkait dengan aplikasi klien terdaftar. |
client_id |
ID klien aplikasi klien terdaftar. |
grant_type |
Jenis pemberian yang terkait dengan permintaan. |
token_type |
Jenis token yang terkait dengan permintaan. |
access_token |
Token akses yang sedang diverifikasi. |
accesstoken.{custom_attribute} |
Atribut kustom bernama di token akses. |
issued_at |
Tanggal penerbitan token akses yang dinyatakan dalam waktu epoch Unix dalam milidetik. |
expires_in |
Waktu habis masa berlaku token akses. Dinyatakan dalam
detik. Meskipun elemen ExpiresIn
menetapkan masa berlaku dalam milidetik, dalam respons token dan
variabel alur, nilai dinyatakan dalam detik. |
status |
Status token akses (misalnya, disetujui atau dicabut). |
scope |
Cakupan (jika ada) yang terkait dengan token akses. |
apiproduct.<custom_attribute_name> |
Atribut kustom bernama produk API yang terkait dengan aplikasi klien terdaftar. |
apiproduct.name |
Nama produk API yang terkait dengan aplikasi klien terdaftar. |
revoke_reason |
(Khusus Apigee hybrid) Menunjukkan alasan pencabutan token akses. Nilai dapat berupa |
Variabel spesifik per aplikasi
Variabel ini terkait dengan Aplikasi Developer yang terkait dengan token.
| Variabel | Deskripsi |
|---|---|
app.name |
|
app.id |
|
app.accessType |
|
app.callbackUrl |
|
app.status |
disetujui atau dicabut |
app.scopes |
|
app.appFamily |
|
app.apiproducts |
|
app.appParentStatus |
|
app.appType |
Misalnya: Developer |
app.appParentId |
|
app.created_by |
|
app.created_at |
|
app.last_modified_at |
|
app.last_modified_by |
|
app.{custom_attributes} |
Atribut kustom bernama dari aplikasi klien terdaftar. |
Variabel khusus developer
Jika app.appType adalah "Company", maka atribut perusahaan akan diisi dan jika app.appType adalah "Developer", maka atribut developer akan diisi.
| Variabel | Deskripsi |
|---|---|
| Variabel khusus developer | |
developer.id |
|
developer.userName |
|
developer.firstName |
|
developer.lastName |
|
developer.email |
|
developer.status |
aktif atau tidak aktif |
developer.apps |
|
developer.created_by |
|
developer.created_at |
|
developer.last_modified_at |
|
developer.last_modified_by |
|
developer.{custom_attributes} |
Atribut kustom bernama milik developer. |
Variabel khusus perusahaan
Jika app.appType adalah "Company", maka atribut perusahaan akan diisi dan jika app.appType adalah "Developer", maka atribut developer akan diisi.
| Variabel | Deskripsi |
|---|---|
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} |
Atribut kustom bernama perusahaan. |
operasi GenerateAuthorizationCode
Variabel ini ditetapkan saat operasi GenerateAuthorizationCode berhasil dieksekusi:
Awalan: oauthv2authcode.{policy_name}.{variable_name}
Contoh: oauthv2authcode.GenerateCodePolicy.code
| Variabel | Deskripsi |
|---|---|
code |
Kode otorisasi yang dibuat saat kebijakan dijalankan. |
redirect_uri |
URI pengalihan yang terkait dengan aplikasi klien terdaftar. |
scope |
Cakupan OAuth opsional yang diteruskan dalam permintaan klien. |
client_id |
ID klien yang diteruskan dalam permintaan klien. |
Operasi GenerateAccessToken dan RefreshAccessToken
Variabel ini ditetapkan saat operasi GenerateAccessToken dan RefreshAccessToken berhasil dieksekusi. Perhatikan bahwa variabel token refresh tidak berlaku untuk alur jenis pemberian kredensial klien.
Awalan: oauthv2accesstoken.{policy_name}.{variable_name}
Contoh: oauthv2accesstoken.GenerateTokenPolicy.access_token
| Nama variabel | Deskripsi |
|---|---|
access_token |
Token akses yang dibuat. |
client_id |
ID klien aplikasi developer yang terkait dengan token ini. |
expires_in |
Nilai masa berlaku untuk token. Lihat elemen <ExpiresIn> untuk mengetahui detailnya. Perhatikan bahwa dalam respons, expires_in dinyatakan dalam detik. |
scope |
Daftar cakupan yang tersedia yang dikonfigurasi untuk token. Lihat Bekerja dengan cakupan OAuth2. |
status |
approved atau revoked. |
token_type |
Disetel ke BearerToken. |
developer.email |
Alamat email developer terdaftar yang memiliki aplikasi developer yang terkait dengan token. |
organization_name |
Org tempat proxy dijalankan. |
api_product_list |
Daftar produk yang terkait dengan aplikasi developer yang sesuai dengan token. |
refresh_count |
|
refresh_token |
Token refresh yang dibuat. Perhatikan bahwa token refresh tidak dibuat untuk jenis pemberian kredensial klien. |
refresh_token_expires_in |
Masa berlaku token refresh, dalam hitungan detik. |
refresh_token_issued_at |
Nilai waktu ini adalah representasi string dari jumlah stempel waktu 32-bit yang sesuai. Misalnya, 'Wed, 21 Aug 2013 19:16:47 UTC' sesuai dengan nilai stempel waktu 1377112607413. |
refresh_token_status |
approved atau revoked. |
GenerateAccessTokenImplicitGrant
Variabel ini ditetapkan saat operasi GenerateAccessTokenImplicit berhasil dieksekusi untuk alur jenis pemberian izin implisit.
Awalan: oauthv2accesstoken.{policy_name}.{variable_name}
Contoh: oauthv2accesstoken.RefreshTokenPolicy.access_token
| Variabel | Deskripsi |
|---|---|
oauthv2accesstoken.access_token |
Token akses yang dihasilkan saat kebijakan dijalankan. |
oauthv2accesstoken.{policy_name}.expires_in |
Nilai masa berlaku untuk token, dalam detik. Lihat elemen <ExpiresIn> untuk mengetahui detailnya. |
Referensi error
Bagian ini menjelaskan kode error dan pesan error yang ditampilkan serta variabel error yang ditetapkan oleh Edge saat kebijakan ini memicu error. Informasi ini penting untuk diketahui jika Anda mengembangkan aturan error untuk menangani error. Untuk mempelajari lebih lanjut, lihat Yang perlu Anda ketahui tentang error kebijakan dan Menangani error.
Error runtime
Error ini dapat terjadi saat kebijakan dieksekusi.
| Kode kerusakan | Status HTTP | Penyebab | Ditampilkan oleh operasi |
|---|---|---|---|
steps.oauth.v2.access_token_expired |
401 | Masa berlaku token akses telah berakhir. |
VerifyAccessToken |
steps.oauth.v2.access_token_not_approved |
401 | Token akses telah dicabut. | VerifyAccessToken |
steps.oauth.v2.apiresource_doesnot_exist |
401 | Resource yang diminta tidak ada produk API yang terkait dengan token akses. | VerifyAccessToken |
steps.oauth.v2.FailedToResolveAccessToken |
500 | Kebijakan diharapkan menemukan token akses dalam variabel yang ditentukan dalam elemen <AccessToken>, tetapi variabel tersebut tidak dapat di-resolve. |
GenerateAccessToken |
steps.oauth.v2.FailedToResolveAuthorizationCode |
500 | Kebijakan diharapkan menemukan kode otorisasi dalam variabel yang ditentukan dalam elemen <Code>, tetapi variabel tersebut tidak dapat di-resolve. |
GenerateAuthorizationCode |
steps.oauth.v2.FailedToResolveClientId |
500 | Kebijakan diharapkan menemukan Client ID dalam variabel yang ditentukan dalam elemen <ClientId>, tetapi variabel tersebut tidak dapat di-resolve. |
GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
steps.oauth.v2.FailedToResolveRefreshToken |
500 | Kebijakan diharapkan menemukan token refresh dalam variabel yang ditentukan dalam elemen <RefreshToken>, tetapi variabel tersebut tidak dapat di-resolve. |
RefreshAccessToken |
steps.oauth.v2.FailedToResolveToken |
500 | Kebijakan diharapkan menemukan token dalam variabel yang ditentukan dalam elemen <Tokens>, tetapi variabel tidak dapat di-resolve. |
ValidateToken |
steps.oauth.v2.InsufficientScope |
403 | Token akses yang ditampilkan dalam permintaan memiliki cakupan yang tidak cocok dengan cakupan yang ditentukan dalam kebijakan token akses verifikasi. Untuk mempelajari cakupan, lihat Menggunakan cakupan OAuth2. | VerifyAccessToken |
steps.oauth.v2.invalid_access_token |
401 | Token akses yang dikirim dari klien tidak valid. | VerifyAccessToken |
steps.oauth.v2.invalid_client |
401 |
Nama error ini ditampilkan saat properti Catatan: Sebaiknya ubah kondisi aturan error yang ada untuk menangkap nama |
GenerateAccessToken RefreshAccessToken |
steps.oauth.v2.InvalidRequest |
400 | Nama error ini digunakan untuk beberapa jenis error, biasanya untuk parameter yang tidak ada atau salah yang dikirim dalam permintaan. Jika <GenerateResponse>
ditetapkan ke false, gunakan variabel error (dijelaskan di bawah) untuk mengambil detail tentang
error, seperti nama dan penyebab error. |
GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
steps.oauth.v2.InvalidAccessToken |
401 | Header otorisasi tidak memiliki kata "Bearer", yang diperlukan. Misalnya: Authorization: Bearer your_access_token |
VerifyAccessToken |
steps.oauth.v2.InvalidAPICallAsNoApiProductMatchFound |
401 |
Proxy API tidak ada dalam Produk yang terkait dengan token akses. Tips: Pastikan produk yang terkait dengan token akses dikonfigurasi dengan benar. Misalnya, jika Anda menggunakan karakter pengganti di jalur resource, pastikan karakter pengganti digunakan dengan benar. Lihat Membuat produk API untuk mengetahui detailnya. Lihat juga postingan Komunitas Apigee ini untuk mendapatkan panduan selengkapnya tentang penyebab error ini. |
VerifyAccessToken |
steps.oauth.v2.InvalidClientIdentifier |
500 |
Nama error ini ditampilkan saat properti |
GenerateAccessToken |
steps.oauth.v2.InvalidParameter |
500 | Kebijakan harus menentukan token akses atau kode otorisasi, tetapi tidak keduanya. | GenerateAuthorizationCode GenerateAccessTokenImplicitGrant |
steps.oauth.v2.InvalidTokenType |
500 | Elemen <Tokens>/<Token> mengharuskan Anda menentukan jenis token (misalnya, refreshtoken). Jika klien meneruskan jenis yang salah, error ini akan ditampilkan. |
ValidateToken InvalidateToken |
steps.oauth.v2.MissingParameter |
500 | Jenis respons adalah token, tetapi tidak ada jenis pemberian yang ditentukan. |
GenerateAuthorizationCode GenerateAccessTokenImplicitGrant |
steps.oauth.v2.UnSupportedGrantType |
500 |
Klien menentukan jenis pemberian yang tidak didukung oleh kebijakan (tidak tercantum dalam elemen <SupportedGrantTypes>). Catatan: Saat ini ada bug saat error jenis pemberian yang tidak didukung tidak ditampilkan dengan benar. Jika terjadi error jenis pemberian yang tidak didukung, proxy tidak memasuki Alur Error, seperti yang diharapkan. |
GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
Error saat deployment
Error ini dapat terjadi saat Anda men-deploy proxy yang berisi kebijakan ini.
| Nama error | Penyebab |
|---|---|
InvalidValueForExpiresIn |
Untuk elemen |
InvalidValueForRefreshTokenExpiresIn |
Untuk elemen <RefreshTokenExpiresIn>, nilai yang valid adalah bilangan bulat positif dan -1. |
InvalidGrantType |
Jenis pemberian yang tidak valid ditentukan di elemen <SupportedGrantTypes>. Lihat referensi kebijakan untuk mengetahui daftar jenis yang valid. |
ExpiresInNotApplicableForOperation |
Pastikan operasi yang ditentukan dalam elemen <Operations> mendukung masa berlaku. Misalnya, operasi VerifyToken tidak melakukannya. |
RefreshTokenExpiresInNotApplicableForOperation |
Pastikan operasi yang ditentukan dalam elemen <Operations> mendukung masa berlaku token refresh. Misalnya, operasi VerifyToken tidak melakukannya. |
GrantTypesNotApplicableForOperation |
Pastikan jenis pemberian yang ditentukan dalam <SupportedGrantTypes> didukung untuk operasi yang ditentukan. |
OperationRequired |
Anda harus menentukan operasi dalam kebijakan ini menggunakan elemen Catatan: Jika elemen |
InvalidOperation |
Anda harus menentukan operasi yang valid dalam kebijakan ini menggunakan elemen Catatan: Jika elemen |
TokenValueRequired |
Anda harus menentukan nilai <Token> token dalam elemen <Tokens>. |
Variabel error
Variabel ini ditetapkan saat kebijakan ini memicu error saat runtime.
<GenerateResponse> ditetapkan ke
false. Jika <GenerateResponse> adalah
true, kebijakan akan segera menampilkan respons kepada klien jika terjadi error --
alur error akan dilewati dan variabel ini tidak diisi. Untuk mengetahui informasi selengkapnya, lihat
Yang perlu Anda
ketahui tentang error kebijakan.| Variabel | Di mana | Contoh |
|---|---|---|
fault.name="fault_name" |
fault_name adalah nama error, seperti yang tercantum dalam tabel Runtime errors di atas. Nama error adalah bagian terakhir dari kode error. | fault.name = "InvalidRequest" |
oauthV2.policy_name.failed |
policy_name adalah nama kebijakan yang ditentukan pengguna yang menampilkan error. | oauthV2.GenerateAccesstoken.failed = true |
oauthV2.policy_name.fault.name |
policy_name adalah nama kebijakan yang ditentukan pengguna yang menampilkan error. | oauthV2.GenerateAccesstoken.fault.name = InvalidRequest
Catatan: Untuk operasi VerifyAccessToken, nama error menyertakan akhiran ini: |
oauthV2.policy_name.fault.cause |
policy_name adalah nama kebijakan yang ditentukan pengguna yang menampilkan error. | oauthV2.GenerateAccesstoken.cause = Required param : grant_type |
Contoh respons error
Respons ini dikirim kembali ke klien jika elemen <GenerateResponse>
bernilai true.
errorcode dari respons error. Jangan mengandalkan teks di
faultstring, karena teks tersebut dapat berubah.Jika <GenerateResponse> true, kebijakan akan menampilkan error
dalam format ini untuk operasi yang menghasilkan token dan kode. Untuk mengetahui daftar lengkapnya, lihat
Referensi respons error
HTTP OAuth.
{"ErrorCode" : "invalid_client", "Error" :"ClientId is Invalid"}Jika <GenerateResponse> bernilai true, kebijakan akan menampilkan error dalam format ini untuk operasi verifikasi dan validasi. Untuk mengetahui daftar lengkapnya, lihat referensi respons error HTTP OAuth.
{ { "fault":{ "faultstring":"Invalid Access Token", "detail":{ "errorcode":"keymanagement.service.invalid_access_token" } } }
Contoh aturan error
<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>Skema kebijakan
Setiap jenis kebijakan ditentukan oleh skema XML (.xsd). Sebagai referensi, skema
kebijakan tersedia di GitHub.
Menangani konfigurasi OAuth default
Setiap organisasi (bahkan organisasi uji coba gratis) di Apigee Edge disediakan dengan endpoint token OAuth. Endpoint telah dikonfigurasi sebelumnya dengan kebijakan di proxy API yang disebut oauth. Anda dapat mulai menggunakan endpoint token segera setelah membuat akun di Apigee Edge. Untuk mengetahui detailnya, lihat Memahami endpoint OAuth.
Menghapus token akses
Secara default, token OAuth2 dihapus dari sistem Apigee Edge 3 hari (259200 detik) setelah token akses dan token refresh (jika ada) telah habis masa berlakunya. Dalam beberapa kasus, Anda mungkin ingin mengubah setelan default ini. Misalnya, Anda dapat mempersingkat waktu penghapusan untuk menghemat ruang disk jika sejumlah besar token sedang dibuat.
Jika menggunakan Edge untuk Private Cloud, Anda dapat mengubah default ini dengan menetapkan properti organisasi seperti yang dijelaskan di bagian ini. (Penghapusan token yang sudah tidak berlaku selama 3 hari berlaku untuk Edge for Private Cloud versi 4.19.01 dan yang lebih baru. Untuk versi sebelumnya, interval penghapusan default adalah 180 hari.)
Memperbarui setelan penghapusan untuk Edge Private Cloud 4.16.01 dan versi yang lebih baru
Catatan: Hanya token yang dibuat setelah setelan ini diterapkan yang terpengaruh; setelan ini tidak berlaku untuk token yang dibuat sebelumnya.
- Buka file ini untuk mengedit:
/opt/apigee/customer/application/message-processor.properties
- Tambahkan properti berikut untuk menetapkan jumlah detik yang harus ditunggu sebelum menghapus token
setelah masa berlakunya habis:
conf_keymanagement_oauth.access.token.purge.after.seconds=<number of seconds>
- Mulai ulang pemroses pesan. Contoh:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
<ExpiresIn> dan
<RefreshTokenExpiresIn>.
Memperbarui setelan penghapusan untuk Edge Private Cloud 4.15.07
Catatan: Hanya token yang dibuat setelah setelan ini diterapkan yang terpengaruh; setelan ini tidak berlaku untuk token yang dibuat sebelumnya.
-
Tetapkan nilai positif untuk atribut
<ExpiresIn>dan<RefreshTokenExpiresIn>dalam kebijakan OAuthV2. Nilai dalam milidetik. Contoh:<ExpiresIn>1000</ExpiresIn> <RefreshTokenExpiresIn>10000</RefreshTokenExpiresIn>
-
Deploy ulang proxy.
-
Gunakan API ini untuk memperbarui properti penghapusan token untuk organisasi Anda:
POST https://<host-name>/v1/organizations/<org-name>
Payload:
<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> -
Mulai ulang pemroses pesan. Contoh:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
API ini menetapkan properti penghapusan token ke benar (true) untuk organisasi yang disebut AutomationOrganization. Dalam hal ini, token akses akan dihapus dari database 120 detik setelah masa berlaku token dan token refresh berakhir.
Perilaku yang tidak sesuai dengan RFC
Kebijakan OAuthV2 menampilkan respons token yang berisi properti non-RFC yang sesuai. Tabel berikut menunjukkan properti yang tidak mematuhi kebijakan yang ditampilkan oleh kebijakan OAuthV2 dan properti yang sesuai.
| OAuthV2 menampilkan: | Properti yang sesuai dengan RFC adalah: |
|---|---|
"token_type":"BearerToken" |
"token_type":"Bearer"
|
"expires_in":"3600" |
"expires_in":3600
(Nilai yang sesuai adalah angka, bukan string.) |
Selain itu, respons error untuk token refresh yang sudah tidak berlaku jika grant_type = refresh_token adalah:
{"ErrorCode" : "InvalidRequest", "Error" :"Refresh Token expired"}Namun, respons yang sesuai dengan RFC adalah:
{"error" : "invalid_grant", "error_description" :"refresh token expired"}