Eomhyein / employment

Node.js 숙련 개인과제 나만의 채용 서비스 백엔드 서버 만들기
0 stars 0 forks source link

(선택) RefreshToken 활용 #14

Open Eomhyein opened 4 months ago

Eomhyein commented 4 months ago

로그인 API에 기능 추가

- RefreshToken 저장을 위한 스키마 정의가 필요합니다.

RefreshToken을 추가로 발급합니다.

  1. 비즈니스 로직(데이터 처리)
    • RefreshToken(Payload사용자 ID를 포함하고, 유효기한7일)을 생성합니다.
    • DB에 RefreshToken생성 또는 갱신합니다.
    • 보안을 위해 RefreshToken은 평문(Plain Text)으로 저장하지 않고 Hash 된 값을 저장합니다.
  2. 반환 정보
    • RefreshToken을 추가 반환합니다.
Eomhyein commented 4 months ago

RefreshToken 인증 Middleware

공통 된 RefreshToken 인증 과정을 처리합니다.

  1. 요청 정보
    • RefreshTokenRequest Header의 Authorization 값(req.headers.authorization)으로 전달 받으며, JWT 표준 인증 형태(Authorization: Bearer {{ RefreshToken }})에 맞아야 합니다.
  2. 유효성 검증 및 에러 처리
    • JWT 표준 인증 형태와 일치하지 않는 경우 - “지원하지 않는 인증 방식입니다.”
    • RefreshToken이 없는 경우 - “인증 정보가 없습니다.”
    • RefreshToken의 유효기한이 지난 경우 - “인증 정보가 만료되었습니다.”
    • 그 밖의 RefreshToken 검증에 실패한 경우 - “인증 정보가 유효하지 않습니다.”
    • Payload에 담긴 사용자 ID와 일치하는 사용자가 없는 경우 - “인증 정보와 일치하는 사용자가 없습니다.”
    • DB에 저장 된 RefreshToken이 없거나 전달 받은 값과 일치하지 않는 경우 - “폐기 된 인증 정보입니다.”
  3. 비즈니스 로직(데이터 처리)
    • Payload에 담긴 사용자 ID를 이용하여 사용자 정보를 조회합니다.
  4. 반환 정보
    • 조회 된 사용자 정보를 req.user에 담고, 다음 동작을 진행합니다.
Eomhyein commented 4 months ago

토큰 재발급 API (RefreshToken 인증 필요)

AccessToken 만료 시 RefreshToken을 활용해 재발급합니다.

  1. 요청 정보
    • RefreshToken(JWT)을 Request Header의 Authorization 값(req.headers.authorization)으로 전달 받습니다.
    • 사용자 정보는 인증 Middleware(req.user)를 통해서 전달 받습니다.
  2. 비즈니스 로직(데이터 처리)
    • AccessToken(Payload사용자 ID를 포함하고, 유효기한12시간)을 생성합니다.
    • RefreshToken (Payload: 사용자 ID 포함, 유효기한: 7일)을 생성합니다.
    • DB에 저장 된 RefreshToken을 갱신합니다.
  3. 반환 정보
    • AccessToken, RefreshToken을 반환합니다.
Eomhyein commented 4 months ago

로그아웃 API (🔐 RefreshToken 인증 필요)

요청 한 RefreshToken으로 더 이상 토큰 재발급 API를 호출할 수 없도록 합니다.

  1. 요청 정보
    • RefreshToken(JWT)을 Request Header의 Authorization 값(req.headers.authorization)으로 전달 받습니다.
    • 사용자 정보는 인증 Middleware(req.user)를 통해서 전달 받습니다.
  2. 비즈니스 로직(데이터 처리)
    • DB에서 RefreshToken을 삭제합니다.
  3. 반환 정보
    • 사용자 ID를 반환합니다.