Menggunakan Apache APISIX dan Authing untuk Menerapkan Manajemen Autentikasi Terpusat
API7.ai
January 4, 2022
Pendahuluan
Tentang Apache APISIX
Apache APISIX adalah sebuah API gateway yang dinamis, real-time, dan berkinerja tinggi yang menyediakan berbagai fitur manajemen lalu lintas seperti load balancing, upstream dinamis, canary release, service meltdown, autentikasi, observabilitas, dan lain-lain. Apache APISIX tidak hanya mendukung perubahan dan hot-plugging plugin secara dinamis, tetapi juga memiliki banyak plugin yang berguna. Plugin OpenID Connect untuk Apache APISIX Dengan dukungan untuk protokol OpenID Connect, pengguna dapat menggunakan plugin ini untuk memungkinkan Apache APISIX berinteraksi dengan layanan Authing dan di-deploy sebagai gateway autentikasi terpusat di perusahaan.
Tentang Authing
Authing adalah produk cloud identitas pertama di Tiongkok yang berpusat pada pengembang, mengintegrasikan semua protokol identitas utama dan menyediakan layanan manajemen akses dan autentikasi pengguna yang lengkap dan aman untuk perusahaan dan pengembang. Dengan "API First" sebagai landasan produk, semua fungsi umum di bidang identitas dikemas secara modular, dan semua kemampuan di-API-kan kepada pengembang melalui SDK bahasa pemrograman full-scene. Pada saat yang sama, pengguna dapat secara fleksibel menggunakan RESTful API terbuka Authing untuk ekspansi fungsional guna memenuhi kebutuhan manajemen identitas perusahaan yang berbeda dalam berbagai skenario bisnis.
Apa itu Autentikasi Terpusat
Mode Autentikasi Tradisional
Dalam mode autentikasi tradisional, setiap layanan aplikasi back-end perlu mengembangkan fungsi terpisah untuk mendukung fungsi autentikasi, seperti berinteraksi dengan penyedia identitas dan mendapatkan informasi identitas pengguna.

Mode Autentikasi Identitas Terpusat
Berbeda dengan mode autentikasi tradisional, mode autentikasi terpusat mengambil proses autentikasi pengguna dari layanan aplikasi. Mengambil Apache APISIX sebagai contoh, proses autentikasi terpusat ditunjukkan pada gambar di atas: pertama, pengguna mengirimkan permintaan, kemudian gateway depan bertanggung jawab atas proses autentikasi pengguna, berinteraksi dengan penyedia identitas dan mengirim permintaan otorisasi ke penyedia identitas. Penyedia identitas mengembalikan informasi pengguna. Setelah gateway menyelesaikan identifikasi pengguna, informasi identitas pengguna diteruskan ke aplikasi back-end dalam bentuk header permintaan.

Keuntungan Mode Autentikasi Identitas Terpusat
Dibandingkan dengan mode autentikasi tradisional, mode autentikasi terpusat memiliki keuntungan berikut.
- Menyederhanakan proses pengembangan aplikasi, mengurangi beban pengembangan aplikasi dan biaya pemeliharaan, serta menghindari pengembangan logika autentikasi yang berulang untuk setiap aplikasi.
- Meningkatkan keamanan bisnis, mode autentikasi terpusat di tingkat gateway dapat mengintercept permintaan yang tidak terautentikasi secara tepat waktu untuk melindungi aplikasi back-end.
Pada saat yang sama, dengan menggabungkan fungsi manajemen autentikasi yang kuat dari Authing, fungsi-fungsi berikut dapat dicapai.
- Manajemen siklus hidup layanan autentikasi melalui konsol, termasuk pembuatan, pengaktifan, penonaktifan, dll.
- Pemantauan aplikasi secara real-time dan visual, termasuk: jumlah permintaan antarmuka, latensi panggilan antarmuka dan informasi kesalahan antarmuka, serta notifikasi alarm real-time.
- Pencatatan log terpusat untuk dengan mudah melihat login, logout, dan informasi tentang penyesuaian dan modifikasi aplikasi.
Detail lebih lanjut dapat ditemukan di Authing Access Gateway.
Cara Mengimplementasikan Autentikasi Identitas Terpusat menggunakan Apache APISIX dan Authing
Langkah 1: Konfigurasi Authing
- Masuk ke akun Authing Anda, pilih Build your own app dan isi nama aplikasi dan alamat autentikasi. Jika Anda tidak memiliki akun Authing, silakan kunjungi Authing, klik "Login/Register" di pojok kanan atas untuk mendaftar akun Authing.

- Klik Create untuk membuat aplikasi Authing.

- Selama proses autentikasi, Authing akan menolak URL callback selain yang dikonfigurasi. Karena ini adalah tes lokal, URL callback login dan logout keduanya diatur ke alamat akses APISIX http://127.0.0.1:9080/.

- Buat pengguna (opsional). Di halaman daftar pengguna, buat pengguna dengan akun password user1/user1, dan Anda dapat mengatur apakah mengizinkan akses ke aplikasi di halaman "User Information - Authorization Management" (defaultnya adalah mengizinkan).

- Kunjungi halaman aplikasi untuk konfigurasi berikut, yang diperlukan saat mengkonfigurasi Apache APISIX OpenID Connect.
- App ID: ID klien OAuth, yaitu ID aplikasi, sesuai dengan
client_iddan{YOUR_CLIENT_ID}di bawah. - App secret: Rahasia klien OAuth, yaitu kunci aplikasi. Sesuai dengan
client_secretdan{YOUR_CLIENT_SECRET}di bawah. - Service_discovery_address: Alamat penemuan layanan aplikasi. Sesuai dengan
{YOUR_DISCOVERY}di bawah.
- App ID: ID klien OAuth, yaitu ID aplikasi, sesuai dengan
Langkah 2: Instal Apache APISIX
Anda dapat menginstal Apache APISIX dengan berbagai cara termasuk paket sumber, Docker, Helm Chart, dll.
Instal 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 dan 32, Ubuntu 16.04 dan 18.04, Debian 9 dan 10, dan macOS. Silakan merujuk ke Instal Dependensi untuk detail lebih lanjut.
Instalasi melalui Paket RPM (CentOS 7)
Metode instalasi ini cocok untuk CentOS 7; silakan 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
Instalasi melalui Docker
Silakan merujuk ke Instal Apache APISIX dengan Docker.
Instalasi melalui Helm Chart
Silakan merujuk ke Instal Apache APISIX dengan Helm Chart.
Instalasi melalui Rilis Sumber
- Buat direktori bernama
apisix-2.7.
mkdir apisix-2.7
- Unduh paket sumber rilis Apache APISIX.
wget https://downloads.apache.org/apisix/2.7/apache-apisix-2.7-src.tgz
Anda juga dapat mengunduh paket sumber rilis Apache APISIX dari situs web Apache APISIX. Situs Web Resmi Apache APISIX - Halaman Unduhan juga menyediakan paket sumber untuk Apache APISIX, APISIX Dashboard, dan APISIX Ingress Controller.
- Ekstrak paket sumber rilis Apache APISIX.
tar zxvf apache-apisix-2.7-src.tgz -C apisix-2.7
- Instal library Lua yang diperlukan untuk runtime.
# Beralih ke direktori apisix-2.7 cd apisix-2.7 # Buat dependensi make deps
Inisialisasi Dependensi
Jalankan perintah berikut untuk menginisialisasi file konfigurasi NGINX dan etcd.
# inisialisasi file konfigurasi NGINX dan etcd make init
Langkah 3: Mulai Apache APISIX dan konfigurasi rute
-
Jalankan perintah berikut untuk memulai Apache APISIX.
apisix start -
Buat rute dan konfigurasi plugin OpenID Connect. Daftar konfigurasi OpenID Connect adalah sebagai berikut.
| Field | Nilai Default | Deskripsi |
|---|---|---|
| client_id | N/A | ID klien OAuth |
| client_secret | N/A | Kunci rahasia klien OAuth |
| discovery | N/A | Titik akhir penemuan layanan untuk penyedia identitas |
| scope | openid | Ruang lingkup sumber daya yang perlu diakses |
| relm | apisix | Tentukan informasi autentikasi header respons WWW-Authenticate |
| bearer_only | false | Apakah memeriksa token di header permintaan |
| logout_path | /logout | URI logout |
| redirect_uri | request_uri | URI yang dikembalikan oleh penyedia identitas, defaultnya adalah alamat permintaan |
| timeout | 3 | Waktu timeout permintaan dalam detik |
| ssl_verify | false | Apakah memeriksa sertifikat ssl penyedia identitas |
| introspection_endpoint | N/A | 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 | N/A | Kunci publik untuk autentikasi token |
| token_signing_alg_values_expected | N/A | Algoritma untuk token autentikasi |
| set_access_token_header | true | Apakah membawa token akses di header permintaan |
| access_token_in_authorization_header | false | Token akses ditempatkan di header Authorization jika true, dan di header X-Access-Token jika false. |
| set_id_token_header | false | Tidak membawa token ID ke header permintaan X-ID-Token |
| set_userinfo_header | false | Apakah membawa informasi pengguna di header permintaan X-Userinfo |
Contoh kode berikut membuat rute melalui Apache APISIX Admin API, mengatur upstream rute ke httpbin.org. httpbin.org adalah layanan backend sederhana untuk menerima dan merespons permintaan, halaman get dari httpbin.org akan digunakan di bawah ini, merujuk ke http bin get.
Untuk item konfigurasi spesifik, silakan merujuk ke Plugin OpenID Connect Apache APISIX.
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_DISCOVERY}", "scope":"openid profile", "bearer_only":false, "realm":"apisix", "introspection_endpoint_auth_method":"client_secret_post", "redirect_uri":"http://127.0.0.1:9080/" } }, "upstream":{ "type":"roundrobin", "nodes":{ "httpbin.org:80":1 } } }'
Langkah 4: Akses Apache APISIX
-
Kunjungi "http://127.0.0.1:9080/get" dan halaman akan dialihkan ke halaman login Authing karena plugin OpenID Connect sudah diaktifkan (halaman ini dapat disesuaikan di konsol Authing di bawah "Applications - Branding").

-
Masukkan password untuk akun pengguna yang terdaftar di Authing, atau pengguna user1/user1 yang dibuat di Langkah 1, dan klik Login untuk masuk ke akun Authing.
-
Setelah login berhasil, Anda dapat berhasil mengakses halaman get di httpbin.org. Halaman httpbin.org/get akan mengembalikan data permintaan sebagai berikut.
... "X-Access-Token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InFqeU55aVdVd2NhbUFxdEdVRUNCeFNsTWxQSWtTR2N1NmkyZzhEUk1OSGsifQ.eyJqdGkiOiJjTy16a0pCS0NSRFlHR2kyWkJhY0oiLCJzdWIiOiI2MWM5OGFmOTg0MjI4YWU0OTYyMDU4NTIiLCJpYXQiOjE2NDA1OTg4NTgsImV4cCI6MTY0MTgwODQ1OCwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSIsImlzcyI6Imh0dHBzOi8vYXBpc2l4LmF1dGhpbmcuY24vb2lkYyIsImF1ZCI6IjYxYzk4M2M0YjI4NzdkNDg2OWRkOGFjYiJ9.l2V8vDWcCObB1LjIhKs2ARG4J7WuB-0c-bnYZG2GP2zcpl6PMAPcId2B76CaXCU58ajGcfRmOlWJ67UaHrfWKv8IM4vcYN1gwhKdokSyrhEM31gQE-MzNEsEbPaVIGXdpR1N2JnAJK5-tKIjopDAXSwArfO6fQKTpjLhCi3COIA169WGRR4CKCwNzzpFAYP2ilNc18D_HRTBLS6UjxZSNUtWE5dbx7uBjblhwIwn5e1fxiEQcknVK8Dxf8NUliFECvr02HX2hNvmuCECkvA_mZYlshAeqidK8tSEXirAWsWS5jlXFqLiBJkhSHFrbxRyqeOSfJCJR_YcCwk9AzgZGg", "X-Id-Token": "eyJhdF9oYXNoIjoiRl8tRjZaUVgtWVRDNEh0TldmcHJmUSIsImJpcnRoZGF0ZSI6bnVsbCwiZmFtaWx5X25hbWUiOm51bGwsImdlbmRlciI6IlUiLCJnaXZlbl9uYW1lIjpudWxsLCJpc3MiOiJodHRwczpcL1wvYXBpc2l4LmF1dGhpbmcuY25cL29pZGMiLCJwaWN0dXJlIjoiaHR0cHM6XC9cL2ZpbGVzLmF1dGhpbmcuY29cL2F1dGhpbmctY29uc29sZVwvZGVmYXVsdC11c2VyLWF2YXRhci5wbmciLCJwcmVmZXJyZWRfdXNlcm5hbWUiOm51bGwsInVwZGF0ZWRfYXQiOiIyMDIxLTEyLTI3VDA5OjU0OjE3Ljc3M1oiLCJ3ZWJzaXRlIjpudWxsLCJ6b25laW5mbyI6bnVsbCwibmFtZSI6bnVsbCwiaWF0IjoxNjQwNTk4ODU4LCJuaWNrbmFtZSI6bnVsbCwibm9uY2UiOiJmMTlmZjhjODM5NzdmZjNlMDczMzZmMzg3Y2QxM2EzMSIsIm1pZGRsZV9uYW1lIjpudWxsLCJleHAiOjE2NDE4MDg0NTgsInN1YiI6IjYxYzk4YWY5ODQyMjhhZTQ5NjIwNTg1MiIsImxvY2FsZSI6bnVsbCwiYXVkIjoiNjFjOTgzYzRiMjg3N2Q0ODY5ZGQ4YWNiIiwicHJvZmlsZSI6bnVsbH0=", "X-Userinfo": "eyJ3ZWJzaXRlIjpudWxsLCJ6b25laW5mbyI6bnVsbCwibmFtZSI6bnVsbCwicHJvZmlsZSI6bnVsbCwibmlja25hbWUiOm51bGwsInN1YiI6IjYxYzk4YWY5ODQyMjhhZTQ5NjIwNTg1MiIsImxvY2FsZSI6bnVsbCwiYmlydGhkYXRlIjpudWxsLCJmYW1pbHlfbmFtZSI6bnVsbCwiZ2VuZGVyIjoiVSIsImdpdmVuX25hbWUiOm51bGwsIm1pZGRsZV9uYW1lIjpudWxsLCJwaWN0dXJlIjoiaHR0cHM6XC9cL2ZpbGVzLmF1dGhpbmcuY29cL2F1dGhpbmctY29uc29sZVwvZGVmYXVsdC11c2VyLWF2YXRhci5wbmciLCJwcmVmZXJyZWRfdXNlcm5hbWUiOm51bGwsInVwZGF0ZWRfYXQiOiIyMDIxLTEyLTI3VDA5OjU0OjE3Ljc3M1oifQ==" ...X-Access-Token: Apache APISIX menempatkan token akses yang diperoleh dari penyedia pengguna ke dalam header permintaan
X-Access-Token, secara opsional di header Authorization melaluiaccess_token_in_authorization_headerdalam konfigurasi plugin.
X-Id-Token: Apache APISIX menempatkan token ID yang diperoleh dari penyedia pengguna ke dalam header permintaan X-Id-Token setelah encoding base64, yang dapat diaktifkan atau dinonaktifkan oleh
set_id_token_headerdalam konfigurasi plugin.
X-Userinfo: Apache APISIX menempatkan informasi pengguna yang diperoleh dari penyedia pengguna ke dalam X-Userinfo setelah meng-encode-nya dalam base64. Anda dapat memilih apakah akan mengaktifkan fitur ini dengan menggunakan
set_userinfo_headerdalam konfigurasi plugin.
Seperti yang dapat Anda lihat, Apache APISIX akan membawa header permintaan
X-Access-Token,X-Id-TokendanX-Userinfoke upstream. Upstream dapat mengurai header ini untuk mendapatkan informasi ID pengguna dan metadata pengguna. -
Di "Audit Log - User Behavior Log" di konsol Authing, Anda dapat mengamati informasi login user1.

Kesimpulan
Artikel ini menjelaskan langkah-langkah detail untuk menghubungkan Apache APISIX dengan Authing.
Apache APISIX tidak hanya berkomitmen untuk mempertahankan kinerja tingginya, tetapi juga selalu menaruh perhatian besar pada pembangunan ekosistem open source. Saat ini, Apache APISIX memiliki 10+ plugin terkait otorisasi autentikasi yang mendukung interaksi dengan layanan otorisasi autentikasi utama di industri.
Jika Anda memiliki kebutuhan untuk berinteraksi dengan otoritas autentikasi lain, kunjungi GitHub Apache APISIX dan tinggalkan saran Anda melalui issue; atau berlangganan mailing list Apache APISIX untuk menyampaikan pemikiran Anda melalui email.