Skip to content

JWT refreshToken을 bcrypt로 해싱 후 compare 시 항상 true 반환되는 문제 #45

Description

@soo96

어떤 이슈인가요?

JWT refreshToken을 bcrypt로 해싱 후 compare 시 항상 true 반환되는 문제

어떤 내용인가요?

문제 요약

JWT refreshToken을 bcrypt로 해싱해 DB에 저장하고, 이후 로그인 시 bcrypt.compare(token, hashedToken) 방식으로 검증했으나, 모든 값에 대해 true를 반환하는 문제가 발생함.

원인

bcrypt는 내부적으로 최대 72바이트까지만 비교에 사용되기 때문에,
refreshToken이 이 길이를 초과하면 뒤가 잘리고 비교되면서 의도치 않게 항상 true가 반환되었음.

✅ 해결 방법

  • 단순 문자열을 비교하는 방식으로 변경
if (token !== this.refreshToken)
  • refreshToken을 해싱하지 않고 평문 그대로 DB에 저장하도록 변경
  • Prisma 스키마에서 해당 필드 타입을 @db.Text로 지정해 충분한 길이를 수용하도록 조정
model User {
  ...
  refreshToken String? @db.Text
}

## 참고할만한 자료(선택)
- https://github.com/kelektiv/node.bcrypt.js/issues/935
- 

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions