Episode ini membahas keamanan API tingkat lanjut: integrasi OAuth2 dan OpenID Connect dengan Passport, social login dan external identity providers, secure API contracts dengan rate limiting, serta konfigurasi CORS, CSRF, dan security headers.

Autentikasi dengan username dan password bukan satu-satunya cara. Banyak aplikasi memakai OAuth2 dan OpenID Connect untuk mengizinkan login dengan akun Google, GitHub, atau identity provider enterprise. Episode 13 membahas integrasi keduanya serta pengamanan API secara menyeluruh: alur OAuth2, social login dengan Passport, rate limiting, CORS, CSRF, dan security headers.
OAuth2 adalah standar untuk otorisasi — memberi aplikasi akses ke resource atas nama user. OpenID Connect (OIDC) dibangun di atas OAuth2 dan menambahkan lapisan autentikasi — memberi aplikasi identitas terverifikasi user. Keduanya memakai alur seperti authorization code dan token endpoint.
Passport menyediakan strategy OAuth2 generik:
npm install @nestjs/passport passport passport-oauth2import { Injectable } from "@nestjs/common";
import { PassportStrategy } from "@nestjs/passport";
import { Strategy } from "passport-oauth2";
@Injectable()
export class GithubStrategy extends PassportStrategy(Strategy, "github") {
constructor() {
super({
authorizationURL: "https://github.com/login/oauth/authorize",
tokenURL: "https://github.com/login/oauth/access_token",
clientID: process.env.GITHUB_CLIENT_ID,
clientSecret: process.env.GITHUB_CLIENT_SECRET,
callbackURL: "http://localhost:3000/auth/github/callback",
});
}
validate(accessToken: string): { accessToken: string } {
return { accessToken };
}
}Secret seperti GITHUB_CLIENT_ID diambil dari environment lewat process.env.GITHUB_CLIENT_ID, bukan di-hard-code.
Untuk login dengan akun eksternal, buat controller dengan dua route — satu untuk memulai, satu untuk callback:
import { Controller, Get, Req, UseGuards } from "@nestjs/common";
import { AuthGuard } from "@nestjs/passport";
@Controller("auth")
export class AuthController {
@Get("github")
@UseGuards(AuthGuard("github"))
githubLogin(): void {}
@Get("github/callback")
@UseGuards(AuthGuard("github"))
githubCallback(@Req() req): { user: unknown } {
return { user: req.user };
}
}Setelah login berhasil, aplikasi biasanya menerbitkan token JWT sendiri untuk sesi berikutnya.
Selain GitHub, banyak provider didukung: Google (passport-google-oauth20), Facebook, dan GitLab. Konsepnya sama — strategi Passport dengan kredensial masing-masing provider. Untuk enterprise, identity provider seperti Okta atau Keycloak menyediakan endpoint OIDC yang bisa dipakai dengan strategy passport-openidconnect.
Rate limiting mencegah penyalahgunaan API:
npm install @nestjs/throttlerimport { Module } from "@nestjs/common";
import { ThrottlerModule } from "@nestjs/throttler";
@Module({
imports: [
ThrottlerModule.forRoot([
{
ttl: 60000,
limit: 10,
},
]),
],
})
export class AppModule {}Konfigurasi ini membatasi 10 request per 60 detik dari satu sumber.
Daftarkan guard secara global atau per-controller:
import { Controller, Get, UseGuards } from "@nestjs/common";
import { ThrottlerGuard } from "@nestjs/throttler";
@Controller("api")
@UseGuards(ThrottlerGuard)
export class ApiController {
@Get()
index(): string {
return "API aman";
}
}Jika limit terlampaui, server mengembalikan status 429 Too Many Requests.
CORS mengatur siapa yang boleh mengakses API dari browser:
const app = await NestFactory.create(AppModule);
app.enableCors({
origin: ["https://app.example.com"],
methods: ["GET", "POST", "PUT", "DELETE"],
credentials: true,
});Batasi origin ke domain yang dikenal, bukan * di production.
Untuk aplikasi yang memakai cookie untuk autentikasi, CSRF perlu dicegah. Pakai package seperti csurf atau implementasikan token di header. Jika kalian memakai JWT di header Authorization (bukan cookie), risiko CSRF jauh lebih rendah karena browser tidak otomatis mengirim token tersebut.
npm install helmetimport helmet from "helmet";
const app = await NestFactory.create(AppModule);
app.use(helmet());Helmet menambahkan header keamanan penting: X-Content-Type-Options, X-Frame-Options, Strict-Transport-Security, dan lainnya — melindungi dari berbagai serangan berbasis browser.
Episode 13 memperluas keamanan API kalian: OAuth2 dan OIDC dengan Passport, social login, rate limiting, CORS, CSRF, dan security headers.
Inti yang harus dibawa pulang:
@nestjs/throttler membatasi laju request untuk mencegah abuse.Di episode 14 selanjutnya kita akan membahas API gateway dan microservices — arsitektur microservices NestJS, transport layer TCP Redis NATS RabbitMQ dan Kafka, gateway patterns dan API composition, serta autentikasi antar service dan message validation.