-
2024-01-31 JWT 로그인 검증 에러개발 일지 2024. 1. 31. 22:19
오늘은 이전에 만든 todoList 프로젝트에 JWT 로그인 기능을 추가하려고 해봤다.
아직 이해가 부족한 상태에서 강의에서 본 코드를 긁어와 사용하다보니 다양한 에러를 마주쳤고,
그 에러를 해결하는 것도 쉽지 않았다.
1. Thymleaf를 사용하는 것과 그렇지 않은 서버의 차이
강의에선 Thymleaf를 사용했고, 내가 만든 프로젝트는 그렇지 않았기 때문에 에러가 생겼다.
클라이언트가 보낸 데이터를 인식하지 못해서 알아보니, Thymleaf를 사용하지 않았다면 클라이언트에서
데이터를 받아오는 방법을 어노테이션으로 명시해야 하는 차이점이 있었던 것이다.
@RequestBody 를 SignupRequestDto 에 달아주는 것으로 해결.
2. Postman 으로 로그인 테스트시 unsuccessfulAuthentication 으로 빠지는 에러 발생
아직 해결하지 못했다...
다양한 위치에서 log를 찍어본 결과 클라이언트의 데이터는 제대로 넘어오지만, 로그인 검증이 실패하는 것으로 보인다.
return getAuthenticationManager().authenticate( new UsernamePasswordAuthenticationToken( requestDto.getUsername(), requestDto.getPassword(), null ) );
위 코드는 클라이언트가 입력한 정보와 DB에 존재하는 정보가 일치하는지 검증하는 attemptAuthentication 의 일부이다.
UsernamePasswordAuthentication 은 클라이언트가 입력한 정보를 가지고 토큰을 생성한다.
그 토큰을 가지고 AuthenticationManager가 .authenticate 메서드를 사용하여 검증을 한다.
검증을 성공하면 successfulAuthentication, 실패하면 unsuccessfulAuthentication 이 실행되도록
AuthenticationFailureHandler 의 메서드로 정의되어 있다고 한다.
즉 여기서 문제가 발생한 것이 유력한 상황인데, 납득하기 어려운 점이 있다.
정상적으로 동작하는 코드와 에러 코드의 차이점은 Thymleaf를 사용했는가, 아닌가의 차이이다.
또한, 필터 내부까지는 정보가 정상적으로 도착한 것 까지 log를 통해 검증을 마쳤다.
결국 방식이 어쨌든 attemptAuthentication 까지 똑같은 정보를 가지고 검증했다는 것인데, 왜 결과가 갈린 것일까?
정리하지 못한 자잘한 에러들 까지 겪다보니 하루가 사라져 있었다.
시간이 너무 늦어 내일 이어서 해결하려고 한다...
'개발 일지' 카테고리의 다른 글
2024-02-02 Auditing 기능, Header 방식으로 토큰 사용 (0) 2024.02.03 2024-02-01 인증 에러 해결 (0) 2024.02.01 [팀 프로젝트] 팀 소개 사이트 회고 (3) 2023.12.26 [팀 프로젝트] 동물 소개 사이트 회고 (2) 2023.12.26 2차 게시판 만들기 : 개선 사항 정리 (0) 2023.11.28