Mengamankan API dengan OAuth

Anda sedang melihat dokumentasi Apigee Edge.
Buka Dokumentasi Apigee X.
info

Yang akan Anda pelajari

  • Download dan deploy proxy API contoh.
  • Buat proxy API yang dilindungi OAuth.
  • Membuat produk, developer, dan aplikasi.
  • Tukar kredensial dengan token akses OAuth.
  • Memanggil API dengan token akses.

Tutorial ini menampilkan cara mengamankan API dengan OAuth 2.0.

OAuth adalah protokol otorisasi yang memungkinkan aplikasi untuk mengakses informasi atas nama pengguna tanpa mengharuskan pengguna untuk membocorkan nama pengguna dan {i>password<i} mereka.

Dengan OAuth, kredensial keamanan (seperti nama pengguna/sandi atau kunci/rahasia) akan ditukarkan untuk token akses. Contoh:

joe:joes_password (username:password) atau
Nf2moHOASMJeUmXVdDhlMbPaXm2U7eMc:unUOXYpPe74ZfLEb (kunci:rahasia)

menjadi seperti:

b0uiYwjRZLEo4lEu7ky2GGxHkanN

Token akses adalah string karakter acak dan bersifat sementara (harus kedaluwarsa setelah waktu yang relatif singkat), jadi meneruskannya untuk mengautentikasi pengguna dalam alur kerja aplikasi adalah jauh lebih aman daripada meneruskan kredensial aktual.

OAuth 2.0 spesifikasi mendefinisikan mekanisme yang berbeda, yang disebut "jenis pemberian", untuk mendistribusikan akses token untuk aplikasi. Jenis pemberian izin paling dasar yang ditentukan oleh OAuth 2.0 disebut "klien kredensial." Dalam jenis pemberian ini, token akses OAuth dibuat sebagai imbalan atas permintaan klien kredensial, yang merupakan pasangan kunci konsumen/rahasia konsumen, seperti contoh di atas.

Jenis pemberian kredensial klien di Edge diimplementasikan menggunakan kebijakan di proxy API. J alur OAuth umum dalam melibatkan dua langkah:

  • Call API proxy 1 untuk membuat token akses OAuth dari klien memiliki kredensial yang lengkap. Kebijakan OAuth v2.0 di proxy API akan menangani hal ini.
  • Call API proxy 2 untuk mengirim token akses OAuth dalam panggilan API. Tujuan Proxy API memverifikasi token akses menggunakan kebijakan OAuth v2.0.

Yang Anda butuhkan

  • Akun Apigee Edge. Jika belum memilikinya, Anda dapat mendaftar dengan petunjuk arah di Membuat Apigee Akun Edge.
  • cURL yang diinstal di komputer Anda untuk melakukan panggilan API dari command line.

Mendownload dan men-deploy API pembuatan token {i>proxy<i}

Pada langkah ini, Anda akan membuat proxy API yang membuat token akses OAuth dari kunci konsumen dan rahasia konsumen yang dikirim dalam panggilan API. Apigee menyediakan contoh proxy API yang melakukan hal ini. Anda akan mendownload dan men-deploy proxy sekarang, lalu menggunakannya nanti dalam tutorial. (Anda Anda sendiri dapat membangun proxy API ini dengan mudah. Langkah download dan deploy ini untuk kemudahan dan untuk menunjukkan kepada Anda betapa mudahnya untuk berbagi {i>proxy<i} yang telah dibuat.)

  1. Download 'oauth' contoh file ZIP proxy API ke direktori mana pun pada file Anda sistem file.
  2. Buka https://apigee.com/edge, lalu login.
  3. Pilih Develop > Proxy API di menu navigasi sebelah kiri.
  4. Klik + Proxy.
    Tombol Create proxy
  5. Di wizard Create Proxy, klik Upload proxy bundle.
  6. Pilih file oauth.zip yang Anda download, lalu klik Berikutnya.
  7. Klik Buat.
  8. Setelah build selesai, klik Edit proxy untuk melihat proxy baru di editor proxy API.
  9. Di halaman Ringkasan editor Proxy API, klik drop-down Deployment dan pilih test. Ini adalah lingkungan pengujian di organisasi Anda.

    Pada perintah konfirmasi, klik Deploy.
    Saat Anda mengklik lagi drop-down Deployment, ikon hijau menunjukkan bahwa proxy yang di-deploy ke lingkungan pengujian.

Selamat! Anda telah berhasil mendownload dan men-deploy API pembuatan token akses ke organisasi Edge Anda.

Melihat alur dan kebijakan OAuth

Mari kita pelajari lebih lanjut apa yang terdapat di proxy API.

  1. Di editor proxy API, klik tab Develop. Di sebelah kiri Navigator, Anda akan melihat dua kebijakan. Anda juga akan melihat dua POST flow di bagian Proxy Endpoints.
  2. Klik AccessTokenClientCredential di bagian Proxy Endpoints.

    Dalam tampilan kode XML, Anda akan melihat Flow yang disebut AccessTokenClientCredential:

    <Flow name="AccessTokenClientCredential">
        <Description/>
        <Request>
            <Step>
                <Name>GenerateAccessTokenClient</Name>
            </Step>
        </Request>
        <Response/>
        <Condition>(proxy.pathsuffix MatchesPath "/accesstoken") and (request.verb = "POST")</Condition>
    </Flow>
    

    Flow adalah langkah pemrosesan di proxy API. Dalam hal ini, alur akan terpicu saat kondisi tertentu terpenuhi (disebut alur bersyarat). Kondisi tersebut, didefinisikan dalam elemen <Condition>, menyebutkan bahwa jika panggilan proxy API dilakukan untuk resource /accesstoken, dan kata kerja permintaan adalah POST, lalu mengeksekusi kebijakan GenerateAccessTokenClient, yang menghasilkan akses sebelumnya yang benar.

  3. Sekarang, mari kita lihat kebijakan yang akan dipicu oleh alur kondisional. Klik Ikon kebijakan GenerateAccessTokenClient dalam diagram alur.

    Konfigurasi XML berikut dimuat ke dalam tampilan kode:

    <OAuthV2 name="GenerateAccessTokenClient">
        <!-- 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>
            <!-- This part is very important: most real OAuth 2.0 apps will want to use other
             grant types. In this case it is important to NOT include the "client_credentials"
             type because it allows a client to get access to a token with no user authentication -->
            <GrantType>client_credentials</GrantType>
        </SupportedGrantTypes>
        <GrantType>request.queryparam.grant_type</GrantType>
        <GenerateResponse/>
    </OAuthV2>
    

    Konfigurasi ini mencakup hal berikut:

    • <Operation>, yang dapat berupa salah satu dari beberapa nilai yang telah ditentukan, mendefinisikan apa yang akan dilakukan oleh kebijakan tersebut. Dalam hal ini, ini akan menghasilkan akses sebelumnya yang benar.
    • Masa berlaku token akan berakhir 1 jam (3600000 milidetik) setelah dibuat.
    • Di <SupportedGrantTypes>, OAuth <GrantType> yang diperkirakan akan digunakan adalah client_credentials (bertukar kunci dan rahasia konsumen untuk token OAuth).
    • Elemen <GrantType> kedua memberi tahu kebijakan tempat untuk memeriksa panggilan API untuk parameter jenis pemberian, seperti yang diwajibkan oleh spesifikasi OAuth 2.0. (Anda akan melihat ini di panggilan API nanti). Jenis pemberian izin juga dapat dikirim dalam bentuk header (request.header.grant_type) atau sebagai parameter formulir (request.formparam.grant_type).

Saat ini, Anda tidak perlu melakukan apa pun terhadap proxy API. Pada langkah selanjutnya, Anda akan menggunakan proxy API ini untuk membuat token akses OAuth. Tapi pertama-tama, Anda perlu melakukan beberapa hal lainnya:

  • Buat proxy API yang sebenarnya ingin Anda amankan dengan OAuth.
  • Buat beberapa artefak lain yang akan menghasilkan kunci konsumen dan rahasia konsumen Anda harus menukar sebuah token akses.

Membuat proxy API yang dilindungi OAuth

Tentang 'mocktarget'

Layanan mocktarget dihosting di Apigee dan menampilkan data sederhana. Di beberapa sebenarnya, Anda dapat mengaksesnya di {i>browser <i}web. Cobalah dengan mengklik yang berikut ini:

http://mocktarget.apigee.net/ip

Target menampilkan apa yang akan Anda lihat saat akhirnya memanggil proxy API ini.

Anda juga dapat menekan http://mocktarget.apigee.net/help untuk melihat sumber daya API lain yang yang tersedia di mocktarget.

Sekarang Anda akan membuat proxy API yang ingin dilindungi. Ini adalah panggilan API yang menghasilkan sesuatu yang Anda inginkan. Dalam hal ini, proxy API akan memanggil layanan mocktarget Apigee untuk mengembalikan alamat IP Anda. TETAPI, Anda akan melihatnya hanya jika Anda meneruskan akses OAuth yang valid token akses dengan panggilan API Anda.

Proxy API yang Anda buat di sini akan menyertakan kebijakan yang memeriksa token OAuth di permintaan.

  1. Pilih Develop > Proxy API di menu navigasi sebelah kiri.
  2. Klik + Proxy.
    Tombol Create proxy
  3. Di wizard Build a Proxy, pilih Reverse proxy (paling umum), lalu klik Berikutnya.
  4. Konfigurasi proxy dengan hal berikut:
    Di kolom ini lakukan ini
    Nama Proxy Masukkan: helloworld_oauth2
    Jalur Dasar Project

    Ubah menjadi: /hellooauth2

    Jalur Dasar Project adalah bagian dari URL yang digunakan untuk membuat permintaan ke API {i>proxy<i}.

    API yang sudah ada

    Masukkan: https://mocktarget.apigee.net/ip

    Ini menentukan URL target yang dipanggil Apigee Edge pada permintaan ke API {i>proxy<i}.

    Deskripsi Masukkan: hello world protected by OAuth
  5. Klik Berikutnya.
  6. Di halaman Kebijakan umum:
    Di kolom ini lakukan ini
    Keamanan: Otorisasi Pilih: OAuth 2.0
  7. Klik Berikutnya.
  8. Di halaman Virtual Hosts, klik Next.
  9. Di halaman Build, pastikan lingkungan test dipilih, dan klik Create and Deploy.
  10. Di halaman Summary, Anda melihat konfirmasi bahwa proxy API baru Anda berhasil dibuat, dan proxy API sudah di-deploy untuk pengujian Anda lingkungan fleksibel App Engine.
  11. Klik Edit proxy untuk menampilkan halaman Ringkasan untuk proxy API.
    Perhatikan bahwa kali ini proxy API di-deploy secara otomatis. Klik Deployment untuk memastikan ada titik deployment hijau di sebelah "test" lingkungan fleksibel App Engine.

Lihat kebijakan

Mari kita lihat lebih dekat apa yang telah Anda buat.

  1. Di editor proxy API, klik tab Develop. Anda akan melihat bahwa kebijakan telah ditambahkan ke alur permintaan proxy API:
    • Verifikasi Token Akses OAuth v2.0 – Memeriksa panggilan API yang akan dilakukan memastikan token OAuth yang valid ada.
    • Remove Header Authorization – kebijakan Menetapkan Pesan yang menghapus token akses setelah diperiksa, sehingga tidak diteruskan ke target layanan. (Jika layanan target memerlukan token akses OAuth, Anda tidak akan menggunakan kebijakan ini).
  2. Klik ikon Verify OAuth v2.0 Access Token di tampilan alur dan lihat XML di bawahnya di panel kode.

    <OAuthV2 async="false" continueOnError="false" enabled="true" name="verify-oauth-v2-access-token">
        <DisplayName>Verify OAuth v2.0 Access Token</DisplayName>
        <Operation>VerifyAccessToken</Operation>
    </OAuthV2>
    

    Perhatikan bahwa <Operation> adalah VerifyAccessToken. Tujuan Operasi mendefinisikan apa yang seharusnya dilakukan oleh kebijakan. Dalam hal ini, ia akan memeriksa token OAuth yang valid dalam permintaan.

Menambahkan produk API

Untuk menambahkan produk API menggunakan UI Apigee:

  1. Pilih Publikasikan > Produk API.
  2. Klik +Produk API.
  3. Masukkan Detail produk untuk produk API Anda.
    Kolom Deskripsi
    Nama Nama internal produk API. Jangan tentukan karakter khusus dalam nama.
    Catatan: Anda tidak dapat mengedit nama setelah produk API dibuat. Misalnya, helloworld_oauth2-Product
    Nama tampilan Nama tampilan untuk produk API. Nama tampilan digunakan di UI dan Anda dapat mengedit kapan saja. Jika tidak ditentukan, nilai Nama akan digunakan. Kolom ini terisi otomatis menggunakan nilai Name; Anda dapat mengedit atau menghapus isinya. Nama tampilan dapat mencakup karakter khusus. Misalnya, helloworld_oauth2-Product.
    Deskripsi Deskripsi produk API.
    Lingkungan Lingkungan yang akan diizinkan aksesnya oleh produk API. Pilih lingkungan tempat Anda telah men-deploy proxy API. Misalnya, test.
    Akses Pilih Publik.
    Menyetujui permintaan akses secara otomatis Aktifkan persetujuan otomatis permintaan kunci untuk produk API ini dari aplikasi apa pun.
    Kuota Abaikan untuk tutorial ini.
    Cakupan OAuth yang Diizinkan Abaikan untuk tutorial ini.
  4. Di kolom API proxy, pilih proxy API yang baru saja Anda buat.
  5. Pada kolom Path, masukkan "/". Abaikan kolom lainnya.
  6. Klik Simpan.

Tambahkan developer dan aplikasi ke organisasi

Selanjutnya, Anda akan menyimulasikan alur kerja developer yang mendaftar untuk menggunakan API Anda. Idealnya, developer mendaftarkan diri dan aplikasi mereka melalui portal developer Anda. Di sini meskipun demikian, Anda akan menambahkan pengembang dan aplikasi sebagai administrator.

Developer akan memiliki satu atau beberapa aplikasi yang memanggil API Anda, dan setiap aplikasi akan mendapatkan kunci konsumen dan rahasia konsumen. Kunci/rahasia-per-aplikasi ini juga memberi Anda, penyedia API, kontrol yang lebih terperinci atas akses ke API Anda dan pelaporan analisis yang lebih terperinci terkait API traffic, karena Edge mengetahui developer dan aplikasi mana yang termasuk dalam token OAuth tertentu.

Membuat developer

Mari kita buat developer bernama Nigel Tufnel.

  1. Pilih Publikasikan > Developer di menu.
  2. Klik + Developer.
  3. Masukkan kode berikut di jendela Developer Baru:
    Di kolom ini Enter
    Nama Depan Nigel
    Nama Belakang Tufnel
    Username nigel
    Email nigel@example.com
  4. Klik Buat.

Daftarkan aplikasi

Mari buat aplikasi untuk Nigel.

  1. Pilih Publikasikan > Aplikasi.
  2. Klik + App.
  3. Masukkan hal berikut di jendela New App:
    Di kolom ini lakukan ini
    Name dan Display Name Masukkan: nigel_app
    Developer Klik Developer lalu pilih: Nigel Tufnel (nigel@example.com)
    URL Callback dan Catatan Biarkan kosong
  4. Di bagian Produk, klik Tambahkan Produk.
  5. Pilih helloworld_oauth2-Product.
  6. Klik Buat.

Dapatkan kunci konsumen dan rahasia konsumen

Sekarang Anda akan mendapatkan kunci konsumen dan rahasia konsumen yang akan ditukarkan dengan OAuth token masing-masing.

  1. Pastikan halaman nigel_app ditampilkan. Jika tidak, pada halaman Aplikasi (Publikasikan > Aplikasi), klik nigel_app.
  2. Di halaman nigel_app, klik Show di Key dan Secret. Perhatikan bahwa kunci/rahasia adalah yang terkait dengan project "helloworld_oauth2-Product" yang dibuat secara otomatis sebelumnya.

  3. Pilih dan salin {i>Key<i} dan {i>Secret<i}. Tempelkan dalam file teks. Anda akan menggunakannya di langkah selanjutnya, di mana Anda memanggil proxy API yang akan menukar kredensial ini dengan token akses OAuth.

Coba panggil API untuk mendapatkan alamat IP Anda (gagal!)

Sekadar informasi, coba panggil proxy API yang dilindungi yang seharusnya menampilkan IP Anda alamat IPv6 Jalankan perintah cURL berikut di jendela terminal, yang menggantikan Edge Anda nama organisasi. Kata test di URL adalah di mana Anda men-deploy {i>proxy<i} Anda. Jalur dasar proxy adalah /hellooauth2, jalur dasar yang sama dengan yang Anda tentukan saat membuat proxy. Perhatikan bahwa Anda tidak meneruskan token akses OAuth dalam panggilan.

curl https://ORG_NAME-test.apigee.net/hellooauth2

Karena proxy API memiliki kebijakan Verifikasi Token Akses OAuth v2.0 memeriksa token OAuth yang valid dalam permintaan, panggilan akan gagal dengan pesan:

{"fault":{"faultstring":"Invalid access token","detail":{"errorcode":"oauth.v2.InvalidAccessToken"}}}

Dalam hal ini, kegagalan adalah hal yang baik. Artinya, proxy API Anda jauh lebih aman. Hanya tepercaya aplikasi yang memiliki token akses OAuth yang valid berhasil memanggil API ini.

Mendapatkan token akses OAuth

Sekarang kita mendapatkan hasil besar. Anda akan menggunakan kunci dan rahasia tersebut disalin dan ditempelkan ke file teks dan tukarkan dengan token akses OAuth. Anda sekarang akan melakukan panggilan API ke proxy contoh API yang Anda impor, oauth, yang akan menghasilkan token akses API.

Dengan menggunakan kunci dan rahasia tersebut, lakukan panggilan cURL berikut (perhatikan bahwa protokolnya https), mengganti nama organisasi Edge Anda, kunci Anda, dan rahasia, jika diindikasikan:

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" \
"https://ORG_NAME-test.apigee.net/oauth/client_credential/accesstoken?grant_type=client_credentials" \
-d "client_id=CLIENT_KEY&client_secret=CLIENT_SECRET"

Perhatikan bahwa jika Anda menggunakan klien seperti {i>Postman<i} untuk melakukan panggilan, client_id dan client_secret masuk ke bagian Isi dan harus x-www-form-urlencoded.

Anda akan mendapatkan respons seperti ini:

{
  "issued_at" : "1466025769306",
  "application_name" : "716bbe61-f14a-4d85-9b56-a62ff8e0d347",
  "scope" : "",
  "status" : "approved",
  "api_product_list" : "[helloworld_oauth2-Product]",
  "expires_in" : "3599", //--in seconds
  "developer.email" : "nigel@example.com",
  "token_type" : "BearerToken",
  "client_id" : "xNnREu1DNGfiwzQZ5HUN8IAUwZSW1GZW",
  "access_token" : "GTPY9VUHCqKVMRB0cHxnmAp0RXc0",
  "organization_name" : "myOrg",
  "refresh_token_expires_in" : "0", //--in seconds
  "refresh_count" : "0"
}

Anda mendapatkan token akses OAuth. Salin nilai access_token (tanpa tanda kutip) dan menempelkannya ke dalam file teks Anda. Anda akan segera menggunakannya.

Apa yang baru saja terjadi?

Ingat sebelumnya saat Anda melihat alur bersyarat di bagian Proxy oauth, yang bertuliskan jika URI resource /accesstoken dan kata kerja permintaannya adalah POST, untuk mengeksekusi GenerateAccessTokenClient Kebijakan OAuth yang membuat token akses? cURL Anda memenuhi ketentuan tersebut, sehingga kebijakan OAuth dijalankan. Google Analytics 4 memverifikasi kunci konsumen rahasia pelanggan dan menukarnya dengan token OAuth yang masa berlakunya akan habis dalam 1 jam.

Panggil API dengan token akses (berhasil)

Setelah memiliki token akses, Anda dapat menggunakannya untuk memanggil proxy API. Jadikan setelah panggilan cURL. Ganti nama organisasi Edge dan token akses Anda.

curl https://ORG_NAME-test.apigee.net/hellooauth2 -H "Authorization: Bearer TOKEN"

Sekarang Anda akan mendapatkan panggilan yang berhasil ke proxy API yang menampilkan alamat IP Anda. Contoh:

{"ip":"::ffff:192.168.14.136"}

Anda bisa mengulangi panggilan API tersebut selama hampir satu jam, setelah itu token akses akan berakhir. Untuk melakukan panggilan setelah satu jam, Anda harus membuat token akses baru menggunakan langkah-langkah sebelumnya.

Selamat! Anda telah membuat proxy API dan melindunginya dengan mewajibkan Token akses OAuth disertakan dalam panggilan.

Topik terkait