Mendapatkan token OAuth 2.0

Halaman ini berlaku untuk Apigee dan Apigee hybrid.

Lihat Dokumentasi Apigee Edge.

Dokumen ini menunjukkan cara mendapatkan token akses dan kode otorisasi OAuth 2.0 dengan Apigee API. Kami juga menunjukkan cara membuat kebijakan untuk setiap jenis pemberian izin OAuth 2.0 dan mengonfigurasi endpoint proxy untuk menerima permintaan klien.

Gunakan jenis pemberian kode otorisasi

Bagian ini menjelaskan cara mendapatkan token akses menggunakan jenis pemberian kode otorisasi alur kerja. Permintaan token untuk alur ini memerlukan kode otorisasi. Lihat Mendapatkan kode otorisasi. Lihat juga Apa yang dimaksud dengan jenis pemberian izin OAuth 2.0.

Contoh meminta

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' 

Wajib diisi parameter

Secara default, parameter ini harus bernilai x-www-form-urlencoded dan ditentukan di bagian isi permintaan (seperti yang ditunjukkan dalam contoh di atas); Namun, Anda dapat mengubah setelan default ini mengonfigurasi <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 parameter redirect_uri tidak disertakan dalam permintaan kode otorisasi, dan jika Anda tidak menyediakan parameter ini, kebijakan ini akan menggunakan nilai URL Callback yang disediakan di aplikasi developer terdaftar.

Opsional parameter

  • 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 digunakan yang dibuat token dapat digunakan. Untuk informasi mendetail tentang cakupan, lihat Bekerja dengan cakupan OAuth2.

Otorisasi

Anda harus meneruskan Client-ID dan Rahasia Klien sebagai header Otorisasi Dasar (Berenkode Base64) atau sebagai parameter formulir client_id dan client_secret. Anda mendapatkan nilai ini dari aplikasi developer yang terdaftar. Lihat juga Dasar encoding kredensial autentikasi.

Contoh endpoint

Berikut adalah contoh konfigurasi endpoint untuk membuat token akses. Fungsi ini akan menjalankan Kebijakan GenerateAccessToken, yang harus dikonfigurasi untuk mendukung pemberian otorisasi_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 authorization_code jenis pemberian. Untuk informasi tentang elemen konfigurasi opsional yang dapat Anda konfigurasi 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>

Pengembalian

Dengan mengaktifkan <GenerateResponse>, kebijakan akan menampilkan respons JSON yang menyertakan token akses, seperti yang ditunjukkan di bawah ini. 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 yang dihasilkan. Sebaliknya, ia mengisi rangkaian variabel aliran 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 klien jenis pemberian kredensial

Bagian ini menjelaskan cara mendapatkan token akses menggunakan jenis pemberian kredensial klien alur kerja. Lihat juga Apa yang dimaksud dengan jenis pemberian izin OAuth 2.0.

Contoh meminta

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"

Wajib diisi parameter

  • grant_type - Harus ditetapkan ke nilai client_credentials.

    Secara default, parameter grant_type yang diperlukan harus x-www-form-urlencoded dan ditentukan dalam isi permintaan (seperti yang ditunjukkan dalam contoh di atas); Namun, ada kemungkinan untuk mengubah setelan default ini dengan mengonfigurasi elemen <GrantType> dalam kebijakan OAuthV2. Misalnya, Anda dapat memilih untuk meneruskan dalam parameter kueri. Untuk mengetahui detailnya, lihat kebijakan OAuthV2.

Opsional parameter

  • 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 digunakan yang dibuat token dapat digunakan. Untuk informasi mendetail tentang cakupan, lihat Bekerja dengan cakupan OAuth2.

Otorisasi

Anda harus meneruskan Client-ID dan Rahasia Klien sebagai header Otorisasi Dasar (Berenkode Base64) atau sebagai parameter formulir client_id dan client_secret. Anda mendapatkan nilai ini dari aplikasi developer yang terdaftar yang terkait dengan permintaan. Lihat juga Mengenkode autentikasi dasar kredensial.

Contoh endpoint

Berikut adalah contoh konfigurasi endpoint untuk membuat token akses. Fungsi ini akan menjalankan Kebijakan GenerateAccessToken, yang harus dikonfigurasi untuk mendukung 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 client_credentials jenis pemberian. Untuk informasi tentang elemen konfigurasi opsional yang dapat Anda konfigurasi 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>

Pengembalian

Dengan mengaktifkan <GenerateResponse>, kebijakan akan menampilkan respons JSON. Catatan bahwa dengan jenis pemberian client_credentials, token refresh tidak didukung. Hanya token akses dicetak. 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 yang dihasilkan. Sebaliknya, ia mengisi rangkaian variabel aliran 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 sandi

Bagian ini menjelaskan cara mendapatkan token akses menggunakan sandi pemilik resource aliran jenis pemberian kredensial ({i>password<i}). Lihat juga Menerapkan sandi jenis pemberian izin. Lihat juga Apa yang dimaksud dengan jenis pemberian izin OAuth 2.0.

Contoh meminta

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"

Wajib diisi parameter

Secara default, parameter ini harus bernilai x-www-form-urlencoded dan ditentukan di bagian isi permintaan (seperti yang ditunjukkan dalam contoh di atas); Namun, Anda dapat mengubah setelan default ini mengonfigurasi <GrantType>, <Username>, dan <Password> dalam kebijakan OAuthV2. Lihat kebijakan OAuthV2.

Kredensial pengguna biasanya divalidasi terhadap penyimpanan kredensial menggunakan LDAP atau kebijakan JavaScript.

  • grant_type - Harus ditetapkan ke nilai password.
  • nama pengguna - Nama pengguna pemilik resource.
  • password - Sandi pemilik resource.

Opsional parameter

  • 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 digunakan yang dibuat token dapat digunakan. Untuk informasi mendetail tentang cakupan, lihat Bekerja dengan cakupan OAuth2.

Otorisasi

Anda harus meneruskan Client-ID dan Rahasia Klien sebagai header Otorisasi Dasar (Berenkode Base64) atau sebagai parameter formulir client_id dan client_secret. Anda mendapatkan nilai ini dari aplikasi developer yang terdaftar yang terkait dengan permintaan. Lihat juga Mengenkode autentikasi dasar kredensial.

Contoh endpoint

Berikut adalah contoh konfigurasi endpoint untuk membuat token akses. Fungsi ini akan menjalankan 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 pemberian sandi . Untuk informasi tentang elemen konfigurasi opsional yang dapat Anda konfigurasi 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>

Pengembalian

Dengan mengaktifkan <GenerateResponse>, kebijakan akan menampilkan respons JSON. Catatan dengan tipe pemberian {i>password<i}, kedua token akses dan token pembaruan akan dicetak. 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 yang dihasilkan. Sebaliknya, ia mengisi rangkaian variabel aliran 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 pemberian implisit (jenis

Bagian ini menjelaskan cara mendapatkan token akses menggunakan alur jenis pemberian implisit. Lihat juga Apa yang dimaksud dengan jenis pemberian izin OAuth 2.0.

Contoh meminta

$ 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'

Wajib diisi parameter

Secara default, parameter ini harus berupa parameter kueri (seperti yang ditunjukkan pada contoh di atas); namun, Anda dapat mengubah setelan default ini dengan mengonfigurasi <ResponseType>, Elemen <ClientId>, dan <RedirectUri> di OAuthV2 kebijakan yang dilampirkan ke endpoint /token ini. Untuk mengetahui detailnya, lihat kebijakan OAuthV2.

Kredensial pengguna biasanya divalidasi terhadap penyimpanan kredensial menggunakan layanan LDAP kebijakan JavaScript atau info tertentu.

  • response_type - Harus ditetapkan ke nilai token.
  • client_id - ID klien aplikasi developer terdaftar.
  • redirect_uri - Parameter ini wajib jika URI Callback tidak yang diberikan saat aplikasi developer klien didaftarkan. Jika URL Panggilan Balik diberikan di klien pendaftaran, data akan dibandingkan dengan nilai ini dan harus sama persis.

Opsional parameter

  • 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 digunakan yang dibuat token dapat digunakan. Untuk informasi mendetail tentang cakupan, lihat Bekerja dengan 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. Fungsi ini akan menjalankan 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 aliran jenis pemberian izin implisit. Untuk informasi tentang elemen konfigurasi opsional yang bisa Anda mengonfigurasi 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>

Pengembalian

Jika <GenerateResponse> diaktifkan, kebijakan akan menampilkan Pengalihan lokasi 302 di header respons. Pengalihan mengarah ke URL yang ditentukan dalam redirect_uri dan ditambahkan dengan token akses dan waktu habis masa berlaku token. Perhatikan bahwa perintah jenis pemberian izin 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 yang dihasilkan. Sebaliknya, ia mengisi rangkaian variabel aliran 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 yang dimaksud dengan jenis pemberian izin 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"

Wajib diisi parameter

Secara default, parameter ini harus berupa parameter kueri (seperti yang ditunjukkan pada contoh di atas); namun, Anda dapat mengubah setelan default ini dengan mengonfigurasi <ResponseType>, Elemen <ClientId>, dan <RedirectUri> di OAuthV2 lebih lanjut. Untuk mengetahui detailnya, lihat kebijakan OAuthV2.

  • redirect_uri - Jika URI Callback penuh (bukan sebagian) ditentukan dalam aplikasi klien yang terdaftar, parameter ini bersifat opsional; jika tidak, maka diperlukan. Callback adalah URL tempat Apigee mengirimkan kode autentikasi yang baru dibuat. Lihat juga Mendaftarkan aplikasi dan mengelola API .
  • response_type - Harus ditetapkan ke nilai code.
  • client_id - ID klien aplikasi developer terdaftar.

Opsional parameter

  • redirect_uri - Jika URI Callback penuh (bukan sebagian) ditentukan dalam aplikasi klien yang terdaftar, parameter ini bersifat opsional; jika tidak, maka diperlukan. Callback adalah URL tempat Apigee mengirimkan kode autentikasi yang baru dibuat. Lihat juga Mendaftarkan aplikasi dan mengelola 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 digunakan yang dibuat token dapat digunakan. Untuk informasi mendetail tentang cakupan, lihat Bekerja dengan cakupan OAuth2.

Otorisasi

Tidak memerlukan header Otorisasi, tetapi client ID dari aplikasi klien yang terdaftar harus disediakan dalam permintaan.

Contoh kebijakan

Ini adalah kebijakan GenerateAuthorizationCode dasar. Untuk opsi konfigurasi lainnya, lihat kebijakan OAuthV2:

<OAuthV2 name="GenerateAuthorizationCode">
    <Operation>GenerateAuthorizationCode</Operation>
    <GenerateResponse enabled="true"/>
</OAuthV2>

Pengembalian

Jika <GenerateResponse> diaktifkan, kebijakan akan menampilkan ?code parameter kueri ke lokasi redirect_uri (URI Callback) dengan otorisasi kode terlampir. Ini dikirim melalui pengalihan browser 302 dengan URL di header Location pada yang dihasilkan. Contoh: ?code=123456.

Jika <GenerateResponse> disetel ke false, kebijakan tidak akan membalas respons. Sebaliknya, ia mengisi rangkaian variabel {i>flow<i} berikut dengan data yang berkaitan di 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 akses masa berlaku token telah habis atau menjadi tidak valid. Token refresh ditampilkan sebagai respons ketika Anda menerima token akses.

Contoh permintaan

Untuk informasi tentang pengkodean 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 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 <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 memperpanjang.

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 digunakan yang dibuat token dapat digunakan. Untuk informasi mendetail tentang cakupan, lihat Bekerja dengan cakupan OAuth2.

Otorisasi

Tidak memerlukan header Otorisasi, tetapi client ID dari aplikasi klien yang terdaftar harus disediakan dalam permintaan.

Saat memuat ulang token akses, tidak ada autentikasi ulang pengguna.

Berikut 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 refresh_token jenis pemberian. Untuk informasi tentang elemen konfigurasi opsional yang yang dapat Anda konfigurasi 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>

Pengembalian

Dengan mengaktifkan <GenerateResponse>, kebijakan akan menampilkan respons JSON yang berisi token akses baru. Jenis pemberian refresh_token mendukung pencetakan 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 aslinya tidak lagi valid.

Respons di atas adalah yang Anda dapatkan jika <GenerateResponse> ditetapkan ke true. Jika <GenerateResponse> disetel ke salah (false), kebijakan tidak akan menampilkan respons. Sebaliknya, ia 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

Encoding kredensial autentikasi dasar

Saat Anda melakukan panggilan API untuk meminta token atau kode otentikasi, ini adalah praktik yang baik, dan direkomendasikan oleh spesifikasi OAuth 2.0 untuk meneruskan nilai client_id dan client_secret sebagai header Otorisasi Dasar HTTP, seperti yang dijelaskan di IETF RFC 2617. Untuk melakukannya, Anda harus melakukan enkode base64 pada hasil penggabungan dua nilai bersama dengan tanda titik dua yang memisahkannya.

Dalam kode semu:

result = Base64Encode(concat('ns4fQc14Zg4hKFCNaSzArVuwszX95X', ':', 'ZIjFyTsNgQNyxI'))

Dalam hal ini: 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"

Token hashing dalam database

Apigee melakukan hashing pada semua akses OAuth dan token refresh untuk melindunginya saat terjadi database pelanggaran keamanan. Anda menggunakan token yang tidak di-hash dalam panggilan API, dan Apigee memvalidasinya terhadap versi yang di-hash dalam {i>database<i}.

Topik terkait