Kembali ke Blog
NestJSAuthenticationJWTPassportJSOAuthSSOBackend ArchitectureSoftware Engineering

Authentication Is Infrastructure: Membangun Sistem Auth yang Scalable dengan NestJS & Passport

Authentication sering dianggap sekadar fitur: yang penting user bisa login. Padahal di aplikasi modern — dengan web, mobile, admin dashboard, dan berbagai integrasi — authentication adalah infrastruktur. Di artikel ini, kita akan membahas bagaimana merancang starter kit NestJS dengan JWT, Passport.js, dan SSO (Google, Facebook, GitHub) yang sejak awal disiapkan untuk scale, clarity, dan extensibility.

5 menit baca
Authentication Is Infrastructure: Membangun Sistem Auth yang Scalable dengan NestJS & Passport

Authentication Bukan Sekadar “Fitur Login”

Di banyak project, authentication sering diperlakukan seperti ini:

  • Buat endpoint login
  • Simpan token
  • Selesai

Selama user bisa masuk, dianggap beres.

Masalahnya, begitu aplikasi mulai berkembang — muncul mobile app, admin dashboard, atau bahkan service lain — auth yang awalnya “cukup” mulai terasa rapuh.

Tiba-tiba:

  • Flow login beda-beda
  • Token handling tidak konsisten
  • Sulit nambah SSO
  • Auth logic nyampur dengan business logic

Di titik ini, jelas satu hal:
authentication bukan fitur, tapi infrastruktur.

Masalah Umum Authentication di Aplikasi Modern

Beberapa pain point yang hampir selalu muncul:

  • Banyak client, satu backend
    Web, mobile, admin — semuanya butuh auth.
  • Session vs JWT tidak jelas
    Sebagian pakai session, sebagian pakai token.
  • OAuth diimplementasikan setengah-setengah
    Logic provider nyampur di controller, sulit dirawat.
  • Provider token bocor ke frontend
    Frontend malah pakai access token dari Google atau GitHub.
  • Sulit nambah SSO baru
    Setiap provider terasa seperti rewrite.

Masalah-masalah ini jarang muncul di awal, tapi hampir pasti muncul saat produk mulai scale.

Studi Kasus: Unified Authentication System

Starter kit ini dibangun berdasarkan satu studi kasus sederhana tapi realistis:

Satu authentication backend yang digunakan oleh banyak platform.

Ciri-cirinya:

  • Semua client login ke backend yang sama
  • Backend selalu menerbitkan JWT-nya sendiri
  • OAuth provider hanya digunakan sebagai identity source
  • Frontend tidak peduli user login lewat apa

Tujuannya:

  • Konsisten
  • Aman
  • Mudah dikembangkan

Kenapa NestJS + Passport?

Pilihan stack ini bukan kebetulan.

  • NestJS
    Modular, opinionated, dan cocok untuk sistem berskala.
  • Passport.js
    Strategy-based authentication engine.
    Bukan “library login”, tapi fondasi auth.
  • JWT
    Stateless, scalable, dan cocok untuk multi-platform.

Kombinasi ini memungkinkan kita membangun auth yang:

  • Rapi
  • Terisolasi
  • Mudah diperluas

Filosofi Starter Kit Auth Ini

Starter kit ini dibangun dengan beberapa prinsip utama:

  • Authentication logic harus terpusat
  • Strategy-based, bukan conditional-based
  • Provider-agnostic
  • JWT adalah kontrak, bukan sekadar token

Atau singkatnya:

Authentication should be boring — because boring systems scale.

Tidak ada magic. Tidak ada shortcut.
Yang ada adalah struktur yang jelas dan bisa dirawat.

Arsitektur Tingkat Tinggi

Secara garis besar, sistem ini terdiri dari:

  • AuthModule sebagai entry point
  • AuthService untuk business logic
  • Strategies untuk setiap metode auth
  • Guards untuk proteksi endpoint
  • DTOs sebagai kontrak data

Setiap strategy (Local, JWT, Google, Facebook, GitHub):

  • Berdiri sendiri
  • Mengikuti pola yang sama
  • Mudah ditambah tanpa mengganggu yang lain

Local Auth & SSO: Dua Pintu, Satu Identitas

Starter kit ini mendukung dua cara login utama:

1. Email & Password

  • User register
  • Password di-hash
  • Login menghasilkan JWT

2. SSO (Google, Facebook, GitHub)

  • User login via provider
  • Backend memvalidasi identitas
  • User dibuat atau di-link
  • Backend menerbitkan JWT yang sama

Yang penting:

Setelah login berhasil, frontend tidak tahu dan tidak perlu tahu user login lewat apa.

JWT yang diterima selalu konsisten.

Keputusan Security yang Disengaja

Beberapa keputusan penting di starter kit ini:

  • Stateless authentication (tanpa session)
  • Token memiliki expiration
  • Secret & credential berbasis environment
  • Provider token tidak diteruskan ke client
  • Payload JWT minimal dan aman

Tidak ada kompromi di sisi keamanan, tapi juga tidak berlebihan.

Siapa yang Cocok Menggunakan Starter Kit Ini?

Starter kit ini cocok untuk:

  • Backend engineer yang ingin auth rapi sejak awal
  • Startup dengan banyak client
  • Team yang ingin nambah SSO tanpa stres
  • Project yang ingin scale dengan tenang

Kalau kamu pernah berkata:

“Nanti aja auth-nya dibenerin”

Starter kit ini dibuat untuk mencegah kalimat itu muncul lagi.

Bagaimana Starter Kit Ini Akan Berkembang

Auth bukan berhenti di login.

Starter kit ini disiapkan untuk berkembang ke:

  • Refresh token
  • Role-Based Access Control (RBAC)
  • Multi-tenant authentication
  • Account linking
  • MFA / 2FA

Tanpa perlu rewrite fondasi.

Penutup

Authentication yang baik jarang terlihat.
Tapi authentication yang buruk selalu terasa.

Dengan memperlakukan auth sebagai infrastruktur, bukan fitur, kita bisa membangun sistem yang:

  • Konsisten
  • Aman
  • Mudah dirawat
  • Siap berkembang

Starter kit ini tersedia sebagai NestJs-Starter-Kits.

Kalau kamu merasa pendekatan dan struktur yang dibahas di artikel ini relevan,
silakan kunjungi repository-nya, eksplor kodenya, dan beri ⭐ jika terasa membantu.

Dukungan kecil seperti star sangat berarti untuk menjaga project ini tetap berkembang dan konsisten.

🔐🚀 Happy building.

Bagikan