Gateway cloud-native memungkinkan Anda mengonfigurasi layanan otentikasi kustom untuk otentikasi terpadu di seluruh layanan backend Anda, sehingga menghilangkan kebutuhan untuk menghubungkan setiap layanan backend ke layanan otentikasi secara terpisah. Topik ini menjelaskan cara mengonfigurasi layanan otentikasi kustom untuk gateway cloud-native Anda.
Informasi latar belakang
Dalam sebagian besar kasus, server menggunakan token dari permintaan klien untuk mengamankan komunikasi pada operasi API yang diekspos secara eksternal. Format token ditentukan oleh skenario bisnis.
Jika Anda menggunakan Token Web JSON (JWT), server dapat memverifikasi tanda tangan token kapan saja menggunakan kunci publik tanpa perlu mengakses layanan otentikasi terpadu.
Jika Anda menggunakan token kustom, server harus mengakses layanan otentikasi terpadu untuk melakukan otentikasi setelah menerima permintaan. Proses ini membantu melindungi keamanan komunikasi API. Gateway cloud-native mendukung jenis otentikasi kustom ini.
Diagram berikut menggambarkan bagaimana layanan otentikasi yang terintegrasi dengan gateway cloud-native memproses permintaan.

Klien mengirim permintaan otentikasi, seperti operasi log masuk, ke gateway.
Gateway meneruskan permintaan tersebut ke layanan otentikasi.
Layanan otentikasi membaca informasi otentikasi, seperti nama pengguna dan kata sandi, dari permintaan untuk mengotentikasinya. Setelah otentikasi berhasil, layanan otentikasi mengembalikan token ke gateway. Gateway kemudian mengirim tanggapan yang berisi token tersebut ke klien.
Klien mengirim permintaan bisnis, seperti permintaan ke path `/order`. Permintaan tersebut menyertakan token yang dikeluarkan setelah otentikasi identitas berhasil pada langkah sebelumnya.
Gateway membuat permintaan otentikasi dan mengirimkannya ke layanan otentikasi kustom. Permintaan otentikasi ini berisi path (termasuk parameter kueri), metode HTTP (seperti GET atau POST), dan token dari permintaan bisnis asli. Anda harus mengonfigurasi Header HTTP yang menyimpan token di Konsol MSE. Anda juga dapat mengonfigurasi permintaan otentikasi agar membawa badan permintaan asli jika diperlukan.
Path permintaan otentikasi merupakan kombinasi dari path API otentikasi dari layanan otentikasi kustom dan path dari permintaan bisnis. Misalnya, jika path API otentikasi adalah `/validateToken` dan path permintaan bisnis adalah `/order`, maka path akhir permintaan otentikasi menjadi `/validateToken/order`.
Setelah layanan otentikasi menerima permintaan otentikasi, layanan tersebut dapat memeriksa validitas token dan memberikan otorisasi permintaan bisnis berdasarkan path permintaan asli.
Jika layanan otentikasi Anda dapat mengubah kode status HTTP dalam tanggapannya, Anda dapat menentukan hasil otentikasi berdasarkan kode status tersebut.
Jika layanan otentikasi mengembalikan kode status HTTP 200, token dianggap valid dan diizinkan untuk mengakses sumber daya backend yang diminta. Gateway kemudian meneruskan permintaan bisnis asli ke layanan backend yang dilindungi. Layanan backend mengembalikan tanggapan ke gateway, yang kemudian meneruskan tanggapan tersebut ke klien, sehingga pemesanan berhasil diselesaikan.
Jika layanan otentikasi mengembalikan kode status HTTP 401 atau 403, token dianggap tidak valid atau tidak diizinkan untuk mengakses sumber daya backend yang diminta. Gateway kemudian meneruskan tanggapan otentikasi langsung ke klien, dan pemesanan gagal.
Jika batasan bisnis mengharuskan layanan otentikasi Anda hanya mengembalikan kode status HTTP 200, Anda dapat menggunakan Header HTTP bawaan
x-mse-external-authz-check-result.Jika nilai header
x-mse-external-authz-check-resultdalam tanggapan layanan otentikasi adalahtrue, token dianggap valid dan diizinkan. Gateway kemudian meneruskan permintaan bisnis asli ke layanan backend yang dilindungi. Layanan backend mengembalikan tanggapan ke gateway, yang kemudian meneruskan tanggapan tersebut ke klien, sehingga pemesanan berhasil diselesaikan.Jika nilai header
x-mse-external-authz-check-resultdalam tanggapan layanan otentikasi adalahfalse, token dianggap tidak valid atau tidak diizinkan. Gateway kemudian meneruskan tanggapan otentikasi langsung ke klien, dan pemesanan gagal.
Buat layanan otentikasi kustom
Masuk ke Konsol MSE.
Di panel navigasi sebelah kiri, pilih Cloud-native Gateway > Gateways. Di bilah navigasi atas, pilih wilayah.
Pada halaman Gateways, klik ID gateway.
Di panel navigasi sebelah kiri, pilih Security Management > Global Authentication.
Pada halaman Global Authentication, klik Create Authentication. Pada panel Create Authentication yang muncul, konfigurasikan parameter dan klik OK.
Item Konfigurasi
Deskripsi
Authentication Name
Nama layanan otentikasi kustom.
Authentication Type
Pilih Custom Authentication Service.
Authentication Service
Layanan backend yang digunakan untuk memverifikasi token dan izin. Anda dapat menambahkan layanan ini di Manajemen Layanan. Untuk informasi selengkapnya, lihat Add a service.
CatatanHanya layanan yang menggunakan protokol HTTP yang didukung. Layanan yang menggunakan protokol lain, seperti Dubbo, tidak didukung.
Jika Kubernetes Service memiliki beberapa port, port pertama digunakan secara default. Untuk menggunakan port yang berbeda, Anda harus membuat Kubernetes Service tambahan di Container Service for Kubernetes (ACK) yang hanya menggunakan port yang diinginkan.
Authentication API
Path API otentikasi yang disediakan oleh layanan otentikasi. Path mendukung pencocokan awalan.
Sebagai contoh, jika layanan otentikasi Anda dibangun di atas 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
Menentukan header permintaan yang berisi token, seperti Authorization atau Cookie. Anda dapat memilih Drop-down List atau Manual Input untuk menentukan lokasi token.
Headers To Be Carried In Authentication Requests
Jika Anda ingin permintaan otentikasi membawa header tambahan dari permintaan klien, Anda harus menentukannya di bidang ini.
CatatanSecara default, header Host, Method, Path, dan Content-Length ditambahkan. Anda tidak perlu menambahkannya secara manual.
Headers To Be Retained From Authentication Responses
Untuk menambahkan header dari tanggapan otentikasi ke permintaan klien, Anda harus menentukannya di bidang ini.
CatatanJika permintaan klien sudah berisi header tersebut, nilainya akan ditimpa.
Allow Authentication Requests To Carry The Body
Jika Anda memilih Allow Authentication Requests To Carry The Body, permintaan otentikasi akan menyertakan badan permintaan asli.
Maximum Body Bytes menentukan ukuran maksimum, dalam byte, dari badan permintaan otentikasi.
Timeout
Waktu maksimum, dalam detik, untuk menunggu layanan otentikasi mengembalikan hasil. Periode timeout default adalah 10 detik.
Mode
Mode longgar dan mode ketat didukung. Kami merekomendasikan Anda menggunakan mode longgar.
Loose Mode: Jika layanan otentikasi tidak tersedia (misalnya, koneksi gagal atau kesalahan 5xx dikembalikan), gateway menerima permintaan dari klien.
Strict Mode: Jika layanan otentikasi tidak tersedia (misalnya, koneksi gagal atau kesalahan 5xx dikembalikan), gateway menolak permintaan dari klien.
Simple Conditional Authorization
Di sebelah kanan Authorization, klik Simple Condition. Otorisasi bersyarat sederhana mendukung dua mode: Whitelist Mode dan Blacklist Mode.
Whitelist Mode: Permintaan dengan host dan path yang Anda tentukan dalam daftar putih tidak memerlukan otentikasi. Semua permintaan lain memerlukan otentikasi.
Blacklist Mode: Hanya permintaan dengan host dan path yang Anda tentukan dalam blacklist yang memerlukan otentikasi. Semua permintaan lain tidak memerlukan otentikasi.
Klik + Rule Condition untuk mengonfigurasi nama domain, path, dan header permintaan.
Domain Names: Nama domain yang akan diakses (host).
Path: Path operasi API yang akan diakses.
Path Match Condition: Path mendukung pencocokan eksak, pencocokan awalan, dan pencocokan ekspresi reguler.
Exact Match: Masukkan path lengkap, seperti `/app/v1/order`.
Prefix Match: Masukkan awalan path yang diakhiri dengan tanda bintang (*). Sebagai contoh, untuk mencocokkan semua permintaan yang dimulai dengan `/app`, atur nilainya menjadi `/app/*`.
Regular Expression Match: Sintaks ekspresi reguler harus mengikuti spesifikasi Google RE2. Untuk informasi selengkapnya, lihat RE2 syntax.
Case Sensitive: Jika Anda memilih kotak centang ini, nilai path peka terhadap huruf besar/kecil.
Request Header: Header permintaan. Klik + Request Header untuk mengonfigurasi beberapa header. Header dievaluasi menggunakan logika AND.
HeaderKey: Nama bidang header.
Condition: Kondisi pencocokan yang didukung untuk header.
Equal To: Nilai kunci yang ditentukan dalam kumpulan header permintaan sama dengan nilai yang dimasukkan.
Not Equal To: Nilai kunci yang ditentukan dalam kumpulan header permintaan tidak sama dengan nilai yang dimasukkan.
Exist: Kunci yang dimasukkan ada dalam kumpulan header permintaan.
Not Exist: Kunci yang dimasukkan tidak ada dalam koleksi header permintaan.
Contain: Nilai kunci yang ditentukan dalam kumpulan header permintaan berisi nilai yang dimasukkan.
Not Contain: Nilai kunci yang ditentukan dalam kumpulan header permintaan tidak berisi nilai yang dimasukkan.
Prefix: Nilai kunci yang ditentukan dalam kumpulan header permintaan diawali dengan nilai yang dimasukkan.
Suffix: Nilai kunci yang ditentukan dalam kumpulan header permintaan diakhiri dengan nilai yang dimasukkan.
Regular Expression: Nilai kunci yang ditentukan dalam kumpulan header permintaan cocok dengan ekspresi reguler yang dimasukkan. Sintaks ekspresi reguler harus mengikuti spesifikasi Google RE2. Untuk informasi selengkapnya, lihat RE2 syntax.
Value: Nilai bidang header.
Complex Conditional Authorization
Di sebelah kanan Authorization, klik Complex Condition.
Otorisasi bersyarat kompleks memungkinkan Anda mengonfigurasi struktur data izin Envoy dalam format YAML. Hal ini memungkinkan Anda mengonfigurasi aturan otorisasi menggunakan kombinasi logika kondisional AND, OR, dan NOT. Otentikasi hanya dilakukan untuk permintaan yang memenuhi kondisi yang dikonfigurasi. Permintaan yang tidak memenuhi kondisi dapat mengakses sumber daya backend yang diminta tanpa otentikasi.
CatatanUntuk informasi selengkapnya tentang bidang struktur data izin, lihat dokumentasi resmi Envoy.
Untuk contoh konfigurasi, lihat Example of complex rule-based authorization.
Kembali ke halaman Global Authentication untuk melihat informasi otentikasi. Jika informasi otentikasi untuk gateway ditampilkan, aturan otentikasi gateway kustom telah berhasil dibuat.
Lihat dan kelola layanan otentikasi kustom
Masuk ke Konsol MSE.
Di panel navigasi sebelah kiri, pilih Cloud-native Gateway > Gateways. Di bilah navigasi atas, pilih wilayah.
Pada halaman Gateways, klik ID gateway.
Di panel navigasi sebelah kiri, pilih Security Management > Global Authentication.
Pada halaman Global Authentication, temukan aturan otentikasi yang dituju dan klik Details di kolom Actions. Anda dapat melihat Basic Information dan Authentication Configuration layanan tersebut. Anda juga dapat melihat dan mengelola Authorization Information.

Untuk menambahkan aturan otorisasi, buka area Authorization Information dan klik Create Authorization Information. Di kotak dialog, masukkan Request Domain Name dan Request Path, pilih Match Mode, lalu klik OK.
Apa yang harus dilakukan selanjutnya
Anda dapat melakukan operasi berikut pada aturan otentikasi gateway cloud-native:
Mengaktifkan aturan otentikasi: Pada halaman Global Authentication, temukan aturan otentikasi yang ingin Anda kelola dan klik Enable di kolom Actions.
Menonaktifkan aturan otentikasi: Pada halaman Global Authentication, temukan aturan otentikasi yang ingin Anda kelola dan klik Disable di kolom Actions.
Memodifikasi aturan otentikasi: Pada halaman Global Authentication, temukan aturan otentikasi yang ingin Anda kelola dan klik Edit di kolom Actions.
Menghapus aturan otentikasi: Pada halaman Global Authentication, temukan aturan otentikasi yang ingin Anda kelola dan klik Delete di kolom Actions.
Anda hanya dapat menghapus aturan otentikasi jika aturan tersebut dinonaktifkan.
Contoh otorisasi berbasis aturan kompleks
Gunakan ekspresi reguler untuk mencocokkan nama domain
Pada contoh ini, otentikasi hanya dilakukan untuk permintaan yang cocok dengan aturan awalan path untuk nama domain `exampleA.com` dan `exampleB.com`. Ekspresi reguler yang ditentukan oleh bidang `regex` digunakan untuk pencocokan eksak, bukan pencocokan parsial.
Permintaan untuk nama domain `test.exampleA.com` tidak memenuhi aturan otentikasi, sehingga diizinkan mengakses tanpa otentikasi.
Ekspresi reguler mematuhi sintaks Google RE2. Untuk informasi selengkapnya, lihat RE2 syntax.
Untuk informasi selengkapnya tentang bidang struktur data izin, lihat dokumentasi resmi Envoy.
permissions:
# and_rules menunjukkan bahwa otentikasi dilakukan ketika semua aturan berikut dipenuhi secara bersamaan.
- and_rules:
rules:
- url_path:
# Awalan path.
path:
prefix: /
- header:
# Ekspresi reguler.
safe_regex_match:
regex: "(exampleA\\.com|exampleB\\.com)"
# Spesifikasi Header Pseudo-HTTP didukung. Anda dapat menggunakan header ":authority" untuk mendapatkan nama domain.
name: ":authority"Gunakan kombinasi kondisi AND, OR, dan NOT
Contoh ini mencakup kondisi-kondisi berikut:
Permintaan dengan path yang memiliki awalan `exampleA.com/api` memerlukan otentikasi, dengan pengecualian berikut:
`exampleA.com/api/appa/bbb` tidak memerlukan otentikasi.
`exampleA.com/api/appb/ccc` tidak memerlukan otentikasi.
Semua permintaan di bawah `exampleB.com` memerlukan otentikasi, dengan pengecualian berikut:
`exampleB.com/api/appa/bbb` tidak memerlukan otentikasi.
`exampleB.com/api/appb/ccc` tidak memerlukan otentikasi.
Permintaan dengan path yang memiliki awalan `exampleB.com/api/appc` tidak memerlukan otentikasi, dengan pengecualian berikut:
`exampleB.com/api/appc/bbb/ccc` memerlukan otentikasi.
`exampleB.com/api/appc/ccc/ddd` memerlukan otentikasi.
Logika diatur seperti yang ditunjukkan pada gambar berikut:

Kode berikut menunjukkan konfigurasi dalam format YAML:
permissions:
# or_rules menunjukkan bahwa otentikasi dilakukan jika salah satu aturan berikut dipenuhi.
- or_rules:
rules:
# and_rules menunjukkan bahwa aturan ini dipenuhi hanya jika semua aturan berikut dipenuhi.
# 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 ini dipenuhi hanya jika konfigurasi berikut TIDAK dipenuhi.
# 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 ini dipenuhi hanya jika konfigurasi berikut TIDAK dipenuhi.
# 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"