dnd-side-project / dnd-11th-7-backend

λͺ¨λ‘μ˜ 일정을 ν•œλˆˆμ—! κ°„νŽΈν•œ 일정 쑰율 μ„œλΉ„μŠ€, 째깍
5 stars 1 forks source link

JWT 토큰 κ΄€λ ¨ #88

Open f1v3-dev opened 1 week ago

f1v3-dev commented 1 week ago

πŸ› οΈ μ–΄λ–€ κΈ°λŠ₯μΈκ°€μš”?

1. ν† ν°μ˜ 만료 μ‹œκ°„ μ„€μ •

2. ν† ν°μ˜ μœ νš¨μ„± 검사

    public String validate(String jwt) throws ExpiredJwtException, MalformedJwtException, JwtException {
        Claims claims = Jwts.parserBuilder()
                .setSigningKey(key)
                .build()
                .parseClaimsJws(jwt)
                .getBody();
        return claims.getSubject();
    }

/api/v1/auth/check 둜 λ³€ν˜•λœ JWTλ₯Ό 헀더에 뢙이고 μš”μ²­μ„ 해도 μ •μƒμ μœΌλ‘œ 둜그인이 λ˜μ–΄μžˆλ‹€κ³  νŒλ‹¨ν•˜κΈ° λ•Œλ¬Έμ— μ‹œμŠ€ν…œμ μœΌλ‘œ λ¬Έμ œκ°€ λ°œμƒν•  κ²ƒμœΌλ‘œ μ˜ˆμƒμ΄ λ©λ‹ˆλ‹€. ν˜„μž¬ μž‘μ„±λœ μ½”λ“œ λ‚΄μš©μœΌλ‘œλ§Œ 보면, JWT의 λ³€ν˜•μ΄λ‚˜ μœ„μ‘°λœ 토큰에 λŒ€ν•΄ μ–΄λ–»κ²Œ λŒ€μ‘ν•  것인지에 λŒ€ν•΄ 고민을 해봐야 ν•  것 κ°™μ•„μš”.

λ­”κ°€ μ—¬λŸ¬ μƒν™©μ—μ„œ μ˜ˆμ™Έκ°€ λ°œμƒν•  것 κ°™λ‹€λŠ” 생각이 λ“­λ‹ˆλ‹€.

3. Refresh Token을 μ €μž₯ν•΄μ•Ό ν•˜λŠ”κ°€

μ˜ˆμ „μ— κ·Έλƒ₯ λ†”λ‘μž ν•œ μ½”λ“œκ°€ κ³„μ†ν•΄μ„œ 주석 μ²˜λ¦¬κ°€ λ˜μ–΄μžˆμ–΄μ„œ κ²°μ •ν•˜κ³  처리λ₯Ό ν•˜λ©΄ 쒋을 것 κ°™μ•„μš”.

πŸ—’οΈ μž‘μ—… 상세 λ‚΄μš©

μž‘μ—… 상세 λ‚΄μš©μ€ 천천히 이야기 해보고 λ¦¬μŠ€νŠΈμ—… ν•΄λ΄μš”!

πŸ‘€ μ°Έκ³ ν• λ§Œν•œ 자료(선택)

RTUnu12 commented 1 week ago
  1. μƒμˆ˜ (static final)둜 λ°”κΎΈλŠ” 것이 쒋을 것 κ°™μ•„μš”.
  2. 찾아봐야 ν•  λ“― ν•©λ‹ˆλ‹€. λ³€ν˜•λœ 토큰일 경우 μ†μƒλœ 토큰이라고 μ˜ˆμ™Έκ°€ λœ°ν…λ° 흠...
  3. μ €μž₯ν•˜μ§€ μ•ŠλŠ” 것이 쒋을 것 κ°™μ•„μš”. λΈ”λž™λ¦¬μŠ€νŠΈλ§Œ!
f1v3-dev commented 1 week ago

저도 2λ²ˆμ— λŒ€ν•΄μ„œ νƒœμ›…λ‹˜κ³Ό 같은 생각을 ν–ˆλŠ”λ° reissue λ₯Ό ν†΅ν•΄μ„œ ATλ₯Ό λ°œκΈ‰ν•˜κ³ 

  1. ATλ₯Ό 헀더에 λΆ™μ—¬μ„œ /api/v1/auth/check둜 μš”μ²­
  2. ATλ₯Ό λ³€ν˜•ν•˜κ³  /api/v1/auth/check둜 μš”μ²­

μœ„μ˜ 과정을 ν•œ 번 ν…ŒμŠ€νŠΈ ν•΄λ³΄μ‹œλŠ” 것도 쒋을 것 κ°™μ•„μš”! μ•„λ§ˆ μ œκ°€ JWT의 μ‹œκ·Έλ‹ˆμ²˜ μͺ½μ„ κ±΄λ“œλ €μ„œ κ·ΈλŸ°κ±΄κ°€ 싢기도 ν•œλ° 저도 ν•œ 번 μ°Ύμ•„λ³Όκ²Œμš”!

f1v3-dev commented 4 days ago

방금 토큰μͺ½ μ½”λ“œλ₯Ό 보닀가 λ°œκ²¬ν•œκ±΄λ°

κ·Έλƒ₯ JwtProvider 에 μžˆλŠ” 검증(validate) λ©”μ„œλ“œλŠ” λ‹¨μˆœνžˆ μœ νš¨μ„± 체킹을 ν•˜λŠ” 것인지 λͺ¨λ₯΄κ³  μ œκ°€ μ½”λ“œλ₯Ό μž‘μ„±μ„ ν–ˆλ„€μš”.

public class AuthService {
    // ...
    public String reissueToken(String refreshToken) {

        String kakaoId = jwtProvider.validateToken(refreshToken);
        String accessToken = jwtProvider.createAccessToken(kakaoId);

        return "Bearer " + accessToken;
    }
}

μœ„μ— 처럼 μž‘μ„±μ„ 해놓은 μ½”λ“œμ— μΆ”κ°€μ μœΌλ‘œ memberRepository.existsByKakaoId() 와 같은 λ©”μ„œλ“œλ‘œ ν•œ 번 더 검증을 ν•΄μ•Όν•  것 κ°™μ•„μš”!

좔후에 ν•œ 번 검증 μ½”λ“œμͺ½ μˆ˜μ •ν•˜λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

RTUnu12 commented 4 days ago

μ•Œκ² μŠ΅λ‹ˆλ‹€!