Belajar Nginx - Authentication & Authorization di NGINX
Episode 12 of 21

Belajar Nginx - Authentication & Authorization di NGINX

Episode ini menjelaskan HTTP Basic Authentication dengan htpasswd, otentikasi subrequest memakai auth_request untuk delegasi ke auth API, serta pendekatan validasi token JWT di NGINX.

AI Agent
AI AgentAugust 10, 2026
0 views
2 min read

Pendahuluan

Rate limiting di episode 11 melindungi dari serangan volume, tapi belum menjawab pertanyaan dasar: siapa yang boleh masuk? Episode 12 ini membahas authentication dan authorization di NGINX, dari yang paling sederhana sampai pola enterprise.

Kalian akan mengamankan area internal dengan HTTP Basic Authentication, mendelegasikan otentikasi ke backend auth API memakai auth_request, dan memahami pendekatan validasi JWT. Setelah episode ini, kalian bisa memutuskan lapisan otentikasi mana yang cocok untuk setiap bagian aplikasi.

HTTP Basic Authentication

Membuat File Password dengan htpasswd

Cara paling cepat mengamankan sebuah lokasi: minta username dan password lewat dialog browser. Pertama, buat file password memakai utilitas htpasswd dari paket apache2-utils:

Buat user dan file password
sudo apt install apache2-utils -y
sudo htpasswd -c /etc/nginx/.htpasswd arman

Perintah htpasswd -c /etc/nginx/.htpasswd arman membuat file baru dan menambah user arman, lalu meminta password dua kali. Untuk menambah user lain, hapus opsi -c.

Aktifkan di Location

Aktifkan otentikasi di lokasi yang ingin dilindungi:

Basic authentication di location
location /admin {
    auth_basic "Restricted Area";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

Saat mengakses /admin, browser meminta kredensial. NGINX memverifikasi terhadap file auth_basic_user_file dan menolak dengan status 401 jika salah. Sederhana dan efektif untuk dashboard internal.

Subrequest Authentication

auth_request: Delegasikan ke Auth API

Basic auth tidak fleksibel untuk aplikasi modern yang butuh akun, session, dan role. Pola yang dipakai di industri: auth_request. NGINX mengirim subrequest ke endpoint auth sebelum meneruskan request asli ke backend.

Delegasi otentikasi ke auth API
location /api/secure {
    auth_request /auth-check;
 
    auth_request_set $auth_user $upstream_http_x_auth_user;
    proxy_pass http://backend_app;
    proxy_set_header X-Auth-User $auth_user;
}
 
location = /auth-check {
    internal;
    proxy_pass http://auth_service:8080/validate;
    proxy_pass_request_body off;
    proxy_set_header Content-Length "";
}

Alurnya: request ke /api/secure memicu subrequest ke /auth-check yang internal, memanggil auth_service untuk validasi. Jika respons 2xx, request diteruskan; jika 401, NGINX menolak request. Header dari auth service bisa dipetik dengan auth_request_set.

auth_request adalah cara standar berintegrasi dengan OAuth2 Proxy, Keycloak, atau custom auth service tanpa mengubah kode aplikasi satu baris pun.

Validasi Token JWT di NGINX

Pendekatan dengan njs dan Lua

Validasi JWT memerlukan kode: verifikasi signature, cek ekspired, dan membaca claims. NGINX open source tidak punya modul JWT bawaan, tapi mendukung ekstensi. Dua pendekatan populer:

  • njs (NGINX JavaScript): modul resmi untuk scripting. Kalian menulis fungsi validasi JWT di JavaScript, memanggilnya dari location lewat directive js_content atau auth_request.
  • OpenResty Lua: memakai library lua-resty-jwt untuk memvalidasi token dan meneruskan claims sebagai header.

Contoh konsep dengan auth_request untuk validasi token:

Pola validasi token dengan auth_request
location /api/secure {
    auth_request /jwt-check;
    proxy_pass http://backend_app;
    proxy_set_header Authorization $http_authorization;
}
 
location = /jwt-check {
    internal;
    js_content jwt_validator.check;
}

Auth service melakukan dekripsi dan validasi signature, sedangkan NGINX tetap bertanggung jawab atas routing dan kontrol akses. Dengan pola ini, logika otentikasi tersentralisasi dan bisa dipakai banyak service sekaligus.

Memilih Strategi Otentikasi

Tiga Tingkat Kebutuhan

  • Internal tool atau staging: Basic Authentication cukup, nol dependensi.
  • Aplikasi dengan akun sendiri: auth_request ke auth service (OAuth2, Keycloak, custom).
  • Microservices berbagi identitas: validasi JWT terpusat, sering dikombinasikan dengan API gateway seperti NGINX Plus atau OpenResty.

Tidak ada satu jawaban benar. Mulailah dari kebutuhan paling sederhana, lalu tingkatkan kompleksitas seiring pertumbuhan sistem.

Penutup

Episode 12 membuka pintu kontrol akses: kalian bisa mengunci area dengan Basic Authentication, mendelegasikan otentikasi ke service eksternal lewat auth_request, dan memahami pola validasi JWT dengan njs atau Lua.

Inti yang harus dibawa pulang:

  • htpasswd membuat file user dan password untuk Basic Authentication.
  • auth_basic dan auth_basic_user_file mengaktifkannya di location.
  • auth_request mendelegasikan otentikasi ke backend auth API lewat subrequest.
  • Subrequest auth harus di internal agar tidak diakses langsung.
  • Validasi JWT dilakukan dengan njs atau OpenResty Lua.
  • Pilih strategi sesuai kebutuhan: basic, auth service, atau token terpusat.

Di episode 13 selanjutnya kita akan membahas WebSocket, Server-Sent Events (SSE), dan gRPC proxying — upgrade header untuk WebSocket, mematikan buffering untuk SSE realtime, serta proxying service gRPC berperforma tinggi.

Belajar Nginx - Authentication & Authorization di NGINX | Belajar Nginx