Authentication & Authorization di NestJS: Belajar dari Kehidupan Sehari-Hari

Kalau lo baru masuk dunia backend, pasti sering denger istilah Authentication sama Authorization.
Kedengerannya mirip, padahal beda fungsi.
Biar gampang, kita coba jelasin pake analogi konser musik 🎀🎢

🎫 Authentication = Tiket Masuk Konser

Bayangin lo mau nonton konser Dreamcatcher (atau Coldplay biar hype lah πŸ˜†).
Pas di gerbang, lo harus nunjukkin tiket konser ke penjaga.

  • Kalau tiketnya valid β†’ lo bisa masuk.
  • Kalau tiketnya palsu / udah kadaluarsa β†’ lo ditolak.

πŸ‘‰ Inilah yang disebut Authentication = proses ngebuktiin siapa lo biar bisa masuk.

Di NestJS, ini biasanya pakai:

  • Login username/password
  • OAuth (Google, Facebook, GitHub)
  • JWT (JSON Web Token) β†’ tiket digital lo buat akses API

Contoh singkat pakai JWT di NestJS:

// auth.service.ts
async login(user: any) {
  const payload = { username: user.username, sub: user.id, role: user.role };
  return {
    access_token: this.jwtService.sign(payload),
  };
}

πŸ“Œ Setelah login, lo dapet β€œtiket” berupa JWT token.

🎟️ Authorization = Gelang VIP

Nah, setelah lo masuk konser, ada area berbeda:

  • Tribune biasa buat penonton reguler.
  • VIP area buat yang punya gelang khusus.
  • Backstage cuma boleh crew & artis.

Walaupun semua udah β€œmasuk konser” (udah authenticated), tapi gak semua orang boleh ke semua area.
πŸ‘‰ Itulah Authorization = proses ngecek lo boleh ngapain aja / masuk area mana.

Di NestJS, ini bisa dibuat dengan Guard + Decorator:

// roles.decorator.ts
export const Roles = (...roles: string[]) => SetMetadata('roles', roles);

// roles.guard.ts
canActivate(context: ExecutionContext): boolean {
  const requiredRoles = this.reflector.get<string[]>('roles', context.getHandler());
  if (!requiredRoles) return true;
  const { user } = context.switchToHttp().getRequest();
  return requiredRoles.includes(user.role);
}

Lalu di controller:

@Get('admin')
@UseGuards(AuthGuard('jwt'), RolesGuard)
@Roles('admin')
getAdminData() {
  return { message: 'Hanya admin (VIP) yang bisa lihat ini' };
}

πŸ”„ Flow Lengkap

  1. User login β†’ dapet JWT (ibarat tiket konser).
  2. Setiap request ke API bawa JWT di header.
  3. Backend cek JWT valid atau engga β†’ Authentication pass.
  4. Guard ngecek role (misalnya admin, user) β†’ Authorization pass.

🎯 Kesimpulan

  • Authentication = tiket konser β†’ ngebuktiin lo berhak masuk.
  • Authorization = gelang VIP β†’ nentuin lo boleh ke area mana aja.
  • Di NestJS, kombinasinya:
    • Passport + JWT buat Authentication
    • Guard + Role Decorator buat Authorization

⚑ Jadi inget bro, masuk gedung itu gampang (authN), tapi masuk backstage itu privilege (authZ).

Abdan Zam Zam Ramadhan
Abdan Zam Zam Ramadhan

Senior Software Engineer @ PT. Astra Internasional, Tbk.

Articles: 11