NestJS · · 1 min read
9. JWT 인증/인가
인증(Authentication) 은 “누구인지” 확인, 인가(Authorization) 는 “무엇을 할 수 있는지” 확인이다. NestJS는 Passport + JWT 조합을 주로 쓴다.
9.1. 설치
npm install @nestjs/passport passport @nestjs/jwt passport-jwt
9.2. JWT 발급
@Injectable()
export class AuthService {
constructor(private jwt: JwtService) {}
login(user) {
const payload = { sub: user.id, email: user.email };
return { access_token: this.jwt.sign(payload) };
}
}
9.3. JWT 전략과 가드
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
constructor() {
super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: process.env.JWT_SECRET,
});
}
validate(payload) {
return { userId: payload.sub, email: payload.email };
}
}
@UseGuards(AuthGuard('jwt')) // 토큰 없거나 유효하지 않으면 401
@Get('profile')
getProfile(@Req() req) { return req.user; }
9.4. 역할 기반 인가
@UseGuards(AuthGuard('jwt'), RolesGuard)
@Roles('admin') // 커스텀 데커레이터 + 가드로 권한 체크
@Delete(':id')
remove(@Param('id') id: string) {}