Knowledge/Trouble Shooting

JWT 토큰 사용 시 인증이 되지 않았다는 문제 발생

똑똑한망치 2024. 7. 5. 17:51
728x90
반응형

🚨 문제

로그인은 정상적으로 작동하여 JWT accessToken까지 정상적으로 생성되었다.

하지만 생성된 AccessToken을 사용하려고 할 때 문제가 발생했다.

console창에도 어떠한 로그가 나타나지 않았고 filter에서 걸러진다는 것을 짐작했다.

 

Debug를 하면서 천천히 다시 과정을 따라가 보았다.

 

 

더보기

UsernamePasswordAuthenticationToken [Principal= eyJhbGciOiJIUzM4NCJ9.eyJzdWIiOiJ0ZXN0MSIsImF1dGgiOiJVU0VSIiwiaWF0IjoxNzE5NTYwMjIzLCJleHAiOjE3MTk1NjM4MjN9.ZyzX9XetqAteu81p2K3N5vYTWHmuBorxODTZ_piHYJreGKseNk096O5hRUGKP9jm, Credentials=[PROTECTED], Authenticated=false, Details=null, Granted Authorities=[]]

디버깅을 하면서 객체의 값을 따라가고 있는 도중에 jwtTokenProvider에서 getAuthentication(token) 메서드를 실행했을 때 생성된 Authentication 객체는 Authenticated = false 로 인증이 되어 있지 않고 Granted Authorities 에 null이 들어있는 것을 알 수 있었다.

 

 

[변경 전 코드]

 

UsernamePasswordAuthenticationToken(accessToken, authorities)에서 문제가 발생하는 것으로 생각이 들어 자세히 뜯어보기 위해 들어갔다.

 

public UsernamePasswordAuthenticationToken(java.lang.Object principal, java.lang.Object credentials) { /* compiled code */ }

public UsernamePasswordAuthenticationToken(
    java.lang.Object principal, 
    java.lang.Object credentials, 
    java.util.Collection<? extends org.springframework.security.core.GrantedAuthority> authorities
    ) { /* compiled code */ }

 

UsernamePasswordAuthenticationToken의 생성자는 2가지 종류가 있었다. 

 

💡 권한을 포함하고 싶으면 아래의 생성자를 사용해야 하는데 나는 값을 2개 밖에 주지 못했던 것이다💡

 

[변경 후]

 

accessToken과 authorities 사이에 credentials 값을 추가했더니 정상적으로 작동했다!!!

 

앞으로 생성자를 사용할 때 잘 확인하고 사용하자!!

반응형