Spring Security Authentication 트러블 슈팅

진병욱·2024년 1월 28일
0

개발 일지

목록 보기
2/3
post-thumbnail

Spring Security + 네이버 아이디로 로그인을 구현하던 중에 생긴 Authentication 트러블 슈팅

🙇‍♂️ 시작하기전에..

시간은 좀 흘렀지만, 이슈를 해결하면서 spring security, SNS 연동 로그인에 대해서도 많이 알게 되고
프로젝트를 진행하면서 겪었던 첫 이슈였기에 기록해두려고 한다. (혹시 다른사람도 도움이 될 지도..?)

처음 Spring Security 설정과 OAuth2 연동을 하기 위해서 여러 블로그를 많이 찾아보고 참고했다.
그 중에서도 https://wildeveloperetrain.tistory.com/252 여기 블로그를 많이 참고했다.
이 자리를 빌려 감사의 말씀을 드립니다.

프로젝트의 백엔드 환경은 아래와 같다.

  • Java 11
  • Spring Boot 2.7.14
  • Spring Security 2.5
  • JPA, Querydsl
  • Mysql 8
  • gradle

발생한 문제

네이버 아이디로 로그인을 통해 회원가입 + 로그인 구현을 완료했고
그 이후에 Authentication 설정 관련해서 문제가 생겼다.

원래대로라면,
로그인 -> 회원 정보 -> JWT 생성 -> 헤더 + JWT 포함 API 요청 -> 헤더를 통해 유저 확인

대략적으로 위와 같은 과정을 통해 유저 확인이 이루어진다.

컨트롤러단에서 해당 유저를 확인하는 방법이 있다.

@GetMapping("/list/{memberId}")
public Response<Page<ScrapListResponseDto>> scrapList(@PathVariable String memberId,@Parameter(hidden = true) @AuthenticationPrincipal UserPrincipal userPrincipal, @PageableDefault(size = 20) Pageable pageable) {
    // 기타 코드들 ..
}

위 코드는 Authentication이 사용되는 코드의 일부이다.
위와 같이 컨트롤러에서 @AuthenticationPrincipal UserPrincipal 을 통해서 해당 유저에 대한 정보 확인이 가능해야한다.

근데 어찌된 이유에서인지 NullPointerException이 발생했다.

시도한 방법들

첫번째 시도 방법

로그 확인해보기

어떤 버그가 생겼을 때, 가장 빠르게 확인이 가능한 방법이다.

먼저, 로그를 통해 확인해보니 userprincipal.getId()가 null이었다.

userprincipal이 null인지, 세팅을 잘못한건지, userprincipal 자체가 문제인지 확인해보기 위해
두번째 시도 방법으로 넘어가 보자

두번째 시도 방법

이번엔 디버깅을 해 보자!

일단 문제가 userprincipal에서 발생했으니, 해당 부분을 중단점을 찍어서 디버깅을 해 봤다.

null이 발생한 것을 알 수 있다.

아예 세팅이 되지 않아서 혹시 다른 principal도 사용해봤다.

null은 아니지만 내가 설정했던 값이 아님을 확인했다.

Userprincipal 자체에 값이 세팅이 되지 않은 것 같아서, 해당 값을 세팅해주는 곳을 찾았다.
헤더에서 jwt 토큰을 꺼내 principal을 생성하는 과정을 따라가 봤다.

인증과정에서

    //UserDetails 객체를 만들어서 Authentication 리턴
    UserDetails principal = new User(claims.getSubject(), "", authorities);
    return new UsernamePasswordAuthenticationToken(principal, "", authorities);

위와 같이 userdetails 객체와 권한을 통해 인증처리를 해주는 것을 확인했다.
userprin

profile
새로운 기술을 접하는 것에 망설임이 없고, 부족한 것이 있다면 항상 배우고자 하는 열정을 가지고 있습니다!

0개의 댓글

관련 채용 정보