[JWT 인증 서버] 유소영 제출합니다.#46
Conversation
Donghwan814
left a comment
There was a problem hiding this comment.
안녕하세요 소영님! 시험은 잘 보셨을까요? 혹시 월요일까지 시험이 있으시다면 남은 시험도 파이팅입니다!
시험 기간이 겹치다 보니 코드 리뷰가 조금 늦어진 점 양해 부탁드립니다 🥲
전체적으로 이전에 JWT에 대해서 코드를 작성해보신 경험이 있기에 기본적으로 코드를 굉장히 잘 구현해주신 것 같습니다!
이번 코드 리뷰는 마지막 과제인 인증/인가와 시큐리티에서 중요하게 다루는 JWT 관련 내용입니다. 보안과 직접적으로 연결되는 부분이다 보니 신경써야 할 코드들이 많았을텐데 깔끔하게 잘 작성해주셨습니다.
다만 더 나아가 JWT의 취약점은 토큰을 탈취당하면 서버 (스프링 시큐리티)는 이를 감지하지 못해 보안 위험이 있습니다. 그렇기에 유효시간을 기준으로 AccessToken, RefreshToken이 존재합니다. 이 부분을 적용해서 보안을 좀 더 강화 시켜본다면 완벽한 코드 구조라고 예상합니다!
추가적으로 DB에 값이 제대로 들어왔는지 테스트 결과 이미지를 업로드 해주신 내용에 사용자 로그인 한 DB 결과는 업로드가 빠져 있는 것 같아서 이 부분도 확인해서 업로드 해주시면 좋을 것 같습니다!
과제 제출하시느라 고생 많으셨습니다!
There was a problem hiding this comment.
여기에서 응답값으로 token값만 받고 있는데 여기에서 token은 무슨 토큰을 의미하는 것인지 설명해 주시면 좋을 것 같아요!
|
안녕하세요 소영님! 과제 수행하시느라 고생 많으셨습니다. 이번 리뷰에서는 JWT 토큰의 생성·검증 로직이 안전하게 구현되었는지, 예외 처리는 꼼꼼하게 되었는지를 중심으로 살펴보려고 합니다. 정답을 정해두고 하는 리뷰라기보다는, 더 좋은 코드를 함께 고민하는 자리이니 편하게 이야기 나눴으면 좋겠습니다. |
leesj0706
left a comment
There was a problem hiding this comment.
안녕하세요 소영님! 과제 수행하시느라 고생 많으셨습니다.
이번 리뷰에서는 JWT 토큰의 생성·검증 로직이 안전하게 구현되었는지, 예외 처리는 꼼꼼하게 되었는지를 중심으로 살펴보려고 합니다. 정답을 정해두고 하는 리뷰라기보다는, 더 좋은 코드를 함께 고민하는 자리이니 편하게 이야기 나눴으면 좋겠습니다.
| .csrf(csrf -> csrf.disable()) | ||
| .formLogin(form -> form.disable()) | ||
| .httpBasic(basic -> basic.disable()) | ||
| .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) |
There was a problem hiding this comment.
csrf, session, formLogin, httpBasic을 비활성화 해두셨는데 비활성화를 사용하시는 이유를 설명해주시면 좋을 것 같습니다!
There was a problem hiding this comment.
소영님, User 엔티티를 보면 id, username, password같은 기본적인 컬럼들을 깔끔하게 잘 구성해 주셨습니다!
한 가지 논의해보고 싶은 점은, 현재 **Refresh Token(RT)**을 저장하는 구조가 빠져 있다는 점입니다. Access Token은 무상태(Stateless)로 검증되므로 DB 저장 컬럼이 필수가 아니지만, Refresh Token은 토큰 갱신 및 보안 제어를 위해 서버 측 저장소(테이블이나 Redis 등)가 꼭 필요하다고 생각합니다.
만약 Access Token이 만료되었을 때, 프론트엔드가 보낸 Refresh Token이 서버에 저장된 값과 일치하는지 확인하고 검증하는 과정이 있어야 안전하게 Access Token을 재발급해줄 수 있거든요. (서버에 저장해두지 않으면 토큰이 탈취당했을 때 강제 로그아웃 등의 제어가 불가능해지는 문제도 있습니다.)
혹시 정훈님이 이번 로컬 로그인을 구현하시면서 구상하셨던 Access Token과 Refresh Token의 구체적인 관리 전략이나 각각의 역할에 대해 피드백으로 공유해 주시면 감사하겠습니다!
과제명
JWT 인증 서버
💡 작업 내용
🔗 참고 링크
🤔 느낀 점 / 어려웠던 점