Halaman ini berlaku untuk Apigee dan Apigee hybrid.
Lihat dokumentasi Apigee Edge.
Dokumen ini menunjukkan cara mendapatkan token akses OAuth 2.0 dan kode otorisasi dengan Apigee API. Kami juga menunjukkan cara membuat kebijakan untuk setiap jenis pemberian OAuth 2.0 dan mengonfigurasi endpoint proxy untuk menerima permintaan klien.
Menggunakan jenis pemberian kode otorisasi
Bagian ini menjelaskan cara mendapatkan token akses menggunakan alur jenis pemberian kode otorisasi. Permintaan token untuk alur ini memerlukan kode otorisasi. Lihat Mendapatkan kode otorisasi. Lihat juga Apa saja jenis pemberian OAuth 2.0.
Contoh permintaan
curl -i -H 'Content-Type: application/x-www-form-urlencoded' \ -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \ -X POST 'https://apitest.acme.com/oauth/token' \ -d 'code=I9dMGHAN&grant_type=authorization_code&redirect_uri=http://example-callback.com'
Parameter wajib
Secara default, parameter ini harus berupa x-www-form-urlencoded
dan ditentukan dalam
isi permintaan (seperti yang ditunjukkan dalam contoh di atas); namun, Anda dapat mengubah default ini dengan
mengonfigurasi elemen <GrantType>
, <Code>
, dan
<RedirectUri>
dalam kebijakan OAuthV2. Lihat kebijakan OAuthV2.
- grant_type - Harus ditetapkan ke nilai
authorization_code
. - code - Kode otorisasi. Lihat Meminta kode otorisasi.
- redirect_uri - Anda harus memberikan parameter ini jika
parameter
redirect_uri
disertakan dalam permintaan kode otorisasi. Jika parameterredirect_uri
tidak disertakan dalam permintaan kode otorisasi, dan jika Anda tidak memberikan parameter ini, kebijakan ini akan menggunakan nilai URL Callback yang diberikan di aplikasi developer terdaftar.
Parameter opsional
- state - String yang akan dikirim kembali dengan respons. Biasanya digunakan untuk mencegah serangan pemalsuan permintaan lintas situs.
- scope - Memungkinkan Anda memfilter daftar produk API yang dapat digunakan untuk token yang dibuat. Untuk informasi mendetail tentang cakupan, lihat Menggunakan cakupan OAuth2.
Otorisasi
Anda harus meneruskan Client ID dan Client Secret sebagai header Otorisasi Dasar
(dienkode Base64) atau sebagai parameter formulir client_id
dan client_secret
. Anda
mendapatkan nilai ini dari aplikasi developer terdaftar. Lihat juga Mengenkode kredensial autentikasi
dasar.
Contoh endpoint
Berikut adalah contoh konfigurasi endpoint untuk membuat token akses. Tindakan ini akan mengeksekusi kebijakan GenerateAccessToken, yang harus dikonfigurasi untuk mendukung jenis pemberian authorization_code.
... <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> ...
Contoh kebijakan
Ini adalah kebijakan GenerateAccessToken dasar yang dikonfigurasi untuk menerima
jenis pemberian authorization_code
. Untuk informasi tentang elemen konfigurasi opsional
yang dapat Anda konfigurasikan dengan kebijakan ini, lihat kebijakan OAuthV2.
<OAuthV2 name="GenerateAccessToken"> <Operation>GenerateAccessToken</Operation> <ExpiresIn>1800000</ExpiresIn> <RefreshTokenExpiresIn>86400000</RefreshTokenExpiresIn> <SupportedGrantTypes> <GrantType>authorization_code</GrantType> </SupportedGrantTypes> <GenerateResponse enabled="true"/> </OAuthV2>
Hasil
Dengan mengaktifkan <GenerateResponse>
, kebijakan akan menampilkan respons JSON yang
menyertakan token akses, seperti yang ditunjukkan di bawah. Jenis pemberian authorization_code
membuat
token akses dan token refresh, sehingga responsnya mungkin terlihat seperti ini:
{ "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" }
Jika <GenerateResponse>
disetel ke salah (false), kebijakan tidak akan menampilkan respons. Sebagai gantinya, kode ini mengisi kumpulan variabel alur berikut dengan data yang berkaitan dengan
pemberian token akses.
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
Contoh:
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
Menggunakan jenis pemberian kredensial klien
Bagian ini menjelaskan cara mendapatkan token akses menggunakan alur jenis pemberian kredensial klien. Lihat juga Apa saja jenis pemberian OAuth 2.0.
Contoh permintaan
curl -H "Content-Type: application/x-www-form-urlencoded" \ -H "Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ" \ -X POST "https://apitest.acme.com/oauth/token" \ -d "grant_type=client_credentials"
Parameter wajib
- grant_type - Harus ditetapkan ke nilai
client_credentials
.Secara default, parameter
grant_type
yang diperlukan harus berupax-www-form-urlencoded
dan ditentukan dalam isi permintaan (seperti yang ditunjukkan dalam contoh di atas); namun, Anda dapat mengubah setelan default ini dengan mengonfigurasi elemen<GrantType>
dalam kebijakan OAuthV2. Misalnya, Anda dapat memilih untuk meneruskan parameter dalam parameter kueri. Untuk mengetahui detailnya, lihat kebijakan OAuthV2.
Parameter opsional
- state - String yang akan dikirim kembali dengan respons. Biasanya digunakan untuk mencegah serangan pemalsuan permintaan lintas situs.
- scope - Memungkinkan Anda memfilter daftar produk API yang dapat digunakan untuk token yang dibuat. Untuk informasi mendetail tentang cakupan, lihat Menggunakan cakupan OAuth2.
Otorisasi
Anda harus meneruskan Client ID dan Client Secret sebagai header Otorisasi Dasar
(dienkode Base64) atau sebagai parameter formulir client_id
dan
client_secret
. Anda mendapatkan nilai ini dari aplikasi developer terdaftar
yang terkait dengan permintaan. Lihat juga Mengenkode kredensial autentikasi dasar.
Contoh endpoint
Berikut adalah contoh konfigurasi endpoint untuk membuat token akses. Tindakan ini akan mengeksekusi kebijakan GenerateAccessToken, yang harus dikonfigurasi untuk mendukung jenis pemberian client_credentials.
... <Flow name="generate-access-token"> <Request> <Step> <Name>GenerateAccessToken</Name> </Step> </Request> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition> </Flow> ...
Contoh kebijakan
Ini adalah kebijakan GenerateAccessToken dasar yang dikonfigurasi untuk menerima
jenis pemberian client_credentials
. Untuk informasi tentang elemen konfigurasi opsional
yang dapat Anda konfigurasikan dengan kebijakan ini, lihat kebijakan OAuthV2.
<OAuthV2 name="GenerateAccessToken"> <Operation>GenerateAccessToken</Operation> <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes --> <SupportedGrantTypes> <GrantType>client_credentials</GrantType> </SupportedGrantTypes> <GenerateResponse enabled="true"/> </OAuthV2>
Hasil
Dengan mengaktifkan <GenerateResponse>
, kebijakan akan menampilkan respons JSON. Perhatikan bahwa dengan jenis pemberian client_credentials
, token refresh tidak didukung. Hanya
token akses yang dibuat. Contoh:
{ "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" }
Jika <GenerateResponse>
disetel ke salah (false), kebijakan tidak akan menampilkan respons. Sebagai gantinya, kode ini mengisi kumpulan variabel alur berikut dengan data yang berkaitan dengan
pemberian token akses.
oauthv2accesstoken.{policy-name}.access_token oauthv2accesstoken.{policy-name}.expires_in //--in seconds
Contoh:
oauthv2accesstoken.GenerateAccessToken.access_token oauthv2accesstoken.GenerateAccessToken.expires_in //--in seconds
Menggunakan jenis pemberian akses sandi
Bagian ini menjelaskan cara mendapatkan token akses menggunakan alur jenis pemberian kredensial sandi pemilik resource (sandi). Lihat juga Menerapkan jenis pemberian sandi. Lihat juga Apa saja jenis pemberian OAuth 2.0.
Contoh permintaan
curl -v -k -H "Content-Type: application/x-www-form-urlencoded" \ -H "Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ" \ -X POST "https://apitest.acme.com/oauth/token" \ -d "grant_type=password&username=a_username&password=a_password"
Parameter wajib
Secara default, parameter ini harus berupa x-www-form-urlencoded
dan ditentukan dalam
isi permintaan (seperti yang ditunjukkan dalam contoh di atas); namun, Anda dapat mengubah default ini dengan
mengonfigurasi elemen <GrantType>
, <Username>
, dan
<Password>
dalam kebijakan OAuthV2. Lihat kebijakan OAuthV2.
Kredensial pengguna biasanya divalidasi terhadap penyimpanan kredensial menggunakan kebijakan LDAP atau JavaScript.
- grant_type - Harus ditetapkan ke nilai
password
. - username - Nama pengguna pemilik resource.
- password - Sandi pemilik resource.
Parameter opsional
- state - String yang akan dikirim kembali dengan respons. Biasanya digunakan untuk mencegah serangan pemalsuan permintaan lintas situs.
- scope - Memungkinkan Anda memfilter daftar produk API yang dapat digunakan untuk token yang dibuat. Untuk informasi mendetail tentang cakupan, lihat Menggunakan cakupan OAuth2.
Otorisasi
Anda harus meneruskan Client ID dan Client Secret sebagai header Otorisasi Dasar
(dienkode Base64) atau sebagai parameter formulir client_id
dan
client_secret
. Anda mendapatkan nilai ini dari aplikasi developer terdaftar
yang terkait dengan permintaan. Lihat juga Mengenkode kredensial autentikasi dasar.
Contoh endpoint
Berikut adalah contoh konfigurasi endpoint untuk membuat token akses. Tindakan ini akan mengeksekusi kebijakan GenerateAccessToken, yang harus dikonfigurasi untuk mendukung jenis pemberian sandi.
... <Flow name="generate-access-token"> <Request> <Step> <Name>GenerateAccessToken</Name> </Step> </Request> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition> </Flow> ...
Contoh kebijakan
Ini adalah kebijakan GenerateAccessToken dasar yang dikonfigurasi untuk menerima jenis pemberian sandi. Untuk informasi tentang elemen konfigurasi opsional yang dapat Anda konfigurasikan dengan kebijakan ini, lihat kebijakan 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>
Hasil
Dengan mengaktifkan <GenerateResponse>
, kebijakan akan menampilkan respons JSON. Perhatikan bahwa dengan jenis pemberian sandi, token akses dan token refresh akan dibuat. Misalnya:
{ "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" }
Jika <GenerateResponse>
disetel ke salah (false), kebijakan tidak akan menampilkan respons. Sebagai gantinya, kode ini mengisi kumpulan variabel alur berikut dengan data yang berkaitan dengan
pemberian token akses.
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
Contoh:
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
Menggunakan jenis pemberian akses implisit
Bagian ini menjelaskan cara mendapatkan token akses menggunakan alur jenis pemberian implisit. Lihat juga Apa saja jenis pemberian OAuth 2.0.
Contoh permintaan
$ curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \ 'https://apitest.acme.com/oauth/implicit?response_type=token&client_id=c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ&redirect_uri=http://callback-example.com'
Parameter wajib
Secara default, parameter ini harus berupa parameter kueri (seperti yang ditunjukkan dalam contoh di atas); tetapi,
Anda dapat mengubah default ini dengan mengonfigurasi elemen <ResponseType>
,
<ClientId>
, dan <RedirectUri>
dalam kebijakan OAuthV2
yang dilampirkan ke endpoint /token
ini. Untuk mengetahui detailnya, lihat kebijakan OAuthV2.
Kredensial pengguna biasanya divalidasi terhadap penyimpanan kredensial menggunakan kebijakan JavaScript atau info layanan LDAP.
- response_type - Harus ditetapkan ke nilai
token
. - client_id - Client ID aplikasi developer terdaftar.
- redirect_uri - Parameter ini wajib diisi jika URI Callback tidak diberikan saat aplikasi developer klien didaftarkan. Jika URL Callback diberikan saat pendaftaran klien, URL tersebut akan dibandingkan dengan nilai ini dan harus sama persis.
Parameter opsional
- state - String yang akan dikirim kembali dengan respons. Biasanya digunakan untuk mencegah serangan pemalsuan permintaan lintas situs.
- scope - Memungkinkan Anda memfilter daftar produk API yang dapat digunakan untuk token yang dibuat. Untuk informasi mendetail tentang cakupan, lihat Menggunakan cakupan OAuth2.
Otorisasi
Tidak memerlukan header Otorisasi; namun, Anda harus meneruskan client ID sebagai parameter permintaan.
Contoh endpoint
Berikut adalah contoh konfigurasi endpoint untuk membuat token akses. Tindakan ini akan mengeksekusi kebijakan 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> ...
Contoh kebijakan
Ini adalah kebijakan GenerateAccessTokenImplicitGrant dasar yang memproses permintaan token untuk alur jenis pemberian implisit. Untuk informasi tentang elemen konfigurasi opsional yang dapat Anda konfigurasikan dengan kebijakan ini, lihat kebijakan OAuthV2.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <OAuthV2 name="GenerateAccessTokenImplicit"> <DisplayName>GenerateAccessTokenImplicit</DisplayName> <Operation>GenerateAccessTokenImplicitGrant</Operation> <GenerateResponse enabled="true"/> </OAuthV2>
Hasil
Dengan <GenerateResponse>
diaktifkan, kebijakan akan menampilkan pengalihan Lokasi 302
di header respons. Pengalihan mengarah ke URL yang ditentukan dalam parameter redirect_uri
dan ditambahkan dengan token akses dan waktu habis masa berlaku token. Perhatikan bahwa jenis pemberian izin implisit tidak mendukung token refresh. Contoh:
https://callback-example.com#expires_in=1799&access_token=In4dKm4ueoGZRbIYJhC9yZCmTFw5
Jika <GenerateResponse>
disetel ke salah (false), kebijakan tidak akan menampilkan respons. Sebagai gantinya, kode ini mengisi kumpulan variabel alur berikut dengan data yang berkaitan dengan
pemberian token akses.
oauthv2accesstoken.{policy-name}.access_token oauthv2accesstoken.{policy-name}.expires_in //--in seconds
Contoh:
oauthv2accesstoken.GenerateAccessToken.access_token oauthv2accesstoken.GenerateAccessToken.expires_in //--in seconds
Mendapatkan kode otorisasi
Dalam alur jenis pemberian kode otorisasi, kode otorisasi diperlukan untuk mendapatkan token akses. Lihat Menggunakan jenis pemberian kode otorisasi. Lihat juga Apa saja jenis pemberian OAuth 2.0.
Contoh permintaan
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" \ "https://apitest.acme.com/oauth/authorize?response_type=code&client_id=c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ&redirect_uri=http://my-callback.com"
Parameter wajib
Secara default, parameter ini harus berupa parameter kueri (seperti yang ditunjukkan dalam contoh di atas); tetapi,
Anda dapat mengubah default ini dengan mengonfigurasi elemen <ResponseType>
,
<ClientId>
, dan <RedirectUri>
dalam kebijakan
OAuthV2. Untuk mengetahui detailnya, lihat kebijakan OAuthV2.
- redirect_uri - Jika URI Callback lengkap (bukan sebagian) ditentukan di aplikasi klien terdaftar, parameter ini bersifat opsional; jika tidak, parameter ini wajib ada. Callback adalah URL tempat Apigee mengirim kode autentikasi yang baru dibuat. Lihat juga Mendaftarkan aplikasi dan mengelola kunci API.
- response_type - Harus ditetapkan ke nilai
code
. - client_id - Client ID aplikasi developer terdaftar.
Parameter opsional
- redirect_uri - Jika URI Callback lengkap (bukan sebagian) ditentukan di aplikasi klien terdaftar, parameter ini bersifat opsional; jika tidak, parameter ini wajib ada. Callback adalah URL tempat Apigee mengirim kode autentikasi yang baru dibuat. Lihat juga Mendaftarkan aplikasi dan mengelola kunci API.
- state - String yang akan dikirim kembali dengan respons. Biasanya digunakan untuk mencegah serangan pemalsuan permintaan lintas situs.
- scope - Memungkinkan Anda memfilter daftar produk API yang dapat digunakan untuk token yang dibuat. Untuk informasi mendetail tentang cakupan, lihat Menggunakan cakupan OAuth2.
Otorisasi
Tidak memerlukan header Otorisasi, tetapi client ID aplikasi klien terdaftar harus diberikan dalam permintaan.
Contoh kebijakan
Ini adalah kebijakan GenerateAuthorizationCode dasar. Untuk opsi konfigurasi selengkapnya, lihat kebijakan OAuthV2:
<OAuthV2 name="GenerateAuthorizationCode"> <Operation>GenerateAuthorizationCode</Operation> <GenerateResponse enabled="true"/> </OAuthV2>
Hasil
Dengan <GenerateResponse>
diaktifkan, kebijakan akan menampilkan parameter kueri ?code
ke lokasi redirect_uri
(URI Callback) dengan kode otorisasi yang dilampirkan. Respons ini dikirim melalui pengalihan browser 302 dengan URL di header Lokasi respons. Misalnya: ?code=123456
.
Jika <GenerateResponse>
ditetapkan ke false
, kebijakan tidak akan menampilkan respons. Sebagai gantinya, kode ini mengisi kumpulan variabel alur berikut dengan data yang berkaitan dengan kode otorisasi.
oauthv2authcode.{policy-name}.code oauthv2authcode.{policy-name}.scope oauthv2authcode.{policy-name}.redirect_uri oauthv2authcode.{policy-name}.client_id
Contoh:
oauthv2authcode.GenerateAuthorizationCode.code oauthv2authcode.GenerateAuthorizationCode.scope oauthv2authcode.GenerateAuthorizationCode.redirect_uri oauthv2authcode.GenerateAuthorizationCode.client_id
Memperbarui token akses
Token refresh adalah kredensial yang Anda gunakan untuk mendapatkan token akses, biasanya setelah masa berlaku token akses habis atau menjadi tidak valid. Token refresh ditampilkan dalam respons saat Anda menerima token akses.
Contoh permintaan
Untuk mengetahui informasi tentang mengenkode header autentikasi dasar dalam panggilan berikut, lihat Mengenkode kredensial autentikasi dasar.
$ curl -X POST \ -H "Content-type: application/x-www-form-urlencoded" \ -H "Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ" \ https://apitest.acme.com/oauth/refresh \ -d "grant_type=refresh_token&refresh_token=yVSL38WpuN3Kzn1UTMoE6AQ4ANZM"
Parameter yang diperlukan
Secara default, kebijakan ini akan mencarinya sebagai parameter x-www-form-urlencoded
yang ditentukan dalam isi permintaan, seperti yang ditunjukkan dalam contoh di atas. Untuk mengonfigurasi lokasi alternatif
untuk input ini, Anda dapat menggunakan elemen <GrantType>
dan
<RefreshToken>
dalam kebijakan OAuthV2. Untuk mengetahui detailnya, lihat kebijakan OAuthV2.
- grant_type - Harus ditetapkan ke nilai
refresh_token
. - refresh_token - Token refresh yang terkait dengan token akses yang ingin Anda perbarui.
Parameter opsional
- state - String yang akan dikirim kembali dengan respons. Biasanya digunakan untuk mencegah serangan pemalsuan permintaan lintas situs.
- scope - Memungkinkan Anda memfilter daftar produk API yang dapat digunakan untuk token yang dibuat. Untuk informasi mendetail tentang cakupan, lihat Menggunakan cakupan OAuth2.
Otorisasi
Tidak memerlukan header Otorisasi, tetapi client ID aplikasi klien terdaftar harus diberikan dalam permintaan.
Saat memuat ulang token akses, tidak ada autentikasi ulang pengguna.
Berikut adalah contoh konfigurasi endpoint untuk membuat token akses menggunakan token refresh. Tindakan ini akan mengeksekusi kebijakan 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> ...
Contoh kebijakan
Ini adalah kebijakan RefreshAccessToken dasar yang dikonfigurasi untuk menerima
jenis pemberian refresh_token
. Untuk informasi tentang elemen konfigurasi opsional yang
dapat Anda konfigurasikan dengan kebijakan ini, lihat kebijakan 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>
Hasil
Dengan mengaktifkan <GenerateResponse>
, kebijakan akan menampilkan respons JSON yang berisi token akses baru. Jenis pemberian refresh_token
mendukung pembuatan token akses dan token refresh baru. Contoh:
{ "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" }
Anda harus mengetahui bahwa setelah token refresh baru dibuat, token asli tidak lagi valid.
Respons di atas adalah yang Anda dapatkan jika <GenerateResponse>
ditetapkan ke benar.
Jika <GenerateResponse>
disetel ke salah (false), kebijakan tidak akan menampilkan respons.
Sebagai gantinya, tindakan ini akan mengisi kumpulan variabel konteks (alur) berikut dengan data yang berkaitan dengan
pemberian token akses.
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
Contoh:
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
Mengenkode kredensial autentikasi dasar
Saat Anda melakukan panggilan API untuk meminta token atau kode autentikasi, sebaiknya teruskan nilai client_id dan client_secret sebagai header Otorisasi Dasar HTTP, seperti yang dijelaskan dalam IETF RFC 2617. Untuk melakukannya, Anda harus mengenkode hasil penggabungan dua nilai dengan titik dua yang memisahkannya.
Dalam kode semu:
result = Base64Encode(concat('ns4fQc14Zg4hKFCNaSzArVuwszX95X', ':', 'ZIjFyTsNgQNyxI'))
Dengan: ns4fQc14Zg4hKFCNaSzArVuwszX95X
adalah client_id dan
ZIjFyTsNgQNyxI
adalah rahasia klien.
Contoh
Contoh perintah ini berfungsi di Linux dan MacOS:
export CREDENTIALS=$(echo -n 'ns4fQc14Zg4hKFCNaSzArVuwszX95X:ZIjFyTsNgQNyxI' | base64)
Kemudian, Anda dapat membuat permintaan token sebagai berikut:
$ curl -i -H "Content-Type: application/x-www-form-urlencoded" \ -H "Authorization: Basic $CREDENTIALS" \ -X POST "https://apitest.acme.com/oauth/token" \ -d "grant_type=client_credentials"
Membuat token hashing dalam database
Apigee melakukan hashing pada semua token akses dan refresh OAuth untuk melindunginya jika terjadi pelanggaran keamanan database. Anda menggunakan token yang tidak di-hash dalam panggilan API, dan Apigee memvalidasinya dengan versi yang di-hash dalam database.
Topik terkait
- Menerapkan jenis pemberian kredensial klien
- Menerapkan jenis pemberian kode otorisasi
- Kursus online keamanan API (termasuk OAuth)
- Kebijakan OAuthV2 -- Memiliki banyak contoh yang menunjukkan cara membuat permintaan ke server otorisasi dan cara mengonfigurasi kebijakan OAuthV2.