NestJS’de Swagger’ı JWT Kimlik Doğrulamasıyla Kusursuz Bir Şekilde Entegre Etme
NestJS, TypeScript ile yazılmış, güçlü, ölçeklenebilir ve sağlam mimariye sahip bir Node.js çerçevesidir. Swagger, API’leriniz için etkileşimli bir dokümantasyon ve test ortamı sağlayan açık kaynaklı bir araçtır. JWT (JSON Web Token), API’lerinize güvenli erişimi doğrulamak için yaygın olarak kullanılan standart bir yöntemdir.
Bu makalede, NestJS uygulamalarınızda Swagger’ı JWT kimlik doğrulamasıyla nasıl sorunsuz bir şekilde entegre edeceğinizi adım adım açıklayacağız. Böylece, API’leriniz için güvenli ve dokümante edilmiş bir arayüz oluşturabilirsiniz.
Gereksinimler
* Node.js ve npm (veya yarn)
* Bir NestJS projesi
Kurulum
Öncelikle, yeni bir NestJS projesi oluşturun veya mevcut bir projenizi kullanın. Daha sonra, aşağıdaki paketleri kurmanız gerekecektir:
“`bash
npm install @nestjs/platform-express @nestjs/swagger @nestjs/passport passport-jwt
“`
Swagger’ı Kurma
İlk olarak, `main.ts` dosyasında Swagger’ı yapılandıralım:
“`typescript
import { NestFactory } from ‘@nestjs/core’;
import { AppModule } from ‘./app.module’;
import { DocumentBuilder, SwaggerModule } from ‘@nestjs/swagger’;
async function bootstrap() {
const app = await NestFactory.create(AppModule);
const config = new DocumentBuilder()
.setTitle(‘My API’)
.setDescription(‘API description’)
.setVersion(‘1.0’)
.addTag(‘users’)
.build();
const document = SwaggerModule.createDocument(app, config);
SwaggerModule.setup(‘api’, app, document);
await app.listen(3000);
}
bootstrap();
“`
Bu kod bloğu, Swagger’ı yapılandırarak API’niz için bir dokümantasyon oluşturur. Bu dokümantasyon, API’nizin uç noktalarının listelerini, parametrelerini ve yanıtlarını içerecektir.
JWT Kimlik Doğrulamasını Uygulama
JWT kimlik doğrulaması için `@nestjs/passport` ve `passport-jwt` paketlerini kullanacağız. Öncelikle, `AuthModule` adlı yeni bir modül oluşturun:
“`typescript
import { Module } from ‘@nestjs/common’;
import { JwtModule } from ‘@nestjs/jwt’;
import { PassportModule } from ‘@nestjs/passport’;
import { JwtStrategy } from ‘./jwt.strategy’;
import { AuthService } from ‘./auth.service’;
import { UsersModule } from ‘../users/users.module’;
@Module({
imports: [
UsersModule,
PassportModule.register({ defaultStrategy: ‘jwt’ }),
JwtModule.register({
secret: ‘your-secret-key’,
signOptions: { expiresIn: ‘1h’ },
}),
],
providers: [AuthService, JwtStrategy],
exports: [AuthService, JwtModule],
})
export class AuthModule {}
“`
Bu modül, JWT stratejisi ve JWT kimlik doğrulaması için gerekli olan servisleri içerir. `secret` değişkeni, JWT’leri imzalamak ve doğrulamak için kullanılan gizli bir anahtardır.
JWT Stratejisini Yapılandırma
`jwt.strategy.ts` dosyasında JWT stratejisini tanımlayalım:
“`typescript
import { Injectable } from ‘@nestjs/common’;
import { PassportStrategy } from ‘@nestjs/passport’;
import { ExtractJwt, Strategy } from ‘passport-jwt’;
import { ConfigService } from ‘@nestjs/config’;
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
constructor(private configService: ConfigService) {
super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
ignoreExpiration: false,
secretOrKey: configService.get(‘JWT_SECRET’),
});
}
async validate(payload: any) {
return { userId: payload.sub, username: payload.username };
}
}
“`
Bu strateji, istekte bulunan JWT’nin geçerliliğini doğrulayacaktır.
Swagger’ı JWT ile Güvenlik
Swagger’ı JWT ile korumak için `@nestjs/swagger` paketindeki `@ApiBearerAuth` dekoratörünü kullanacağız.
“`typescript
import { Controller, Get, UseGuards } from ‘@nestjs/common’;
import { AuthGuard } from ‘@nestjs/passport’;
import { ApiBearerAuth, ApiTags } from ‘@nestjs/swagger’;
@ApiTags(‘secured’)
@Controller(‘secured’)
@UseGuards(AuthGuard(‘jwt’))
@ApiBearerAuth()
export class SecuredController {
@Get()
getSecuredData() {
return ‘Protected data’;
}
}
“`
Bu kod bloğu, `SecuredController`’ı JWT kimlik doğrulaması gerektiren bir denetleyici olarak işaretler. `@ApiBearerAuth` dekoratörü, Swagger dokümantasyonuna JWT kimlik doğrulaması gerektiği bilgisini ekler.
Sonuç
Bu makalede, NestJS uygulamalarınızda Swagger’ı JWT kimlik doğrulamasıyla nasıl sorunsuz bir şekilde entegre edeceğinizi öğrendiniz. Bu adımları izleyerek API’leriniz için güvenli ve dokümante edilmiş bir arayüz sağlayabilirsiniz.
Ek Kaynaklar
* NestJS Dokümantasyonu: Kimlik Doğrulama
* Swagger Dokümantasyonu: Kimlik Doğrulama
* Fatih Soysal Blog
#Etiketler
NestJS, Swagger, JWT, Kimlik Doğrulama, API Dokümantasyonu, API Güvenliği, PassportJS
