[ JWT ]
JWT (Json Web Token)
: JSON 포멧으로 저장하는 토큰의 종류. 쿠키 저장소를 이용한다.
구조
• Header : Typ, alg로 구성된다.
◦Typ : 토큰 타입 지정
◦alg : 알고리즘 방식 지정. 서명 및 토큰 검증에 사용
• Payload : 클레임(코튼에서 사용할 정보의 조각들)이 담겨있다.
◦ 등록된 클레임
◦ 공개 클레임
◦ 비공개 클레임
• Signature : 토큰을 인코딩하거나 유효성 검증할 때 사용하는 고유한 암호화 코드
JWT가 필요한 경우
서버가 2대 이상일 때, 로드밸런서가 해당하지 않는 서버에 요청을 보낼 수 있다. 이를 해결하기 위해서는
1. sticky session : clinet마다 서버를 고정한다.
2. 세션 저장소 생성 : 모든 세션을 저장한다.
3. JWT 사용 : 토큰이 들어왔을 때 검증한다. 단, 모든 서버가 동일하게 secret key를 가지고 있어야 한다.
JWT의 장단점
장점
- 동시 접속자가 많을 때 서버 측 부하를 낮춤
- client와 server가 다른 도메일을 사용할 때 유용함단점
- 구현의 복잡도 증가
- JWT가 커질수록 네트워크 비용 증가
- 이미 생성된 JWT를 만료시킬 방법이 없음
- secret key 유출 시 JWT 조회 및 조작이 가능함 (토큰에 중요 정보를 넣지 않아야 함)
JWT 사용 흐름
• 로그인 정보를 JWT로 암호화
• 서버에서 직접 쿠키 생성 → JWT를 담음 → client에 응답
• 서버에서 API를 요청할 때마다 쿠키가 포함되어 날라감 → 서버에서는 해당 쿠키를 request 객체에서 찾음 (JWT와 이름이 같은지 확인)
• server는 client가 전달한 JWT가 유효한지 검증 → JWT에서 사용자 정보를 가져올 수 있음
JWT 시작하기
라이브러리 추가
// build.gradle
compileOnly group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.5'
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.5'
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.5'
// application.properties
// secret key를 추가해두고 가져다 쓸 수 있음 (encoding)
jwt.secret.key=7Iqk7YyM66W07YOA7L2U65Sp7YG065+9U3ByaW5n6rCV7J2Y7Yqc7YSw7LWc7JuQ67mI7J6F64uI64ukLg==
'스파르타 내배캠' 카테고리의 다른 글
[TIL] #26. entity 연결 (0) | 2024.05.28 |
---|---|
[TIL] #25. HTTP 응답 상태 반환 (0) | 2024.05.28 |
[TIL] #23. 연관관계 (0) | 2024.05.24 |
[TIL] #22. 4주차 강의 (0) | 2024.05.22 |
[TIL] #21. spring 3주차 강의 (0) | 2024.05.21 |