Cara Menggunakan Apache APISIX Auth dengan Okta

Fei Han

September 7, 2021

Ecosystem

Menggunakan Plugin OpenID Connect Apache APISIX untuk Autentikasi Identitas Terpusat
Menggunakan plugin OpenID Connect Apache APISIX untuk mengonfigurasi autentikasi Okta adalah proses tiga langkah yang sederhana. Ini memungkinkan Anda untuk beralih dari mode autentikasi tradisional ke mode autentikasi identitas terpusat. Bagian berikut menjelaskan langkah-langkah untuk mengonfigurasi autentikasi Okta menggunakan plugin OpenID Connect untuk Apache APISIX.

Mode autentikasi identitas terpusat, dibandingkan dengan mode autentikasi tradisional, memiliki keunggulan berikut:

  1. Autentikasi identitas terpusat menyederhanakan proses pengembangan aplikasi.
  2. Autentikasi identitas terpusat meningkatkan keamanan bisnis.

Prasyarat

Siapkan akun Okta yang siap digunakan.

Langkah 1: Mengonfigurasi Okta

  1. Masuk ke akun Okta Anda, klik "Create App Integration" untuk membuat aplikasi Okta.
    Create App Integration

  2. Pilih "OIDC - OpenID Connect" untuk metode Sign-in, dan pilih "Web Application" untuk jenis aplikasi.
    Create a new App Integration

  3. Atur URL pengalihan untuk login dan logout. "Sign-in redirect URIs" adalah tautan yang diizinkan untuk dialihkan setelah login berhasil, dan "Sign-out redirect URIs" adalah tautan yang dialihkan setelah logout berhasil. Dalam contoh ini, kami mengatur kedua URL pengalihan login dan logout ke http://127.0.0.1:9080/.
    Set the redirect URL for login and logout

  4. Setelah menyelesaikan pengaturan, klik "Save" untuk menyimpan perubahan.
    save the changes

  5. Kunjungi halaman General aplikasi untuk mendapatkan konfigurasi berikut, yang diperlukan untuk mengonfigurasi Apache APISIX OpenID Connect.

    • Client ID: ID aplikasi, yang sesuai dengan client_id di bawah.
    • Client secret: Kunci aplikasi, yang sesuai dengan client_secret di bawah.
    • Okta domain: Nama domain yang digunakan oleh aplikasi, sesuai dengan {ISSUER} di bawah.

    obtain configuration

Langkah 2: Menginstal Apache APISIX

Menginstal Dependensi

Lingkungan runtime Apache APISIX memerlukan dependensi pada NGINX dan etcd. Sebelum menginstal Apache APISIX, silakan instal dependensi sesuai dengan sistem operasi yang Anda gunakan. Kami menyediakan instruksi instalasi dependensi untuk CentOS7, Fedora 31 & 32, Ubuntu 16.04 & 18.04, Debian 9 & 10, dan MacOS. Silakan merujuk ke Install Dependencies untuk detail lebih lanjut.

Menginstal melalui Paket RPM (CentOS 7)

Metode instalasi ini cocok untuk CentOS 7, jalankan perintah berikut untuk menginstal Apache APISIX.

sudo yum install -y https://github.com/apache/apisix/releases/download/2.7/apisix-2.7-0.x86_64.rpm

Menginstal melalui Docker

Silakan merujuk ke: Installing Apache APISIX with Docker.

Menginstal melalui Helm Chart

Silakan merujuk ke: Installing Apache APISIX with Helm Chart.

Menginstal melalui Source Release

  1. Buat direktori bernama apisix-2.7.

    mkdir apisix-2.7
  2. Unduh paket sumber Apache APISIX Release.

    wget https://downloads.apache.org/apisix/2.7/apache-apisix-2.7-src.tgz

    Anda juga dapat mengunduh paket sumber Apache APISIX Release dari situs web Apache APISIX. Apache APISIX Official Website - Download Page juga menyediakan paket sumber untuk Apache APISIX, APISIX Dashboard, dan APISIX Ingress Controller.

  3. Ekstrak paket sumber Apache APISIX Release.

    tar zxvf apache-apisix-2.7-src.tgz -C apisix-2.7
  4. Instal pustaka Lua yang diperlukan untuk runtime.

    # Beralih ke direktori apisix-2.7 cd apisix-2.7 # Buat dependensi make deps

Menginisialisasi Dependensi

Jalankan perintah berikut untuk menginisialisasi file konfigurasi NGINX dan etcd.

# inisialisasi file konfigurasi NGINX dan etcd make init

Langkah 3: Menjalankan Apache APISIX dan Mengonfigurasi Rute yang Sesuai

  1. Jalankan perintah berikut untuk memulai Apache APISIX.

    apisix start
  2. Buat rute dan konfigurasikan plugin OpenID Connect. Contoh kode berikut membuat rute melalui Apache APISIX Admin API, mengatur jalur upstream ke httpbin.org, layanan backend sederhana untuk menerima dan merespons permintaan. Berikut ini akan menggunakan halaman get dari httpbin.org. Silakan merujuk ke http bin get untuk informasi lebih lanjut. Untuk item konfigurasi spesifik, silakan merujuk ke Apache APISIX OpenID Connect Plugin.

Berikut adalah daftar bidang konfigurasi OpenID Connect:

FieldNilai DefaultDeskripsi
client_id""ID klien OAuth.
client_secret""Rahasia klien OAuth.
discovery""Titik akhir penemuan layanan untuk penyedia identitas.
scopeopenidRuang lingkup sumber daya yang akan diakses.
relmapisixTentukan informasi autentikasi header respons WWW-Authenticate.
bearer_onlyfalseApakah akan memeriksa token di header permintaan.
logout_path/logoutURI logout.
redirect_urirequest_uriURI yang dialihkan kembali oleh penyedia identitas, defaultnya adalah alamat permintaan.
timeout3Waktu habis permintaan, unitnya dalam detik.
ssl_verifyfalseVerifikasi sertifikat SSL penyedia identitas.
introspection_endpoint""URL titik akhir autentikasi token penyedia identitas, yang akan diekstrak dari respons discovery jika dibiarkan kosong.
introspection_endpoint_auth_methodclient_secret_basicNama metode autentikasi untuk introspeksi token.
public_key""Kunci publik untuk token autentikasi.
token_signing_alg_values_expected""Algoritma untuk token autentikasi.
set_access_token_headertrueApakah akan membawa token akses di header permintaan.
access_token_in_authorization_headerfalseApakah akan menempatkan token akses di header Authorization. Token akses ditempatkan di header Authorization ketika nilai ini diatur ke true dan di header X-Access-Token ketika diatur ke false.
set_id_token_headertrueApakah akan membawa token ID di header permintaan X-ID-Token.
set_userinfo_headertrueApakah akan membawa informasi pengguna di header permintaan X-Userinfo.
curl -XPOST 127.0.0.1:9080/apisix/admin/routes -H "X-Api-Key: edd1c9f034335f136f87ad84b625c8f1" -d '{ "uri":"/*", "plugins":{ "openid-connect":{ "client_id":"{YOUR_CLIENT_ID}", "client_secret":"{YOUR_CLIENT_SECRET}", "discovery":"https://{YOUR_ISSUER}/.well-known/openid-configuration", "scope":"openid profile", "bearer_only":false, "realm":"master", "introspection_endpoint_auth_method":"client_secret_post", "redirect_uri":"http://127.0.0.1:9080/" } }, "upstream":{ "type":"roundrobin", "nodes":{ "httpbin.org:80":1 } } }'

Verifikasi

  1. Kunjungi "http://127.0.0.1:9080/get" dan halaman akan dialihkan ke halaman login Okta karena plugin OpenID Connect diaktifkan.
    visit Okta login page

  2. Masukkan nama pengguna dan kata sandi untuk akun Okta pengguna dan klik "Sign In" untuk masuk ke akun Okta Anda.

  3. Setelah login berhasil, Anda dapat mengakses halaman get di "httpbin.org". Halaman "httpbin.org/get" akan mengembalikan data permintaan dengan X-Access-Token, X-Id-Token, dan X-Userinfo sebagai berikut.

    "X-Access-Token": "******Y0RPcXRtc0FtWWVuX2JQaFo1ZVBvSlBNdlFHejN1dXY5elV3IiwiYWxnIjoiUlMyNTYifQ.***TVER3QUlPbWZYSVRzWHRxRWh2QUtQMWRzVDVGZHZnZzAiLCJpc3MiOiJodHRwczovL3FxdGVzdG1hbi5va3RhLmNvbSIsImF1ZCI6Imh0dHBzOi8vcXF0ZXN0bWFuLm9rdGEuY29tIiwic3ViIjoiMjgzMDE4Nzk5QHFxLmNvbSIsImlhdCI6MTYyODEyNjIyNSwiZXhwIjoxNjI4MTI5ODI1LCJjaWQiOiIwb2ExMWc4ZDg3TzBGQ0dYZzY5NiIsInVpZCI6IjAwdWEwNWVjZEZmV0tMS3VvNjk1Iiwic2NwIjpbIm9wZW5pZCIsInByb2Zpb***.****iBshIcJhy8QNvzAFD0fV4gh7OAdTXFMu5k0hk0JeIU6Tfg_Mh-josfap38nxRN5hSWAvWSk8VNxokWTf1qlaRbypJrKI4ntadl1PrvG-HgUSFD0JpyqSQcv10TzVeSgBfOVD-czprG2Azhck-SvcjCNDV-qc3P9KoPQz0SRFX0wuAHWUbj1FRBq79YnoJfjkJKUHz3uu7qpTK89mxco8iyuIwB8fAxPMoXjIuU6-6Bw8kfZ4S2FFg3GeFtN-vE9bE5vFbP-JFQuwFLZNgqI0XO2S7l7Moa4mWm51r2fmV7p7rdpoNXYNerXOeZIYysQwe2_L****", "X-Id-Token": "******aTdDRDJnczF5RnlXMUtPZUtuSUpQdyIsImFtciI6WyJwd2QiXSwic3ViIjoiMDB1YTA1ZWNkRmZXS0xLdW82OTUiLCJpc3MiOiJodHRwczpcL1wvcXF0ZXN0bWFuLm9rdGEuY29tIiwiYXVkIjoiMG9hMTFnOGQ4N08wRkNHWGc2OTYiLCJuYW1lIjoiUGV0ZXIgWmh1IiwianRpIjoiSUQuNGdvZWo4OGUyX2RuWUI1VmFMeUt2djNTdVJTQWhGNS0tM2l3Z0p5TTcxTSIsInZlciI6MSwicHJlZmVycmVkX3VzZXJuYW1lIjoiMjgzMDE4Nzk5QHFxLmNvbSIsImV4cCI6MTYyODEyOTgyNSwiaWRwIjoiMDBvYTA1OTFndHAzMDhFbm02OTUiLCJub25jZSI6ImY3MjhkZDMxMWRjNGY3MTI4YzlmNjViOGYzYjJkMDgyIiwiaWF0IjoxNjI4MTI2MjI1LCJhdXRoX3RpbWUi*****", "X-Userinfo": "*****lfbmFtZSI6IlpodSIsImxvY2FsZSI6ImVuLVVTIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiMjgzMDE4Nzk5QHFxLmNvbSIsInVwZGF0ZWRfYXQiOjE2MjgwNzA1ODEsInpvbmVpbmZvIjoiQW1lcmljYVwvTG9zX0FuZ2VsZXMiLCJzdWIiOiIwMHVhMDVlY2RGZldLTEt1bzY5NSIsImdpdmVuX25hbWUiOiJQZXRlciIsIm5hbWUiOiJQZXRl****"

X-Access-Token: Apache APISIX menempatkan token akses yang diperoleh dari penyedia pengguna ke dalam header permintaan X-Access-Token, secara opsional melalui access_token_in_authorization_header dalam konfigurasi plugin header permintaan Authorization.

X-Access-Token

X-Id-Token: Apache APISIX akan mendapatkan token Id dari penyedia pengguna melalui pengkodean base64 ke dalam header permintaan X-Id-Token, Anda dapat memilih apakah akan mengaktifkan fungsi ini melalui set_id_token_header dalam konfigurasi plugin, defaultnya diaktifkan.

X-Id-Token

X-Userinfo: Apache APISIX akan mendapatkan informasi pengguna dari penyedia pengguna dan menempatkannya ke dalam X-Userinfo setelah mengkodekannya dengan Base64, Anda dapat memilih apakah akan mengaktifkan fitur ini melalui set_userinfo_header dalam konfigurasi plugin, defaultnya diaktifkan.

X-Userinfo

Seperti yang Anda lihat, Apache APISIX akan membawa header permintaan X-Access-Token, X-Id-Token, dan X-Userinfo ke upstream. Upstream dapat mengurai header ini untuk mendapatkan informasi ID pengguna dan metadata pengguna.

Kami telah menunjukkan proses membangun autentikasi identitas terpusat dari Okta langsung ke Apache APISIX Gateway. Sangat mudah untuk mendaftar Akun Pengembang Okta gratis untuk memulai. Pendekatan kami mengurangi beban pengembang dan memungkinkan pengalaman yang aman dan terstruktur.

Tentang Okta

Okta adalah solusi yang dapat disesuaikan, aman, dan siap pakai untuk menambahkan layanan autentikasi dan otorisasi ke aplikasi Anda. Dapatkan autentikasi yang dapat diskalakan yang dibangun langsung ke dalam aplikasi Anda tanpa beban pengembangan, risiko keamanan, dan pemeliharaan yang datang dari pengkodean sendiri. Anda dapat menghubungkan aplikasi apa pun dalam bahasa apa pun atau pada stack apa pun ke Okta dan menentukan bagaimana Anda ingin pengguna Anda masuk. Setiap kali pengguna mencoba untuk mengautentikasi, Okta akan memverifikasi identitas mereka dan mengirim informasi yang diperlukan kembali ke aplikasi Anda.

Tentang Apache APISIX

Apache APISIX adalah API gateway yang dinamis, real-time, dan berkinerja tinggi. Apache APISIX menyediakan fitur manajemen lalu lintas yang kaya seperti load balancing, upstream dinamis, canary release, circuit breaking, autentikasi, observabilitas, dan banyak lagi. Anda dapat menggunakan Apache APISIX untuk menangani lalu lintas tradisional utara-selatan, serta lalu lintas timur-barat antara layanan. Ini juga dapat digunakan sebagai k8s ingress controller.

Ratusan perusahaan di seluruh dunia telah menggunakan Apache APISIX, mencakup keuangan, internet, manufaktur, ritel, operator, seperti NASA, Digital Factory Uni Eropa, TravelSky, Tencent, Huawei, Weibo, China Mobile, Taikang, 360, dll.

Github: https://github.com/apache/apisix

Website: https://apisix.apache.org

Tags: