서론
이전 해커톤을 진행하면서, api에 사용자 정보를 담아 '직접' 전송했었다. 그때도 'api요청을 조작해서 다른 사용자 정보를 전달하면 어떡하지?'라는 생각을 했지만 시간이 빠듯하기도 해서 해결하지 못하였다. 이후 찾아보니 서버에서 추가로 개별 토큰을 발행해 해결한다는 것을 보고, 이에 대해 공부하고자 한다.
(구현 코드는 추후 추가 예정)
JWT

- header : 해시 알고리즘의 종류가 담겨 있음
{
"alg" : "HS256",
"typ" : "JWT"
}
- payload : 실제 사용될 정보를 담고 있음
{
"email" : "example@naver.com",
"age" : "23"
}
- signature : (헤더+페이로드)와 서버가 가진 key값을 합친것을 헤더 알고리즘으로 암호화한다
JWT를 활용해 Spring에 구현하는방법
- 사용자가 로그인(카카오, 네이버 등) 요청을 보냄
- oAuth2를 통한 로그인 처리 이후 유저 정보 가져오기(참고 : https://chabin37.tistory.com/18)
- 유저 정보를 통해 db에 사용자 조회→사용자의 refresh토큰에 저장
- refresh토큰 활용해서 access토큰 발급
- refresh, access토큰을 클라이언트로 반환
위의 과정을 통해, 서버 내 토큰을 발급해서 클라이언트에 전송한다.
토큰을 활용해서 사용자 정보 활용하기
- http 메서드 활용할때 토큰까지 같이 전송
- 사용자를 확인하고, 그에 대한 요청을 처리, 결과 반환
access토큰 만료시, refresh토큰을 통해 access토큰 새로 발급
유저 엔티티에, 유저(일)-refresh(다) 관계로 설정(다양한 기기에 refresh토큰 사용)
- access토큰을 활용한 http메서드 요청보냄
- 토큰이 만료되서, access토큰 만료 오류 반환
- 클라이언트에서, refresh토큰을 보내 새로운 access토큰 요청
- 새 access토큰 반환
'Backend > Spring' 카테고리의 다른 글
| 스프링 Security (0) | 2025.04.12 |
|---|---|
| [Spring] HTTP 통신구조 기초 이해 (0) | 2025.03.14 |
| [Spring] Websocket을 활용한 STOMP (0) | 2025.03.11 |
| [Spring]oAuth2를 이용한 카카오 로그인 (1) | 2025.03.10 |
| 테스트 커버리지(구문, 조건, 결정) (1) | 2024.10.04 |