로그인과 access token, refresh token은 어떤 관계일까 (feat. 카카오 로그인)

카카오 로그인 문서를 참고하며 해당 용어들의 의미와 사용 맥락을 파악해보자.

https://developers.kakao.com/docs/latest/ko/kakaologin/common#intro-kakaologin

 


 

먼저 로그인이란?

로그인은 사용자가 자신을 인증해 서비스에 권한을 인가하는 절차입니다.

 

그렇다면 토큰이란?

카카오 로그인은 사용자의 로그인 완료 시 보안 데이터인 토큰을 서비스에 발급합니다.

 

서비스(카카오 로그인을 의뢰한 앱 등)는 이 토큰을 사용하여...

서비스는 토큰을 요청에 포함해 요청의 자격을 증명할 수 있습니다.

 


카카오 로그인 진행 과정

1. 사용자는 '카카오로 로그인하기' 버튼을 클릭하여 서비스에 로그인을 요청한다.

2. 서비스는 카카오에 '인가 코드'를 요청한다.

3. 카카오는 (서비스가 구라치는 건 아닌지 확인하기 위해서) 사용자에게 창을 띄워서 '너 이거 요청한거 맞아?'라고 직접 되물어본다.

4. 사용자가 카카오에게 '응 맞아.'라고 대답해준다. (사용자 동의 완료) ===> 인증, 인가가 완료되었다고 본다. (인증,인가에 대해 후술)

5. 카카오는 서비스에게 'ㅇㅋ확인완. 계속 진행해.'하고 연락한다.

그런데 이 때 카카오는 어떻게 서비스 서버를 찾을 수 있는걸까?
바로바로.... 서버가 '여기로 연락해~'라며 미리 URL을 전달해주었기 때문! (이걸 리다이렉션이라고 한다.)

6. 서비스는 인가 코드를 사용하여(이거 언제 받는거지 리다이렉션 할 때 받나? 확인필요 리다이렉트할 때 같이 전달해줌) 카카오에게 토큰 발급을 요청한다.

7. 카카오는 서비스와 사용자를 '연결'한다.

8. 카카오는 서비스에게 사용자에 대한 토큰을 쥐어준다.

9. 이후 서비스는 토큰을 사용하여 카카오에게 사용자 정보를 요청한다. (이메일주소 등)

10. 서비스는 받은 정보를 사용하여 기존 회원일 경우 로그인을, 아닐 경우 서비스 DB에 회원 등록을 처리한다.

11. 서비스는 처리 후 사용자에게 로그인 세션을 발급한다. (뭔소리지)

12. 사용자는 세션을 사용하여 로그인이 완료되고, 사용자가 보는 화면이 달라지며 로그인 처리가 끝난다.

 

최초로그인이랑 그뒤로그인이랑 시퀀스 다이어그램이 서로 다른가? 같은가?


'인증'이란

너 진짜 '그' 인간이냐...?는 걸 확인하는 절차이다.

대표적인 인증 방법은 사용자의 ID와 PWD를 확인하는 것이 있다.

카카오 로그인은 카카오톡을 실행하여 ID/PWD를 인증하게 된다.

 

'인가'란

너 이거 진짜 할거냐...?는 동의를 얻는 과정이다.

서비스를 사용할 때 넘어가버리는 '이름', '성별', '이메일주소' 등을... 진짜로 이 서비스에 넘길거냐...?는 동의를 얻는 과정

[필수] [선택] 이런거 뜨는 그 팝업창이 바로 '인가'과정의 팝업창이다.

 

'토큰'이란

토큰은 '이 사람 정상이예요'를 보장해주는 가상의 신분증이랄까..

카카오에서 직접 보장해주는 온라인 신분증. 얼마나 든든한가요. 그런 느낌입니다.

이 토큰에는 액세스 토큰Access Token과 리프레스 토큰Refresh Token이라는 게 있는데요...

ㄴ액세스 토큰

'확실한 진짜 신분증'이라고 할 수 있습니다..

근데 효과가 너무 강력하다보니까 보안이나 신경쓸게 많아서 만료 시간이 짧습니다. (카카오 로그인의 경우 최대 12시간)

저희도 운전면허증 발급 받으면 10년마다 갱신해야하죠? 그런 느낌입니다.

ㄴ리프레시 토큰

그런데 이제 운전면허증을 12시간마다 갱신하라고 하면 사람 미치겠죠? 그래서 나온 게 리프레시 토큰입니다.

말 그대로 '액세스 토큰'을 '리프레쉬(갱신)'해주는 것입니다.

이 때 별도의 인증을 진행하지 않고, 액세스 토큰을 계속 새로 갱신 갱신 갱신하는 것입니다.

말하자면 경찰서 방문 없이 집에서 폰으로 쉽게 면허증을 새로 발급 받는 느낌이랄까요 -_-^

 

토큰 사용법

일반적으로 어세스 토큰은 API 통신할 때 요청 헤더에 끼워 사용된다.