Cloud-native API Gateway memungkinkan Anda mengonfigurasi layanan otentikasi kustom untuk melakukan otentikasi terpadu bagi semua layanan backend. Dengan cara ini, Anda tidak perlu secara terpisah menghubungkan setiap layanan backend ke layanan otentikasi. Topik ini menjelaskan cara mengonfigurasi layanan otentikasi kustom untuk instance Cloud-native API Gateway.
Informasi latar belakang
Dalam banyak kasus, server melindungi keamanan komunikasi API yang diekspos secara eksternal berdasarkan token yang terkandung dalam permintaan klien. Format token ditentukan berdasarkan persyaratan bisnis.
Jika Anda menggunakan JSON Web Tokens (JWT), server dapat memvalidasi token dengan menggunakan kunci publik kapan saja dan di mana saja, tanpa perlu mengakses layanan otentikasi terpadu.
Jika Anda menggunakan token kustom, setelah server menerima permintaan, server harus mengakses layanan otentikasi terpadu untuk memvalidasi token. Ini membantu melindungi keamanan komunikasi API. Cloud-native API Gateway mendukung otentikasi kustom.
Contoh berikut menunjukkan bagaimana layanan otentikasi yang terintegrasi dengan instance Cloud-native API Gateway memproses permintaan.

Klien mengirimkan permintaan otentikasi, seperti permintaan logon, ke instance Cloud-native API Gateway.
Instance Cloud-native API Gateway meneruskan permintaan ke server otentikasi.
Server otentikasi membaca informasi otentikasi, seperti nama pengguna dan kata sandi, dalam permintaan otentikasi untuk memvalidasi permintaan. Setelah permintaan divalidasi, server otentikasi mengembalikan token ke instance Cloud-native API Gateway. Kemudian, instance Cloud-native API Gateway mengirimkan respons yang berisi token ke klien.
Klien mengirimkan permintaan bisnis, seperti permintaan yang berisi path /order. Permintaan tersebut berisi token yang dikembalikan oleh instance Cloud-native API Gateway.
Instance Cloud-native API Gateway membangun permintaan otentikasi dan mengirimkannya ke layanan otentikasi kustom. Permintaan otentikasi berisi path, metode HTTP, dan token. Path mencakup parameter query, dan metode HTTP mencakup GET dan POST. Anda harus mengonfigurasi header HTTP yang menyimpan token di Konsol Manajemen Cloud-native API Gateway. Anda dapat mengonfigurasi permintaan otentikasi untuk berisi badan permintaan bisnis berdasarkan persyaratan bisnis Anda.
Path dari permintaan otentikasi terdiri dari path API otentikasi layanan otentikasi kustom dan path dalam permintaan bisnis. Sebagai contoh, jika path API otentikasi layanan otentikasi kustom adalah /validateToken, maka path dari permintaan otentikasi adalah /validateToken/order.
Setelah layanan otentikasi menerima permintaan otentikasi, layanan otentikasi memvalidasi token dan mengotentikasi permintaan bisnis berdasarkan path yang terkandung dalam permintaan asli.
Jika layanan otentikasi dapat memodifikasi kode status HTTP yang dibawa dalam respons otentikasi, Anda dapat menentukan hasil otentikasi berdasarkan kode status HTTP.
Jika layanan otentikasi mengembalikan kode status HTTP 200, token valid dan diautentikasi untuk mengakses sumber daya backend yang diminta. Dalam hal ini, instance Cloud-native API Gateway meneruskan permintaan bisnis asli ke server backend yang dilindungi. Server backend mengembalikan respons ke instance Cloud-native API Gateway, dan kemudian instance Cloud-native API Gateway meneruskan respons ke klien. Penempatan pesanan selesai.
Jika layanan otentikasi mengembalikan kode status HTTP 401 atau 403, token tidak valid atau tidak diautentikasi untuk mengakses sumber daya backend yang diminta. Dalam hal ini, instance Cloud-native API Gateway meneruskan respons otentikasi ke klien. Penempatan pesanan gagal.
Jika layanan otentikasi hanya dapat mengembalikan kode status HTTP 200 karena batasan bisnis, Anda dapat menentukan hasil otentikasi berdasarkan nilai header HTTP bawaan
x-mse-external-authz-check-result.Jika layanan otentikasi mengembalikan
x-mse-external-authz-check-result=truedalam header respons, token valid atau diautentikasi untuk mengakses sumber daya backend.Dalam hal ini, instance Cloud-native API Gateway meneruskan permintaan bisnis asli ke server backend yang dilindungi. Server backend mengembalikan respons ke instance Cloud-native API Gateway, dan kemudian instance Cloud-native API Gateway meneruskan respons ke klien. Penempatan pesanan selesai.Jika layanan otentikasi mengembalikan
x-mse-external-authz-check-result=falsedalam header respons, token tidak valid atau tidak diautentikasi untuk mengakses sumber daya backend.Dalam hal ini, instance Cloud-native API Gateway meneruskan respons otentikasi ke klien. Penempatan pesanan gagal.
Buat layanan otentikasi kustom
Masuk ke Konsol API Gateway.
Di bilah navigasi sisi kiri, klik . Di bilah navigasi atas, pilih wilayah.
Di halaman Instance, klik nama instance API Gateway Cloud-native yang ingin dikelola.
Di pohon navigasi sisi kiri, pilih .
Di halaman Global Authentication, klik Create Authentication. Di panel Create Authentication, konfigurasikan parameter dan klik OK.
Parameter
Deskripsi
Enable
Aktifkan atau nonaktifkan otentikasi.
Authentication Name
Masukkan nama untuk layanan otentikasi kustom.
Authentication Type
Pilih Custom Authentication Service.
Authentication Service
Layanan backend yang digunakan untuk memverifikasi token dan izin. Anda dapat menambahkan layanan di halaman Manajemen Layanan. Untuk informasi lebih lanjut tentang cara menambahkan layanan, lihat Tambahkan layanan.
CatatanHanya layanan HTTP yang didukung. Layanan protokol lainnya seperti Dubbo tidak didukung.
Jika Kubernetes Service memiliki beberapa port, port pertama digunakan secara default. Jika Anda ingin menggunakan port lain, Anda perlu membuat Kubernetes Service tambahan di cluster Container Service for Kubernetes (ACK) dan hanya menggunakan port yang diinginkan.
Authentication API
Path API otentikasi yang disediakan oleh layanan otentikasi. Path mendukung metode pencocokan awalan.
Sebagai contoh, jika layanan otentikasi Anda dibangun berdasarkan Spring MVC dan path API otentikasi adalah /check, Anda harus menggunakan konfigurasi berikut untuk memproses permintaan yang berisi path /check/**.
@RequestMapping("/check/**") public ResponseEntity<RestResult<String>> check(){}Token Location
Header permintaan yang berisi token. Header Authorization atau Cookie dapat digunakan sebagai header permintaan. Anda dapat memilih Select atau Add Manually untuk menentukan lokasi token.
Allowed Headers in Authentication Request
Jika Anda ingin permintaan otentikasi berisi header selain Host, Method, Path, dan Content-Length dari permintaan bisnis yang dikirim oleh klien, Anda harus mengonfigurasi parameter ini.
CatatanSecara default, header Host, Method, Path, dan Content-Length terkandung dalam permintaan otentikasi. Anda tidak perlu menambahkannya secara manual.
Allow Headers in Authentication Response
Jika Anda perlu menambahkan header dalam respons otentikasi ke permintaan bisnis dari klien, Anda harus menentukan parameter ini.
CatatanJika header yang Anda konfigurasikan sudah ada dalam permintaan bisnis, nilai header akan ditimpa.
Allow Body in Authentication Request
Jika Anda memilih Allow Body in Authentication Request, permintaan otentikasi berisi badan permintaan bisnis.
Tetapkan parameter Maximum Body Size ke panjang maksimum badan permintaan bisnis yang dapat terkandung dalam permintaan otentikasi. Unit: byte.
Timeout Period
Waktu tunggu maksimum untuk layanan otentikasi mengembalikan hasil. Unit: detik. Nilai default: 10.
Mode
Nilai valid: Mode Longgar dan Mode Ketat. Kami merekomendasikan Anda memilih Mode Longgar.
Loose Mode: Jika layanan otentikasi tidak tersedia ketika koneksi ke layanan otentikasi gagal dibuat atau kode kesalahan 5xx dikembalikan, instance Cloud-native API Gateway masih menerima permintaan dari klien.
Strict Mode: Jika layanan otentikasi tidak tersedia ketika koneksi ke layanan otentikasi gagal dibuat atau kode kesalahan 5xx dikembalikan, instance Cloud-native API Gateway menolak permintaan dari klien.
Simple Conditions
Klik Simple Conditions di sebelah kanan Authorization. Otorisasi berbasis aturan sederhana mendukung Whitelist Mode dan Blacklist Mode.
Whitelist Mode: Permintaan dengan nama host dan path yang Anda tentukan dalam daftar putih tidak memerlukan otentikasi. Permintaan lainnya memerlukan otentikasi.
Blacklist Mode: Hanya permintaan dengan nama host dan path yang Anda tentukan dalam daftar hitam yang memerlukan otentikasi. Permintaan lainnya tidak memerlukan otentikasi.
Klik + Rule Condition untuk mengonfigurasi nama domain, path, dan header permintaan.
Domain Name: nama domain yang memerlukan akses ke instance Cloud-native API Gateway.
Path: path yang memerlukan akses ke instance Cloud-native API Gateway.
Path Match Condition: Anda dapat memilih Pencocokan Eksak, Pencocokan Awalan, atau Pencocokan Ekspresi Reguler.
Exact Match: masukkan path lengkap. Contoh: /app/v1/order.
Prefix Match: masukkan awalan path. Anda harus menambahkan tanda asterisk (*) di akhir sebagai karakter wildcard. Misalnya, untuk mencocokkan semua permintaan yang dimulai dengan /app, Anda harus menentukan /app/*.
Match Regular Expression: Masukkan ekspresi yang sesuai dengan sintaks Google RE2. Untuk informasi lebih lanjut, kunjungi Sintaks RE2.
Case sensitive: Jika Anda memilih opsi ini, nilai path bersifat sensitif huruf besar/kecil.
Header: header permintaan. Klik +Request Header untuk menambahkan beberapa header. Operator logika AND diterapkan pada header permintaan.
HeaderKey: kunci bidang header.
Condition: Kondisi yang digunakan untuk mencocokkan permintaan dengan header tertentu.
Equals To: Jika nilai kunci tertentu dalam set header sama dengan nilai yang ditentukan, permintaan dengan set header cocok.
Does Not Equal To: Jika nilai kunci tertentu dalam set header berbeda dari nilai yang ditentukan, permintaan dengan set header cocok.
Exists: Jika nilai yang ditentukan ada dalam set header, permintaan dengan set header cocok.
Does Not Exist: Jika nilai yang ditentukan tidak ada dalam set header, permintaan dengan set header cocok.
Contains: Jika nilai kunci tertentu dalam set header mengandung nilai yang ditentukan, permintaan dengan set header cocok.
Excludes: Jika nilai kunci tertentu dalam set header tidak mengandung nilai yang ditentukan, permintaan dengan set header cocok.
Prefix: Jika nilai kunci tertentu dalam set header menggunakan nilai yang ditentukan sebagai awalan, permintaan dengan set header cocok.
Suffix: Jika nilai kunci tertentu dalam set header menggunakan nilai yang ditentukan sebagai akhiran, permintaan dengan set header cocok.
Regular Expression: Jika nilai kunci tertentu dalam set header cocok dengan ekspresi reguler yang ditentukan, permintaan dengan set header cocok. Ekspresi reguler sesuai dengan sintaks Google RE2. Untuk informasi lebih lanjut, lihat Sintaks RE2.
Value: nilai bidang header.
Complex Conditions
Klik Complex Conditions di sebelah kanan Authorization.
Otorisasi berbasis aturan kompleks memungkinkan Anda mengonfigurasi struktur data izin Envoy dalam format YAML. Dengan cara ini, Anda dapat mengonfigurasi aturan otorisasi berdasarkan kombinasi kondisi AND, OR, dan NOT. Otentikasi dilakukan untuk permintaan yang memenuhi aturan otorisasi yang dikonfigurasi. Untuk permintaan yang tidak memenuhi aturan, sumber daya backend yang diminta dapat diakses tanpa otentikasi.
CatatanUntuk informasi lebih lanjut tentang bidang struktur data izin, lihat Dokumentasi Envoy.
Untuk informasi lebih lanjut tentang cara mengonfigurasi aturan kompleks, lihat bagian "Contoh otorisasi berbasis aturan kompleks" dari topik ini.
Kembali ke halaman Global Authentication untuk melihat informasi otentikasi. Jika informasi otentikasi yang dikonfigurasi tentang instance Cloud-native API Gateway ditampilkan, aturan otentikasi kustom dibuat untuk instance Cloud-native API Gateway.
Lihat dan kelola layanan otentikasi kustom
Masuk ke Konsol API Gateway.
Di bilah navigasi sisi kiri, klik . Di bilah navigasi atas, pilih wilayah.
Di halaman Instance, klik nama instance Cloud-native API Gateway yang ingin Anda kelola.
Di pohon navigasi sisi kiri, pilih .
Di halaman Global Authentication, temukan aturan otentikasi yang ingin Anda kueri dan klik Details di kolom Actions. Di halaman yang muncul, lihat informasi di bagian Basic Information dan Authentication Configuration serta lihat dan kelola informasi di bagian Authorization Information.

Untuk membuat aturan otorisasi, klik Create Authorization di bagian Authorization Information. Di panel Buat Otorisasi, konfigurasikan parameter Request Domain Name, Request Path, dan Match Mode dan klik OK.
Apa yang harus dilakukan selanjutnya
Anda dapat melakukan operasi berikut pada aturan otentikasi instance gateway:
Aktifkan aturan otentikasi: Di halaman Global Authentication, temukan aturan otentikasi yang ingin Anda kelola dan klik Enable di kolom Actions.
Nonaktifkan aturan otentikasi: Di halaman Global Authentication, temukan aturan otentikasi yang ingin Anda kelola dan klik Disable di kolom Actions.
Ubah aturan otentikasi: Di halaman Global Authentication, temukan aturan otentikasi yang ingin Anda kelola dan klik Edit di kolom Actions.
Hapus aturan otentikasi: Di halaman Global Authentication, temukan aturan otentikasi yang ingin Anda kelola dan klik Delete di kolom Actions.
Hanya aturan otentikasi yang dinonaktifkan yang dapat dihapus.
Contoh otorisasi berbasis aturan kompleks
Gunakan ekspresi reguler untuk mencocokkan nama domain
Dalam contoh ini, otentikasi dilakukan hanya untuk permintaan yang memenuhi aturan pencocokan awalan path dari nama domain exampleA.com dan exampleB.com. Ekspresi reguler yang ditentukan oleh bidang regex digunakan untuk pencocokan eksak, bukan pencocokan sebagian.
Permintaan dari nama domain test.exampleA.com tidak memenuhi aturan otentikasi, dan akses tanpa otentikasi didukung.
Ekspresi reguler sesuai dengan sintaks Google RE2. Untuk informasi lebih lanjut, lihat Sintaks RE2.
Untuk informasi lebih lanjut tentang bidang struktur data izin, lihat Dokumentasi Envoy.
permissions:
# and_rules menunjukkan bahwa otentikasi dilakukan ketika semua aturan berikut terpenuhi pada saat yang bersamaan.
- and_rules:
rules:
- url_path:
# Awalan path.
path:
prefix: /
- header:
# Ekspresi reguler.
safe_regex_match:
regex: "(exampleA\\.com|exampleB\\.com)"
# Anda dapat menggunakan header ":authority" untuk mendapatkan nama domain berdasarkan spesifikasi pseudo-header HTTP.
name: ":authority"Gunakan kombinasi kondisi AND, OR, dan NOT
Otentikasi diperlukan untuk permintaan berikut:
Semua permintaan dengan path yang memiliki awalan exampleA.com/api, kecuali:
exampleA.com/api/appa/bbb
exampleA.com/api/appb/ccc
Semua permintaan dengan path di bawah nama domain exampleB.com, kecuali:
exampleB.com/api/appa/bbb
exampleB.com/api/appb/ccc
Path yang memiliki awalan exampleB.com/api/appc, kecuali:
exampleB.com/api/appc/bbb/ccc
exampleB.com/api/appc/ccc/ddd
Gambar berikut menunjukkan logika otentikasi keseluruhan.

Kode berikut menunjukkan konfigurasi dalam format YAML:
permissions:
# or_rules menunjukkan bahwa otentikasi dilakukan jika salah satu aturan berikut terpenuhi.
- or_rules:
rules:
# and_rules menunjukkan bahwa aturan otentikasi valid jika semua aturan berikut terpenuhi pada saat yang bersamaan.
# Aturan 1
- and_rules:
rules:
- url_path:
path:
exact: /api/appc/bbb/ccc
- header:
exact_match: "exampleB.com"
name: ":authority"
# Aturan 2
- and_rules:
rules:
- url_path:
path:
exact: /api/appc/ccc/ddd
- header:
exact_match: "exampleB.com"
name: ":authority"
- and_rules:
rules:
# Aturan 3
- url_path:
path:
prefix: /api/
# not_rule menunjukkan bahwa aturan otentikasi hanya valid ketika konfigurasi berikut tidak terpenuhi.
# Aturan 4
- not_rule:
url_path:
path:
exact: /api/appa/bbb
# Aturan 5
- not_rule:
url_path:
path:
exact: /api/appb/ccc
- header:
exact_match: "exampleA.com"
name: ":authority"
- and_rules:
rules:
# Aturan 6
- url_path:
path:
prefix: /
# not_rule menunjukkan bahwa aturan otentikasi hanya valid ketika konfigurasi berikut tidak terpenuhi.
# Aturan 7
- not_rule:
url_path:
path:
exact: /api/appa/bbb
# Aturan 8
- not_rule:
url_path:
path:
exact: /api/appb/ccc
# Aturan 9
- not_rule:
url_path:
path:
prefix: /api/appc/
- header:
exact_match: "exampleB.com"
name: ":authority"