OAuth 2.0 개념을 처음 공부하면서 연동하고 있어서 토큰 관리하는 것에 대해서 궁금한 점이 있는데요,
액세스 토큰과 리프레시 토큰은 도대체 각각 어디에 저장해두고 써야 하는건가요? 몇시간동안 검색을 해봤는데 만족스러운 답이 나오지 않아서 결국 이렇게 여쭤봅니다. ㅠㅠ
또, 제가 찾은 답 중 가장 그럴싸 한 것은 액세스 토큰은 어차피 수명이 짧으니 쿠키에 넣어두고, 리프레시 토큰은 db에 넣어두되 그에 대한 무작위 index 값을 쿠키에 넣어놓고 쓰라는 것인데요. 이런 방식이 보안적으로 의미가 있는 조치인지, 그리고 만약 맞다면 xss나 csrf 공격은 어떻게 대비해야 하는지도 여쭤보고 싶습니다.
너무 기초적인 질문이라 부끄러운데, 제가 잡은 방향이 아예 틀렸다면 바로 잡아 주시면 감사하겠습니다. ㅠㅠ
우선 제가 이해한 바에 따르면, 카카오 로그인을 이용한 최초 회원가입 처리는
카카오 로그인 버튼 클릭 -> 크레덴셜 검증 -> 사용자 동의하고 계속 -> 연결 (인가코드 발급) -> 토큰 발급 -> 사용자 정보 받아오기 -> 데이터 생성 등 회원가입 처리
그리고 로그인 처리는
카카오 로그인 버튼 클릭 -> 크레덴셜 검증 -> 연결 (인가코드 발급) -> 토큰 발급 -> 로그인 처리
이런 흐름인 것 같습니다.
제가 궁금한 것은 아래와 같은데요
그렇다면 로그인 처리에서는 (1) 액세스 토큰을 서버 세션에 넣어두고 (2) 리프레시토큰을 DB에 저장하고 (3) 리프레시토큰을 참조할 수 있는 무작위 값을 쿠키에 넣어주면 되는 건가요?
oauth를 공부하면서 토큰 기반 로그인 기능에 대한 문서들을 읽어보니 토큰 기반 인증은 서버 세션을 사용하지 않는다는 것이 특징이라고 설명하던데 만약 1번이 맞다면 이 설명과 상충되는 것 같아서요, 어떻게 이해하면 될지 대강 힌트만이라도 주시면 감사하겠습니다. 참고로 PHP 환경에서 개발중입니다.