[T.I.L] 221221 - JWT 토큰 인증이 뭔데..? (+ 쿠키, 세션, 토큰)

권병석·2022년 12월 21일
1

T.I.L (스파르타)

목록 보기
18/22

어제 오늘 수많은 인증 방식에 대해서 공부했다.
보통 서버가 클라이언트 인증을 확인하는 방식은
대표적으로 쿠키, 세션, 토큰 3가지 방식이 있다고 한다.

https://inpa.tistory.com/559#JWT_(JSON_Web_Token)

자세한건 위 링크에 들어가보면 잘 나와있다.

내가 간단히 정리를 해보자면

쿠키 = (클라이언트에 저장) 문자열로 이뤄진 작은 기록 정보 파일 (서버랑 주고받는데, 보안에 취약하고 용량이 클 수 없음)

세션 = (서버에 저장) 쿠키의 보안적인 이슈떔에, 세션은 비밀번호같이 민감한 인증 정보들을 브라우저가 아닌 서버측에 저장함. (서버에 계속 저장하므로 사람이 많아지면 그만큼 서버를 많이 돌려야 하니 돈이 많이 든다.) stateful

토큰 = (클라이언트에 저장) 서버에 접속을 하면 서버에서 해당 클라이언트에게 인증되었다는 의미로 '토큰'을 부여함. 하지만 중요한 정보는 담을 수 없음. 제3자에게 토큰을 탈취당하면 답이 없음. stateless

자 이제 JWT가 그래서 도대체 뭔데?

간단히 말하자면 JWT도 토큰인데, access token, refresh token으로 이중으로 나누어서 인증을 진행함.
사용자가 로그인함 -> 서버에서 클라이언트로부터 인증 요청을 받으면
Header, PayLoad, Signature를 정의함. ->
Hedaer, PayLoad, Signature를 각각 Base64로 한 번 더 암호화하여 JWT를 생성하고 이를 쿠키에 담아 클라이언트에게 발급한다. -> 클라이언트는 서버로부터 받은 JWT를 로컬 스토리지 or 쿠키같은 곳에 저장한다. -> API를 서버에 요청할때 access token을 같이 보낸다. -> 서버에서 access token이 자신이 발행한 토큰인지 일치 여부를 확인해서 일치한다면 통과, 아니면 통과시키지 않음. -> 인증되면 정보응담 -> 서버에 요청을 했는데 만약 access 토큰의 시간이 만료되면 클라이언트는 refresh token을 이용해서 access 토큰을 재발급 요청함 -> access toekn을 다시 재발급 받는다.

access token = 클라이언트가 갖고있는 실제로 유저의 정보가 담긴 토큰으로, 클라이언트에서 요청이 오면 서버에서 해당 토큰에 있는 정보를 활용하여 사용자 정보에 맞게 응답을 진행

Refresh Token: 새로운 Access Token을 발급해주기 위해 사용하는 토큰으로 짧은 수명을 가지는 Access Token에게 새로운 토큰을 발급해주기 위해 사용. 해당 토큰은 보통 데이터베이스에 유저 정보와 같이 기록.

profile
Back-End 개발자를 꿈꾸는 디제이였던 백수의 TIL 일기장 입니다.

0개의 댓글