카카오 로그인 시, 카카오 토큰이 클라이언트에 노출되어도 무방한가요?

안녕하세요, REST API 방식으로 카카오 로그인을 개발중에 있습니다.

로직 상 카카오 토큰이 클라이언트에게 넘어가고, 서비스의 회원가입 API를 찌를 때 카카오 토큰을 넘겨받아, 해당 토큰을 서버에서 뜯어서 사용하고자 하는데, 이 때 카카오 액세스 토큰이 노출되게 됩니다.

클라이언트에 토큰이 노출되어도 무방한걸까요?

안녕하세요.

토큰이라고 하면 어떤 값을 말씀하시는건가요?


해당 이미지의 step 2에 해당하는 액세스 토큰을 의미합니다

JS SDK에서 사용자 접근 토큰 기반 API 사용이 필요한 경우 접근토큰을 클라이언트로 전달할 수 있습니다.

다만, 일반적으로 이처럼 접근 토큰을 클라이언트에 전달하여 사용하지 않으며 이와 같은 사용이 필요한 경우 서비스측의 각별한 보안 처리가 필요 합니다. (ex, https 프로토콜 내에서 전달, 동일 브라우저에서 다른 사용자가 접근토큰 사용하지 못하도록 조치 등)

또한, 말씀처럼 이를 다시 서비스로 전달하는 경우도 매우 드문데요
서비스 클라이언트에서 이를 사용해야만 하는 이유가 있을까요?

회원 정보를 추가적으로 기입받아 회원가입시키는 온보딩과정이 필요해서입니다.

현재 구현된 로직은

로그인 버튼 클릭 → 프론트가 백으로 인가코드 전달 → 백에서 토큰 발급 및 서비스 회원 여부 검증 → 비회원일 시 추가 회원가입 로직으로 유도

로 구현되어있습니다.

서비스 회원가입 시 필요한 정보는
이메일(카카오 이메일이 수정불가능한 필드로 자동할당)
성별
생년월일
등등을 받습니다. (비즈 앱이 아니라서 기본적으로 제공해주는 정보만 동의가 가능합니다.)

이 때, 회원가입 api를 호출했을 때 정상적인 요청이라는 것을 검증하기 위해서 카카오 토큰을 전달받고, 이를 검증한다면 정상적인 유저이므로, 카카오 토큰을 클라이언트에게 전달하고, 받고자 했습니다.

백엔드에서 접근토큰 발급 후, 클라이언트로 자체적인 CSRF 토큰을 발급하여 처리하시는 것을 권장 드립니다.

말씀과 같은 구현이 불가 하지는 않지만, 접근 토큰은 사용자의 정보 접근을 위한 인증을 위해 제공 되기에 사용 목적에 맞지 않습니다. 대부분의 경우 접근 토큰을 이와 같이 사용하지 않습니다.

1개의 좋아요

답변감사합니다.
CSRF 토큰이라함은 카카오에서 발급해주는 CSRF토큰이 아닌 자체적인 CSRF토큰을 말씀하시는걸까요?

넵, 맞습니다.

필요하신 경우 자체적인 CSRF 토큰 발급하여 검증 부탁드립니다.

다른 방법으로는 CSRF 발급 없이 카카오 로그인 시, 서비스측 인가처리(세션 or JWT 등)를 진행하여 유효한 요청 여부를 확인하실수도 있습니다.

답변 감사합니다 (_ _)