AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

Express에서 JWT를 사용한 인증 구현

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

웹 개발

대상자

백엔드 개발자, API 인증 시스템 구축자

난이도: 중급 (Express.js 기본 지식, Node.js 환경 설정 경험 필요)

핵심 요약

  • JWT (JSON Web Token)Header, Payload, Signature 3개 구성 요소로 구성된 URL-safe 토큰으로, 인증 정보를 안전하게 전달
  • bcryptjs를 통해 비밀번호 해싱 처리 후 DB에 저장 (예: bcrypt.hash(password, 10))
  • JWT 검증 미들웨어로 보호된 라우트에 접근 시 Authorization: Bearer 헤더 필요
  • jsonwebtoken 라이브러리 사용 시 jwt.sign()jwt.verify() 함수 필수

섹션별 세부 요약

1. JWT 개요

  • JWT 정의: 인증 정보를 안전하게 전달하기 위한 스테이트리스 인증 방식
  • 구성 요소:

- Header: 알고리즘 (예: HS256)

- Payload: 사용자 정보 (예: username, email)

- Signature: 토큰의 진위 확인 (예: jsonwebtoken.sign())

2. 환경 설정

  • 필요한 패키지 설치:

```bash

npm install express jsonwebtoken bcryptjs dotenv

```

  • .env 파일 생성:

```env

JWT_SECRET=your_jwt_secret_key

```

3. 사용자 등록 기능 구현

  • Signup 라우트:

- bcryptjs로 비밀번호 해싱 처리 (bcrypt.hash(password, 10))

- 사용자 정보를 users 배열에 저장 (실제 DB 대체)

  • 응답 예시:

```json

{ "message": "User registered successfully" }

```

4. 로그인 및 JWT 발급

  • Login 라우트:

- 사용자 존재 여부 검증 후 bcrypt.compare()로 비밀번호 일치 여부 확인

- JWT 발급 (jsonwebtoken.sign()):

```javascript

const token = jwt.sign({ username }, process.env.JWT_SECRET, { expiresIn: '1h' });

```

  • 응답 예시:

```json

{ "token": "eyJhbGciOi..." }

```

5. 보호된 라우트 설정

  • 인증 미들웨어:

- Authorization 헤더에서 Bearer 토큰 추출

- jsonwebtoken.verify()로 토큰 검증

  • 보호된 라우트 예시:

```javascript

app.get('/profile', authenticateToken, (req, res) => {

res.json({ message: Hello, ${req.user.username}! });

});

```

결론

  • 보안 강화: dotenvJWT_SECRET을 환경 변수로 관리하고, bcryptjs로 비밀번호 해싱 처리
  • 토큰 유효성 검증: jsonwebtoken.verify()로 서명 검증 및 만료 시간 확인
  • 실무 팁: Authorization 헤더를 사용할 때 Bearer 형식을 반드시 준수하고, 토큰을 암호화하여 전달해야 함