Forward-Auth, Pilihan Lain untuk Fungsi Autentikasi

API7.ai

January 26, 2022

Ecosystem

Forward Auth dengan cerdas memindahkan logika autentikasi dan otorisasi ke layanan eksternal khusus, di mana gateway meneruskan permintaan pengguna ke layanan autentikasi dan memblokir permintaan asli serta mengganti hasilnya ketika layanan autentikasi merespons dengan status non-20x. Dengan cara ini, dimungkinkan untuk mengembalikan kesalahan kustom atau mengarahkan pengguna ke halaman autentikasi jika autentikasi gagal.

Prinsip

Prinsip Plugin

Prinsip dan alur dari forward-auth plugin di Apache APISIX ditunjukkan pada gambar di atas dan dirangkum dalam langkah-langkah berikut.

  • Langkah 1: Sebuah permintaan dibuat oleh klien ke APISIX
  • Langkah 2: APISIX membuat permintaan ke layanan autentikasi yang dikonfigurasi oleh pengguna
  • Langkah 3: Layanan autentikasi merespons (status 2xx atau status pengecualian)
  • Langkah 4: Berdasarkan respons layanan autentikasi, APISIX akan memutuskan untuk meneruskan permintaan ke upstream atau mengirim respons penolakan langsung ke klien

Cara Menggunakan

Langkah 1: Menyiapkan Layanan Autentikasi

Misalkan ada layanan autentikasi di mana pengguna mengirim permintaan dengan header permintaan Authorization. Jika data ini lolos autentikasi, kode status 200 dan header respons bernama X-User-ID dikembalikan; jika tidak lolos autentikasi, status autentikasi dianggap kedaluwarsa dan kode status 302 serta header respons Location dikembalikan untuk mengarahkan klien ke halaman login.

Langkah 2: Membuat Rute dan Mengaktifkan Plugin forward-auth

Selanjutnya, kita akan mengonfigurasi rute dan mengaktifkan plugin forward-auth untuk menghubungkan layanan autentikasi di atas dengan aplikasi upstream.

curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "plugins": { "forward-auth": { "address": "http://127.0.0.1:9080/auth", "request_headers": ["Authorization"], "upstream_headers": ["X-User-ID"], "client_headers": ["Location"] } }, "uri": "/user" }'

Detail konfigurasi di atas dijelaskan sebagai berikut.

  • Ketika sebuah permintaan cocok dengan rute saat ini, sebuah permintaan dikirim ke address di alamat dengan header permintaan Authorization yang didefinisikan dalam request_headers (yaitu, header permintaan yang dikonfigurasi untuk diteruskan oleh klien ke layanan autentikasi, jika tidak diatur, tidak ada header permintaan yang diteruskan), di mana layanan autentikasi dapat mengonfirmasi identitas pengguna.
  • Jika autentikasi berhasil, kode status adalah 200 dan mengembalikan X-User-ID seperti yang didefinisikan dalam upstream_headers (yaitu, header permintaan yang akan diteruskan ke upstream oleh layanan autentikasi ketika autentikasi berhasil, jika tidak diatur, tidak ada header permintaan yang diteruskan).
  • Jika autentikasi gagal, kode status adalah 302 dan mengembalikan Location seperti yang didefinisikan dalam client_headers (yaitu, header respons yang dikirim oleh layanan autentikasi ke klien jika autentikasi gagal, atau tidak ada header respons jika tidak diatur).

Langkah 3: Menguji Permintaan

# Permintaan dan mengirim data menggunakan POST curl http://127.0.0.1:9080/user \ --header 'Authorization: true' HTTP/1.1 200 OK Content-Type: application/json Content-Length: 28 Server: APISIX/2.11.0 {"user_id":"i-am-real-user"} # Permintaan menggunakan GET curl -i http://127.0.0.1:9080/user \ --header 'Authorization: false' HTTP/1.1 302 FOUND Server: APISIX/2.11.0 Location: https://example.com/auth

Tambahan: Menonaktifkan Plugin

Jika Anda telah selesai menggunakan plugin Forward Auth, cukup hapus konfigurasi plugin forward-auth dari konfigurasi rute dan simpan untuk mematikan plugin Forward Auth pada rute tersebut.

Berkat sifat dinamis dari Apache APISIX, tidak perlu me-restart Apache APISIX untuk menyalakan dan mematikan plugin.

Ringkasan

Untuk mendapatkan informasi lebih lanjut tentang deskripsi plugin forward-auth dan daftar konfigurasi lengkap, Anda dapat merujuk ke dokumentasi resmi. Selain itu, jika Anda memiliki skenario aplikasi autentikasi atau otorisasi yang lebih kompleks, coba gunakan plugin opa, yang memungkinkan fungsionalitas yang lebih kuat dengan cara yang dapat diprogram.

Apache APISIX juga saat ini sedang mengerjakan plugin tambahan untuk mendukung integrasi layanan tambahan, jadi jika Anda tertarik, jangan ragu untuk memulai diskusi di GitHub Discussion, atau melalui mailing list untuk berkomunikasi.

Tags: