토큰기반 인증

이재진·2020년 12월 10일
0

토큰기반 인증의 필요성

세션기반 인증은 서버 또는 데이터베이스에 유저 정보를 담아서 인증해주는 방식 이었음.

서버는 유저가 민감하고 제한된 정보를 요청 할 때마다 해당 유저에게 정보를 줘도 괜찮은지 확인하기 위해서 가지고 있는 세션값과 일치 하는 지 확인한다.
그러나 매번 요청 시 마다 데이터베이스를 살펴봐야 하는 부담이 작용.
이 부담을 클라이언트에게 넘겨줄수 없을까 해서 고안.
이럴 때 사용할수 있는 인증 방식이 토큰이다.

대표적인 토큰 기반의 ex) JWT (JSON Web Token)

토큰 기반 인증의 순서


1.클라이언트가 서버에 아이디/비밀번호를 담아 로그인 요청을 보낸다.
2.서버는 아이디/비밀번호가 일치하는지 확인하고, 클라이언트에게 보낼 암호화된 토큰을 생성한다.

  • access/refresh 토큰을 모두 생성한다.
  • 토큰에 담길 정보(payload)는 유저를 식별할 정보, 권한이 부여된 카테고리(사진, 연락처, 기타등등)이 될 수 있다.
  • 두 종류의 토큰이 같은 정보를 담을 필요는 없다.

3.토큰을 클라이언트에게 보내주면, 클라이언트는 토큰을 저장한다.

  • 저장하는 위치는 local storage, cookie, react의 state 등 다양하다.

4.클라이언트가 HTTP 헤더(authorization 헤더)에 토큰을 담아 보낸다.
5.서버는 토큰을 해독하여 맞다라는 판단이 될 경우, 클라이언트의 요청을 처리한 후 응답을 보내준다.

토큰기반 인증의 장점
1. Statelessness , Scalability (무상태성, 확장성)

  • 서버는 클라이언트에 대한 정보를 저장할 필요가 없다.
  • 서버는 토큰 해독이 되는지만 판단한다. 그래서 서버와 데이터베이스의 부담을 줄여준다.
  • 클라이언트는 새로운 요청을 보낼때 마다 토큰을 헤더에 추가함으로 인증절차가 완료된다.
  • 서버가 여러개 일 경우 하나의 토큰으로 여러 서버에서 인증 가능.

2.안정성

  • 암호화 한 토큰을 사용.
  • 암호화 키를 노출 할 필요가 없다.

3.어디서나 생성 가능

  • 토큰을 생성하는 서버가 꼭 토큰을 만들지 않아도 된다.
  • 토큰 전용 서버 만드는 것도 가능.

4.권한 부여에 용이하다.

  • 토큰의 payload(내용물) 안에 어떤 정보에 접근 가능한지 정의.
  • ex) 사진과 연락처 사용권한 부여 / 사진 권한만 부여 / 연락처 권한만 부여
profile
개발블로그

0개의 댓글