BackEnd

JWT 토큰 서버 구축하기 (인가/인증) (7) - 전체 기능 테스트

dog-pawwer 2024. 4. 9. 01:17
반응형

자 모든 기능 구현이 끝났다.

POSTMAN으로 테스트를 해보자!

 

1. 아무 인가/인증도 걸려있지 않은 http://localhost:8080/ 에 접근

- Filter

- Controller

- .anyRequest().permitAll() 에 걸리게 되어 인증하지 않아도 통과할 것이다!

 

1-1. Success Case

index라고 200 OK가 온다!

 


2. 로그인 없이 http://localhost:8080/user에 접근

- Filter

- Controller

- .requestMatchers("/user/**").authenticated() 가 걸려기에 User 권한을 가진 사용자가 로그인 하지 않으면, Error가 날 것!

 

2-1. Error Case

 


3. 로그인 테스트

3-1. Success Case : Body에 DB에 있는 사용자로 접근

3-2. Error Case : 형식에 맞지 않은 Body

ErrorHandler, Response 를 해놓지 않았다! 해주길 바란다.

- 중요한 점은 401 에러

3-3. Error Case : DB에 없는 사용자로 접근

이 부분은 BadCredentialsException이 throw된 것을 알 수 있다.

 

3-3. 과연 Redis에서 작동한걸까?

- 로그인 후, RefreshToekn이 Redis에 저장되었나?

Key 값 모두 조회
username으로 들어가 있다.

해당 Key를 조회해보니, RefreshToken이 저장되어 있다!


4. 발급받은 AccessToken을 들고, http://localhost:8080/user에 재접근

4-1. Success Case

4-2. Error Case : AccessToken이 Valid 하지 않을 때!

- MalformedJwtException 이 throw 된 것을 볼 수 있다!

(이에 대한 알맞은 ErrorHandling을 해주자!)

4-3. Error Case : 만료된 AccessToken을 들고 접근

(이 또한, ExpiredJwtException이 났을 때 응답에 대해 Handling 해주자!)

 


5. RefreshToken을 들고, http://localhost:8080/reissue에 접근하여 재발급 받기

5-1. Success Case

 

- 토큰 쌍이 재발급 되는 것을 알 수 있다!!

5-2. Error Case : AccessToken이 Valid 하지 않을 때!

MalformedJwtException

5-3. Error Case : 만료기간이 지난 RefreshToken을 들고 접근

ExpiredJwtException

(해당 Exception들에 대해서도 핸들링 해주자!)

 


6. 로그아웃 

6-1. Success Case

6-2. 과연 Redis에서 작동한걸까?

- 로그아웃 후, RefreshToken은 지워졌나?

모든 KEYS를 검색해 보았지만, "jinho7"은 찾을 수 없다! => 성공

- 로그아웃 후, AccessToken은 블랙리스트 처리가 되었나?

그리고 방금 보냈던 AccessToken은 "logout" Value값을 가지고 저장되었다!

 

6-3. 다시 해당 AccessToken으로 접근한다면?

 

403 Forbidden이 뜬다!!!!!

 

 

모든 기능 구현/테스트 완료!

 

(Error/Exception 처리는 따로 해주도록 하자!)

반응형