Autentikasi API Gateway
Yong Qian
November 25, 2022
Pentingnya Autentikasi dan Otorisasi untuk API Gateway
Fungsi inti dari sebuah API gateway dapat disimpulkan sebagai menghubungkan konsumen API dan penyedia API.
Dalam praktiknya, kecuali beberapa API yang mengizinkan akses anonim, penyedia sering membatasi konsumen: hanya konsumen yang memenuhi syarat yang dapat mengakses API. Selain itu, penyedia mungkin tidak memiliki kebijakan akses yang sama untuk konsumen yang berbeda, misalnya, Konsumen A dan B dapat mengakses API /send_mail, tetapi frekuensi panggilan per menit perlu dihitung secara berbeda.
Dari dua poin di atas, kita dapat melihat bahwa sangat penting untuk mengidentifikasi dan memverifikasi identitas Konsumen API di tingkat API gateway. Berikut ini, kami akan memperkenalkan bagaimana API gateway open-source Apache APISIX mengimplementasikan autentikasi untuk konsumen dan metode autentikasi yang banyak diadopsi oleh perusahaan, kemudian lebih lanjut memperkenalkan bagaimana sistem autentikasi pengguna APISIX dapat digunakan bersama dengan fitur keamanan lainnya untuk lebih meningkatkan perlindungan keamanan API gateway.

Autentikasi dan Otorisasi Apache APISIX
Proxy HTTP tradisional hanya dapat mengidentifikasi peminta berdasarkan cara kasar seperti domain permintaan dan IP klien, yang tidak cukup untuk sebuah API gateway. Kita membutuhkan metode autentikasi yang lebih halus untuk memenuhi kebutuhan bisnis yang semakin kompleks. Salah satu keunggulan utama APISIX dibandingkan proxy tradisional adalah kemampuannya dalam plugin yang fleksibel, termasuk kumpulan plugin untuk autentikasi pengguna yang dapat dibagi menjadi dua kategori tergantung pada metode implementasinya:
- Antarmuka dengan Layanan Autentikasi Eksternal

- Autentikasi Gateway Internal oleh Objek Consumer yang Dirancang oleh APISIX

Kedua metode autentikasi ini akan diperkenalkan secara bergantian.
Antarmuka dengan Layanan Autentikasi Eksternal
Sebelum perusahaan mengadopsi API gateway, seringkali ada layanan autentikasi terpisah yang sudah diterapkan dalam sistem. Jadi, bagaimana kita dapat mengantarmukakan APISIX dengan layanan autentikasi yang sudah ada? APISIX menyediakan serangkaian plugin yang bekerja dengan mengantarmukakan berbagai layanan autentikasi eksternal dan mempercayakan mereka untuk menyelesaikan autentikasi.
Misalnya, kita dapat menggunakan plugin openid-connect untuk mengantarmukakan dengan layanan autentikasi apa pun yang mendukung protokol OIDC. Berikut adalah contoh konfigurasi untuk mengantarmukakan dengan layanan keycloak:
curl http://127.0.0.1:9180/apisix/admin/routes -H "X-Api-Key: your-API-key" -XPOST -d ' { "uri":"/*", "plugins":{ "openid-connect":{ "client_id":"apisix", // Dibuat saat keycloak membuat klien "client_secret":"d5c42c50-3e71-4bbe-aa9e-31083ab29da4", "discovery":"http://keycloak:8080/auth/realms/apisix_test_realm/.well-known/openid-configuration", // Endpoint OpenID keycloak "scope":"openid profile", "bearer_only":false, "realm":"apisix_test_realm", "introspection_endpoint_auth_method":"client_secret_post", "redirect_uri":"http://127.0.0.1:9080/" } }, "upstream":{ ... } }'
Autentikasi Gateway Internal
Consumer

Ketika permintaan dari berbagai sumber tiba di API gateway, gateway harus mengidentifikasi pemanggil ini. Apache APISIX mengusulkan konsep "Consumer" untuk mewakili pemanggil dari suatu jenis layanan.
Objek Consumer memerlukan konfigurasi plugin autentikasi untuk digunakan. Ambil contoh plugin key-auth yang paling sederhana:
$ curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: your-API-key' -X PUT -i -d ' { "username": "jack", "plugins": { "key-auth": { "key": "auth-jack" } }'
Konfigurasi di atas berarti bahwa ketika permintaan membawa kunci yang ditentukan (auth-jack), permintaan saat ini akan dikaitkan dengan Consumer - jack. Seperti yang dapat Anda lihat, plugin autentikasi yang dikonfigurasi pada Consumer sebenarnya adalah kredensial identitas di bawah mekanisme autentikasi yang ditentukan. Dalam plugin key-auth, kunci adalah kredensial yang mengidentifikasi seorang konsumen, mirip dengan nama pengguna dan kata sandi dari plugin basic-auth.
Mengonfigurasi Plugin Autentikasi untuk Rute
Setelah kita mengaitkan informasi kredensial dengan konsumen tertentu melalui Consumer, kita juga perlu mengaktifkan plugin autentikasi pada rute yang sesuai:
$ curl http://127.0.0.1:9180/apisix/admin/routes/orders -H 'X-API-KEY: your-API-key' -X PUT -i -d ' { "uri": "/orders", "plugins": { "key-auth": { "header": "Authorization" } } }'
Konfigurasi di atas berarti bahwa plugin key-auth diaktifkan pada rute /orders, dan efek autentikasinya adalah sebagai berikut:
$ curl http://127.0.0.1:9080/orders -H 'Authorization: auth-jack' -i HTTP/1.1 200 OK ... $ curl http://127.0.0.1:9080/orders -H 'Authorization: wrong-key' -i HTTP/1.1 401 Unauthorized ... {"message":"Invalid API key in request"}
Ketika permintaan dari pengguna mencapai rute ini, APISIX akan mencoba mendapatkan kunci yang diberikan pengguna melalui header Authorization. Jika tidak diperoleh, atau kunci yang diperoleh tidak sah, maka permintaan akan langsung ditolak oleh gateway, sehingga melindungi layanan upstream.
Dapat dilihat bahwa dalam dua metode autentikasi di atas, plugin autentikasi berada di inti dari seluruh sistem, yang kekayaannya secara langsung memengaruhi pilihan pengguna untuk mencapai autentikasi dengan API gateway. Berikut adalah beberapa metode autentikasi utama dan kelebihan serta kekurangannya masing-masing untuk referensi Anda.
Metode Autentikasi Utama
Autentikasi dan otorisasi, mekanisme dasar yang telah ada sejak kita memasuki dunia komputer, telah berkembang menjadi bidang yang sangat beragam setelah bertahun-tahun iterasi. Mekanisme plugin APISIX telah sangat mengurangi biaya pengembangan untuk mengimplementasikan berbagai metode autentikasi. Berikut adalah beberapa metode autentikasi utama yang sudah didukung oleh APISIX:
Key Auth
Key Auth adalah yang paling sederhana dari semua plugin autentikasi, tetapi memiliki banyak aplikasi dalam skenario dunia nyata, seperti lisensi untuk perangkat lunak berbayar, token untuk mengidentifikasi pengembang di platform API terbuka, dll., yang semuanya dapat dengan mudah diimplementasikan dengan Key Auth. Selain itu, berdasarkan kemampuan konfigurasi dan alokasi yang sepenuhnya dinamis dari APISIX, kunci dapat dibuat dan dicabut dengan cepat, berlaku secara real-time.
Basic Auth
Basic Auth adalah metode autentikasi berdasarkan nama pengguna dan kata sandi, yang sering digunakan dalam skenario login web. Misalnya, admin backend sebuah situs web dapat digunakan setelah admin login, di mana kita dapat menggunakan Basic Auth untuk melakukan autentikasi.
LDAP
LDAP (Lightweight Directory Access Protocol) adalah protokol akses direktori ringan berdasarkan standar X.500, menyediakan kontrol akses dan pemeliharaan direktori informasi terdistribusi melalui protokol IP. Dengan LDAP, pengembang aplikasi dan operasi dapat mengontrol akses pengguna ke sumber daya pada tingkat yang lebih granular. Dengan plugin ldap-auth dari APISIX, Anda dapat dengan mudah mengantarmukakan dengan platform yang mengimplementasikan protokol LDAP, seperti Active Directory Microsoft, atau OpenLDAP Server untuk platform Linux, untuk mengontrol akses Consumer ke rute tertentu secara halus.
OIDC
OpenID adalah sistem autentikasi online terdesentralisasi. Untuk situs yang mendukung OpenID, pengguna tidak perlu mengingat token autentikasi tradisional seperti nama pengguna dan kata sandi. Sebaliknya, mereka hanya perlu mendaftar terlebih dahulu ke situs web yang bertindak sebagai penyedia identitas OpenID (IdP), dan kemudian dapat menggunakan akun ini untuk masuk ke semua aplikasi yang mengantarmukakan dengan penyedia tersebut, misalnya, untuk mengautentikasi pengguna sistem kita sendiri melalui akun layanan terkenal seperti Google atau Facebook.
Untuk OIDC, APISIX menyediakan plugin openid-connect, yang dapat digunakan untuk mengantarmukakan dengan layanan autentikasi yang mendukung protokol OIDC.
Forward Auth
Ketika plugin autentikasi standar APISIX tidak memenuhi kebutuhan Anda saat ini, atau jika layanan autentikasi khusus dan protokol non-standar telah diterapkan dalam sistem Anda, Anda dapat mempertimbangkan untuk menggunakan plugin forward-auth. Dengan plugin ini, Anda dapat meneruskan permintaan pengguna ke layanan autentikasi melalui HTTP dan mengembalikan kesalahan kustom atau mengarahkan pengguna ke halaman autentikasi jika layanan autentikasi merespons dengan status non-normal (kode kesalahan selain 20x).
Dengan kekuatan plugin forward-auth, logika autentikasi dan otorisasi dapat dengan sangat cerdik dipindahkan ke layanan eksternal khusus dengan protokol non-standar.
Hubungan dengan Plugin Lain Setelah Autentikasi
Autentikasi pengguna hanyalah langkah pertama dalam mengamankan API dengan APISIX. Menggabungkan kemampuan autentikasi dengan plugin keamanan lainnya akan lebih meningkatkan kemampuan keamanan gateway.
ACL (consumer-restriction)
Dalam sistem backend yang kompleks, mungkin ada beberapa API yang memiliki batasan keamanan yang lebih tinggi daripada yang lain, yang tidak hanya memblokir pengguna anonim tetapi juga membatasi pengguna yang sudah diautentikasi, misalnya, hanya mengizinkan pengguna dalam daftar putih untuk mengakses API manajemen pengguna.

Dalam kasus ini, kita dapat menggunakan plugin consumer-restriction yang disediakan oleh APISIX untuk mengimplementasikan mekanisme kontrol akses.
$ curl http://127.0.0.1:9180/apisix/admin/routes -H 'X-API-KEY: your-API-key' -X POST -i -d ' { "uri": "/api/v1/users/admin", "plugins": { "key-auth": {}, "consumer-restriction": { "whitelist": [ "Rose", "Peter ] } }, "upstream": { ... }, }'
Rute di atas membatasi rute /api/v1/users/admin untuk memerlukan autentikasi key auth melalui plugin key-auth dan consumer-restriction, dan hanya Rose dan Peter yang dapat mengaksesnya.
Pembatasan Laju (limit-count)
Kami telah menjelaskan sebelumnya bahwa Anda dapat mengaitkan kredensial pengguna dengan konsumen dengan mengonfigurasi plugin autentikasi di Consumer, tetapi faktanya adalah objek Consumer APISIX tidak hanya dapat memasang plugin autentikasi, tetapi juga plugin apa pun seperti Route dan Service.
Misalnya, dalam aplikasi nyata, kebijakan pembatasan laju seringkali tidak statis tetapi dipersonalisasi. Seringkali diminta bahwa pemanggil dengan tingkat layanan yang berbeda memiliki kebijakan pembatasan laju API yang berbeda. Namun, permintaan seperti itu tidak dapat diselesaikan dengan memasang plugin pembatasan laju pada rute. Oleh karena itu, kita perlu memasang plugin pembatasan laju pada Consumer dan menentukan kebijakan pembatasan laju yang ditargetkan untuk setiap konsumen.
$ curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: your-API-key' -X PUT -i -d ' { "username": "jack", "plugins": { "key-auth": { "key": "jack" }, "limit-count": { "count": 200, "time_window": 60, "rejected_code": 503, "key": "$consumer_name", } }' $ curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: your-API-key' -X PUT -i -d ' { "username": "rose", "plugins": { "key-auth": { "key": "rose" }, "limit-count": { "count": 1000, "time_window": 60, "rejected_code": 503, "key": "$consumer_name", } }'
Dengan konfigurasi di atas, kami menentukan kebijakan pembatasan laju yang berbeda untuk jack dan rose, dengan rose memiliki kuota permintaan yang lebih tinggi yaitu 1000 dalam 60 detik, sedangkan jack hanya memiliki 200.
Ringkasan
Sebagai kemampuan yang tidak dapat diabaikan dari API gateway, autentikasi dan otorisasi adalah salah satu faktor penting yang dipertimbangkan pengguna saat memilih API gateway.
Apache APISIX, gateway open-source yang diperkenalkan dalam artikel ini, mencakup semua metode autentikasi utama dan dapat memenuhi kebutuhan pengguna perusahaan untuk autentikasi dan otorisasi. APISIX juga memiliki keunggulan berikut:
- Plugin autentikasi siap pakai yang kaya
- Mendukung metode autentikasi internal dan eksternal, yang dapat dipilih secara bebas oleh pengguna
- Mendukung pengembangan sekunder, mudah untuk mengantarmukakan dengan pusat autentikasi kustom
Manfaat ini dapat membantu perusahaan lebih mudah menerapkan autentikasi dan otorisasi di tingkat gateway dan memperkuat keamanan API.
Selamat mempelajari lebih lanjut tentang Apache APISIX. Anda dapat menghubungi kami di https://api7.ai/contact.