Beauty-inside / stocking-backend

주식 및 자산 관리 APP 서버 프로젝트
0 stars 3 forks source link

JWT + Spring Security 인증/인가 프로세스 #18

Open s4ng opened 3 years ago

s4ng commented 3 years ago

개요

백엔드 프로젝트에서 사용할 인증 및 인가 프로세스에 대해서 간략하게 설명하고 내용 정리

JWT

서버의 데이터 접근 권한을 설정하고, 해당 권한에 맞는 사람에게만 데이터 접근을 허용하는 것을 인증/인가 라고 한다. 기존에 많이 사용되었던 인증 방식으로는 세션을 이용한 인증 방식이 있다. 하지만 이 방식은 서버에 세션 저장소가 필요하고, 결국 서버의 부하 증가로 이어지기 때문에 최근 Access Token을 이용한 인증 방식을 많이 사용하고 있다.

JWTJSON Web Token의 줄임말로, 문자열로 이루어진 토큰(키)이라고 할 수 있다. jwt안에 사용자 이름이나 권한, 만료 기간등을 넣고 서버에 접근할 때 권한 인증용 키로 사용할 수 있다. 자세한 설명은 구글링이나 여기

Spring Security

Spring에서는 보안에 관한 모든 것을 관리할 수 있는 Spring Security라는 라이브러리가 존재한다. 해당 라이브러리는 본래 Session을 이용하기 때문에, JWT를 이용한 인증 인가를 사용하기 위해서는 따로 설정을 해주어야 한다.

인증/인가 프로세스

Spring Security에서는 모든 웹 요청을 감독하고 있다가, 특정 end-point로 들어오는 요청에만 인증을 요청할 수 있다. 따라서 유저와 관련된 데이터에 접근하는 요청에는 JWT를 Header에 포함하여 보내야 인가를 내어주는 방식을 사용하기로 한다.

JWT를 이용한 인증/인가 시스템은 https://bcp0109.tistory.com/301 https://webfirewood.tistory.com/115 여기를 참고하였음.

간단하게 설명하면, 회원가입을 하고나서 로그인을 성공하게 되면 JWT로 만들어진 Access Token과 Refresh Token을 생성해서 발급해주는데, 서버는 Refresh Token을 DB에 저장하고 클라이언트에게는 Access Token과 Refresh Token을 모두 보내주게 된다.

이후 클라이언트는 브라우저의 특정 위치(cookie나 Local Storage 등)에 보관하고 있다가 인증이 필요한 HTTP 요청을 보낼 때 헤더에 Access Token을 포함해서 보내게 된다.

보통 Access Token은 만료 기간을 30분으로 설정하고, Refresh Token은 7일에서 6개월 까지 원하는 만큼 설정하고는 한다. Refresh Token은 이 Access Token이 만료되었을 때, 서버에 보내서 다시 Access Token을 재발급해주는 데 사용하게 된다. Refresh Token을 서버에 저장할 때 보통 여러번 생성하고 삭제하고 하기 때문에, RDB에 저장하기 보다는 Redis를 이용하여 저장하곤 한다는데, 이 기회에 한 번 사용해 보는 것도 나쁘지 않은 듯

yoonwooseong commented 3 years ago

와 JWT해보면 도움 많이 될 것 같음