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
- User login β dapet JWT (ibarat tiket konser).
- Setiap request ke API bawa JWT di header.
- Backend cek JWT valid atau engga β Authentication pass.
- 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).

