Menggunakan Apache APISIX dan Authing untuk Menerapkan Manajemen Autentikasi Terpusat

API7.ai

January 4, 2022

Ecosystem

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.

alur kerja autentikasi tradisional

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.

alur kerja mode autentikasi terpusat

Keuntungan Mode Autentikasi Identitas Terpusat

Dibandingkan dengan mode autentikasi tradisional, mode autentikasi terpusat memiliki keuntungan berikut.

  1. Menyederhanakan proses pengembangan aplikasi, mengurangi beban pengembangan aplikasi dan biaya pemeliharaan, serta menghindari pengembangan logika autentikasi yang berulang untuk setiap aplikasi.
  2. 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.

  1. Manajemen siklus hidup layanan autentikasi melalui konsol, termasuk pembuatan, pengaktifan, penonaktifan, dll.
  2. Pemantauan aplikasi secara real-time dan visual, termasuk: jumlah permintaan antarmuka, latensi panggilan antarmuka dan informasi kesalahan antarmuka, serta notifikasi alarm real-time.
  3. 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

  1. 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. Konfigurasi Authing
  2. Klik Create untuk membuat aplikasi Authing. Membuat Aplikasi Authing
  3. 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/. Atur URL untuk login dan logout
  4. 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). Buat Pengguna
  5. Kunjungi halaman aplikasi untuk konfigurasi berikut, yang diperlukan saat mengkonfigurasi Apache APISIX OpenID Connect.
    1. App ID: ID klien OAuth, yaitu ID aplikasi, sesuai dengan client_id dan {YOUR_CLIENT_ID} di bawah.
    2. App secret: Rahasia klien OAuth, yaitu kunci aplikasi. Sesuai dengan client_secret dan {YOUR_CLIENT_SECRET} di bawah.
    3. Service_discovery_address: Alamat penemuan layanan aplikasi. Sesuai dengan {YOUR_DISCOVERY} di bawah. konfigurasi

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

  1. Buat direktori bernama apisix-2.7.
mkdir apisix-2.7
  1. 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.

  1. Ekstrak paket sumber rilis Apache APISIX.
tar zxvf apache-apisix-2.7-src.tgz -C apisix-2.7
  1. 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

  1. Jalankan perintah berikut untuk memulai Apache APISIX.

    apisix start
  2. Buat rute dan konfigurasi plugin OpenID Connect. Daftar konfigurasi OpenID Connect adalah sebagai berikut.

FieldNilai DefaultDeskripsi
client_idN/AID klien OAuth
client_secretN/AKunci rahasia klien OAuth
discoveryN/ATitik akhir penemuan layanan untuk penyedia identitas
scopeopenidRuang lingkup sumber daya yang perlu diakses
relmapisixTentukan informasi autentikasi header respons WWW-Authenticate
bearer_onlyfalseApakah memeriksa token di header permintaan
logout_path/logoutURI logout
redirect_urirequest_uriURI yang dikembalikan oleh penyedia identitas, defaultnya adalah alamat permintaan
timeout3Waktu timeout permintaan dalam detik
ssl_verifyfalseApakah memeriksa sertifikat ssl penyedia identitas
introspection_endpointN/AURL 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_keyN/AKunci publik untuk autentikasi token
token_signing_alg_values_expectedN/AAlgoritma untuk token autentikasi
set_access_token_headertrueApakah membawa token akses di header permintaan
access_token_in_authorization_headerfalseToken akses ditempatkan di header Authorization jika true, dan di header X-Access-Token jika false.
set_id_token_headerfalseTidak membawa token ID ke header permintaan X-ID-Token
set_userinfo_headerfalseApakah 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

  1. 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"). Akses Apache APISIX

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

  3. 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 melalui access_token_in_authorization_header dalam konfigurasi plugin.

    X-Access-Token

    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_header dalam konfigurasi plugin.

    X-Id-Token

    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_header dalam konfigurasi plugin.

    X-Userinfo

    Seperti yang dapat 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.

  4. Di "Audit Log - User Behavior Log" di konsol Authing, Anda dapat mengamati informasi login user1. Informasi Login

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.

Tags: