Access Token

Nam Eun-Ji·2020년 11월 26일
0

HTTP

목록 보기
6/9

Access Token이란?

Access Token을 설명하기 전에 HTTP 통신에 대해 먼저 간단히 언급하고 넘어가야할 것 같다.
HTTP 통신은 기본적으로 request와 response로 이루어져있는데, 이는 독립적으로 이루어진다. 즉 각각의 통신들은 자신의 통신정보만 알고 있을 뿐, 다른 통신의 내역은 알 수 없다. 때문에 stateless라는 상태를 유지하지 않는다는 속성을 가지게 된다.
그런데 이때 만약 유저가 로그인 후 마이페이지에 접속하고자 한다면 HTTP의 stateless 속성때문에 마이페이지와 관련된 API가 어떤 유저의 정보를 전달해야하는지 알 수 없게 된다. 그래서 이 때 필요한 것이 access token으로 로그인이 성공적으로 이루어졌다는 암호문 형태의 증서같은 개념이다. access token으로 유저가 요청하는 request를 실행할 수 있는 권한이 있는 유저인가를 확인할 수 있고, 또 해당 토큰이 유요한지의 여부를 검증함으로써 인증 절차를 수행한다.




Access Token과 Refresh Token의 차이점은?

Access Token에는 만료 기한이 있어 영구적인 것이 아니고 보안상 이유로 짧은 유효 기간을 가지고 있는 반면 Refresh Token은 긴 유효 기간을 가지고 있다. Access Token을 서버에 보내 데이터를 받다가 기간이 만료되어 서버로부터 토큰에러가 날 경우에 Refresh Token을 서버로 보내 갱신한 Access Token을 전달받는다. 경우에 따라서 Refresh Token이 같이 갱신되어서 발급되기도 한다.
하지만 여기서 Access Token이 만료되면 스스로 갱신하면 되지않나라는 의문이 생길 수 있다. 만약 Access Token이 노출되더라도 Access Token은 유효기간이 짧기 때문에 해커가 이를 남용할 제한된 시간을 가지게 된다.




Session vs Token

Session

Session 기반 인증에서 서버는 사용자가 로그인 한 후 사용자에 대한 session을 생성한다. session ID는 사용자 브라우저의 쿠키에 저장된다. 사용자가 로그인 상태를 유지하는 동안 쿠키는 모든 후속 요청과 함께 전송된다. 서버는 쿠키에 저장된 session ID를 메모리에 저장된 session 정보와 비교하여 사용자의 신원을 확인하고 해당 상태로 응답을 보낸다.

문제점

  • 서버의 부하(세션 저장소의 부하)
    - 세션을 각 서버에 저장하지 않고 세션 전용 서버, DB에 저장해도 문제가 생긴다.
    - 모든 요청 시 해당 서버에 조회해야 한다. DB부하를 야기할 수 있다.
  • CORS(웹/앱 간의 상이한 쿠키-세션 처리 조직)
    - 기존의 client는 웹브라우저가 유일했다. 그러나 이제는 모바일로 접근하는 경우도 처리해야한다.
    - 웹/앱의 쿠키 처리 방법이 다르고 또 다른 client가 생겨나면 쿠키-세션에 맞게 처리해야한다.
  • 확장성(서버 확장 시 세션 정보의 동기화 문제)
    서버가 스케일아웃돼서 여러개가 생기면 각 서버마다 세션정보가 저장된다.
    로그인 시(서버1), 새로고침(서버2)로 접근하면 서버는 인증이 안됐다고 판단한다.
  • cookie와 차이점 : 쿠키는 정보를 클라이언트에 저장하고 세션은 정보를 서버에 저장

Token

많은 웹 애플리케이션은 Session 대신 token(대표적 JWT)을 사용한다. Token 기반 애플리케이션에서 서버는 token을 생성하여 클라이언트로 보낸다. 클라이언트는 token을 저장하고 (보통 로컬 스토리지에) 요청마다 헤더에 token을 포함시킨다. 그러면 서버는 클라이언트의 모든 요청으로 token의 유효성을 검사하고 응답을 보낸다.


차이점

토큰은 사용자의 상태를 저장하지 않기 때문에 별도의 인증서버가 필요없다. 따라서 요청을 받을 서버 자체에서 인증 프로세스를 수행할 수 있다. 또한 JSON포맷으로 통신하기 때문에 어떤 client에서든 data통신에 JSON을 이용하면 토큰을 이용할 수 있다. 대부분의 최신 웹 응용 프로그램은 확장 성 및 모바일 장치 인증을 포함하여 인증을 위해 JWT를 사용하고 있다. 하지만 토큰에 사용자의 정보가 들어가기 때문에 유출 시 위험할 수 있다는 단점도 존재한다. 그렇기 때문에 어떤 것을 사용하는지는 목적성에 맞게 고르길 바란다.

profile
한 줄 소개가 자연스러워지는 그날까지

0개의 댓글