2023. 12. 21. 18:34ㆍSpringboot
0. 개요
Spring boot의 Security을 이용하여 JWT Token을 만들고
회원 가입을 하면 Access token과 Refresh Token을 발급하고
로그인 절차에서 Access token이 유효한지 확인 후, 메인 페이지로 이동하는 절차
** 만약 Access Token이 유효하더라도 Refresh Token의 만료 기간이 지났다면
로그인은 되지 않으며 Refresh Token을 재발급 합니다.
1. Access Token이란?
1) Session방식이 아닌 SignatureAlgorithm.HS256을 사용한 jwtToken
2) 해당 Jwt Token은 인증에 필요한 정보가 토큰 안에 존재합니다.
// Payload에 email 또는 username이 들어가 있습니다.
3) 기존에 사용하던 Session&Cookie을 이용한 방식은 stateful한 특성을 가지는데,
Jwt Token은 stateless하게 가져갈 수 있다.
// Jwt Token을 사용하면 서버가 상태를 가질 필요가 없다.
4) 중간에 탈취 당하면 기존 내용이 존재하는 Payload의 정보를 볼 수 있다.
** 이로 인하여 Refresh Token을 통하여 피해를 최소화 시키고자 한다.
2. Refresh Token이란?
1) 기존의 Access Token은 탈취 당한다는 대비 하에 사용하는 Token입니다.
2) Refresh Token 또한 Jwt Token을 사용하는 형태입니다.
// Access Token은 db에 저장하지 않지만
// Refresh Token은 redis를 통해 저장하고 관리합니다.
// Refresh Token은 쿠키에 저장하고
// 보안 옵션(Http Only, Secure Cookie)를 사용하여 공격을 막습니다.
** HTTP Only Cookies : 클라이언트에서 자바스크립트로 쿠키를
조회할 수 있는데 해당 옵션을 활성화 하면 브라우저에서 쿠키에
접근할 수 없으므로 XSS와 같은 공격으로부터 안전하다.
** Secure Cookies : HTTP 프로토콜은 언제든지 패킷을 중간에 가로챌 수 있다.
그래서 보안개념을 추가한 HTTPS 프로토콜을 사용하여 데이터를 암호화해 통신한다.
문제는 HTTPS 로 전송되어야 할 정보가 휴먼에러로 인해 HTTP 로 전송될 때 가 있다.
그래서 HTTPS 프로토콜이 아닌 경우에는 쿠키를 전송하지 않도록 설정하는 옵션이다.
Session(세션)과 Token(토큰)의 차이는?
우선 HTTP의 프로토콜 상태에 알아보자. HTTP 는 stateless 한 특성 때문에 각 통신의 상태는 저장되지 않는다. 하지만 서비스에서는 어떤 유저가 기능을 사용하는지 특정할 수 있어야하는데 이를 위
velog.io
- 다음은 구현하기
'Springboot' 카테고리의 다른 글
LazyInitializationException (0) | 2024.02.05 |
---|---|
@Value, @ConfigurationProperties에 대해서 (0) | 2023.12.20 |
Spring boot를 이용한 게시글에 AWS S3 이미지 업로드 (0) | 2023.12.14 |
Spring boot 간단한 AWS S3 MultipartFile 업로드 (0) | 2023.12.13 |
Spring boot 순환 참조 문제 (0) | 2023.12.12 |