Access Token과 Refresh Token이란 무엇인가?

프로그래밍/그 외2017. 11. 24. 12:19

안녕하세요. 개발자 드리머즈입니다.    


[카카오 아이디로 로그인하기]에서나.. 네이버, 페이스북을 통한 로그인 시에 access token과 refresh token에 관한 내용을 들을 수 있습니다.


대충 뭐하는 녀석들인지는 알겠는데, 호기심이 생겨 조금 더 알아봤습니다.


일단 이러한 개념은 OAuth(Open Auth)에서 나왔습니다. OAuth 덕분에 로그인이 편해졌습니다. 카카오를 예로들면, 만약 단말이 카카오톡에 로그인 된 상황이라면, 카카오톡 앱이 아닌 다른 App에서 다시 카카오 계정의 ID와 비밀번호를 입력할 필요 없이 손쉽게 카카오 계정으로 로그인할 수 있습니다.


카카오 디벨로퍼 공식홈에는 아래와 같은 설명이 있습니다.

(https://developer.kakao.com/docs/ios/user-management)

해당 로그인 기능은 OAuth 2.0을 지원합니다. 다음은 카카오 플랫폼 서비스에서 제공하는 가장 일반적인 OAuth 인증의 과정입니다.

  1. 사용자는 카카오계정으로 로그인 버튼을 클릭합니다.
  2. 카카오톡 앱에 연결된 카카오계정의 자격정보(Credentials)를 통해 사용자를 인식합니다.
  3. 자격정보가 올바르다면 사용자(Resource Owner)로부터 접근 자원에 대한 동의/허가를 얻습니다.
  4. 위 3까지 성공적으로 수행되었다면 인증 코드(Authorization Code)가 발급됩니다. 해당 인증 코드는 Redirection URI를 기반으로 Third 앱에 전달됩니다.
  5. Third 앱에서는 전달받은 인증 코드를 기반으로 사용자 토큰(Access Token, Refresh Token)을 요청하고 얻게 됩니다. 


제가 좀 전에 가정한 상황을 OAuth 관점에서 본 것이 위의 설명입니다. 이렇게 OAuth 인증에 성공하면 Access Token과 Refresh Token을 얻게 됩니다.


카카오 디벨로퍼 사이트에서는 Access Token과 Refresh Token을 묶어서 사용자 토큰이라고 부릅니다.

중요한 키로 사용된다고 합니다.

사용자 토큰은 카카오 플랫폼 서비스에서 제공하는 로그인 기반의 기능을 사용하는데 있어 중요한 키로 사용됩니다. OAuth 2.0의 보다 자세한 내용은 여기를 참고하세요. 


실제로 최근 뉴스를 보면, 페이스북의 Access Token으로 인한.. 해킹? 피해가 화제가 되기도 했습니다.

(http://www.yonhapnews.co.kr/bulletin/2017/04/19/0200000000AKR20170419180400033.HTML?input=1195m)


여기에는 아래와 같은 설명이 있습니다.

20일 IT(정보기술) 업계에 따르면 엑세스 토큰은 페이스북 계정의 보안 권한을 제3자에게 넘겨준다는 암호문 형태의 '증서'다.

사실상 나의 계정 ID와 비밀번호를 넘겨주는 것과 마찬가지다.


간단하게 보면, 액세스 토큰은 카카오 계정으로 성공적으로 로그인 했음을 증명하는 암호문 형태의 증서입니다. 그래서 이 액세스 토큰을 이용해서 많은 일들을 할 수 있어 ID와 비밀번호를 넘겨주는 것과 비슷합니다.


하지만 액세스 토큰에는 만료 기한이 있어 영구적인 것이 아닙니다. 오히려 보안상 이유로 짧은 유효 기간을 가지고 있다고 합니다. 대신에 Refresh token은 긴 유효 기간을 가지고 있습니다. Access Token이 만료됐으나 Refresh token이 만료되지 않은 경우, Access Token을 갱신하여 유효하게 할 수 있습니다.

그런데 왜 Refresh token이 필요한지 의문을 가질 수 있습니다. Refresh token없이 Access Token만 사용하고, 이 토큰이 만료되면 스스로 갱신하면 안되는 지와 같은 의문들이죠. 제가 보안 전문가가 아니라 잘은 모르겠지만 stack overflow를 참고하면 아래의 의견이 있습니다.

(https://stackoverflow.com/questions/3487991/why-does-oauth-v2-have-both-access-and-refresh-tokens/12885823#12885823)


The idea of refresh tokens is that if an access token is compromised, because it is short-lived, the attacker has a limited window in which to abuse it.

만약 액세스 토큰이 노출되더라도 이 토큰은 유효기간이 짧기 때문에 해커는 이를 남용할 제한된 시간을 가지게 된다.

Refresh tokens, if compromised, are useless because the attacker requires the client id and secret in addition to the refresh token in order to gain an access token. 

만약 리프레시 토큰이 노출되더라도 이는 쓸모가 없다. 왜냐하면 액세스 토큰을 얻기 위해 해커는 클라이언트 id와 secret이 추가로 필요하기 때문이다.


보안상 둘 다 사용하는 것으로 이해하시면 되겠습니다.


*참고

Oauth 2.0 공식 홈: https://oauth.net/2/


작성자

Posted by 드리머즈

관련 글

댓글 영역