Cara Menggunakan Apache APISIX Auth dengan Okta
Fei Han
September 7, 2021
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:
- Autentikasi identitas terpusat menyederhanakan proses pengembangan aplikasi.
- Autentikasi identitas terpusat meningkatkan keamanan bisnis.
Prasyarat
Siapkan akun Okta yang siap digunakan.
Langkah 1: Mengonfigurasi Okta
-
Masuk ke akun Okta Anda, klik "Create App Integration" untuk membuat aplikasi Okta.

-
Pilih "OIDC - OpenID Connect" untuk metode Sign-in, dan pilih "Web Application" untuk jenis aplikasi.

-
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/.

-
Setelah menyelesaikan pengaturan, klik "Save" untuk menyimpan perubahan.

-
Kunjungi halaman General aplikasi untuk mendapatkan konfigurasi berikut, yang diperlukan untuk mengonfigurasi Apache APISIX OpenID Connect.
- Client ID: ID aplikasi, yang sesuai dengan
client_iddi bawah. - Client secret: Kunci aplikasi, yang sesuai dengan
client_secretdi bawah. - Okta domain: Nama domain yang digunakan oleh aplikasi, sesuai dengan
{ISSUER}di bawah.

- Client ID: ID aplikasi, yang sesuai dengan
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
-
Buat direktori bernama
apisix-2.7.mkdir apisix-2.7 -
Unduh paket sumber Apache APISIX Release.
wget https://downloads.apache.org/apisix/2.7/apache-apisix-2.7-src.tgzAnda 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.
-
Ekstrak paket sumber Apache APISIX Release.
tar zxvf apache-apisix-2.7-src.tgz -C apisix-2.7 -
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
-
Jalankan perintah berikut untuk memulai Apache APISIX.
apisix start -
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:
| Field | Nilai Default | Deskripsi |
|---|---|---|
| client_id | "" | ID klien OAuth. |
| client_secret | "" | Rahasia klien OAuth. |
| discovery | "" | Titik akhir penemuan layanan untuk penyedia identitas. |
| scope | openid | Ruang lingkup sumber daya yang akan diakses. |
| relm | apisix | Tentukan informasi autentikasi header respons WWW-Authenticate. |
| bearer_only | false | Apakah akan memeriksa token di header permintaan. |
| logout_path | /logout | URI logout. |
| redirect_uri | request_uri | URI yang dialihkan kembali oleh penyedia identitas, defaultnya adalah alamat permintaan. |
| timeout | 3 | Waktu habis permintaan, unitnya dalam detik. |
| ssl_verify | false | Verifikasi 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_method | client_secret_basic | Nama metode autentikasi untuk introspeksi token. |
| public_key | "" | Kunci publik untuk token autentikasi. |
| token_signing_alg_values_expected | "" | Algoritma untuk token autentikasi. |
| set_access_token_header | true | Apakah akan membawa token akses di header permintaan. |
| access_token_in_authorization_header | false | Apakah 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_header | true | Apakah akan membawa token ID di header permintaan X-ID-Token. |
| set_userinfo_header | true | Apakah 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
-
Kunjungi "http://127.0.0.1:9080/get" dan halaman akan dialihkan ke halaman login Okta karena plugin OpenID Connect diaktifkan.

-
Masukkan nama pengguna dan kata sandi untuk akun Okta pengguna dan klik "Sign In" untuk masuk ke akun Okta Anda.
-
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-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-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.

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