[카카오로그인] Android SDK를 사용해 로그인 시 state 사용에 대한 문의

카카오로그인 SDK 2.14.0


안녕하세요. :slight_smile:
안드로이드SDK를 사용해 로그인시 state변수에 관한 질문입니다.

CSRF 공격 방지를 위해 로그인할때 state변수를 추가해서 로그인 요청을 보냈습니다.

AuthCodeClient.instance.authorizeWithKakaoAccount(
    context = context,
    state = "STATE"
) { /* */ }

로그인 승인 이후 딥링크를 통해서 앱으로 state 값이 정상직으로 앱으로 전달 되었지만, 콜백에서는 code 값만 확인 할 수 있고 state값을 확인 할수 없습니다.

kakao${NATIVE_APP_KEY}://oauth?code=${CODE}&state=STATE

콜백에서는 code값만 얻을 수 있도록 되어있는데, 클라이언트에서 state값을 검증할 방법이 있는지 알고 싶습니다.

그리고 다른질문에서 답변주신 내용에 따르면 PKCE 스펙이 적용되어 있다고 하셨는데, PKCE 스펙이 적용되었으니 CSRF에 관련된 부분(state값 검증)에 별도로 신경쓰지 않아도 되는걸까요?

감사합니다!

안녕하세요.

인가코드요청과 리다이렉트 URI간 state검증으로 CSRF(Cross-site request forgery) 공격 방지는 보안상 권장하고 있습니다.

참고. 보안권장사항 Kakao Developers

하지만,
Android, iOS Native SDK는 REST-API 또는 JS SDK와 달리
인가코드요청과 앱으로 리다이렉트 및 토큰발급까지 SDK를 통해 한번에 이루어지므로

인가코드요청 부터 액세스 토큰발급까지의 더 넓은 과정을 검증하는
PKCE스펙이 가로채기 공격에 대응하는 더 강력한 조치이므로 Android, iOS Native SDK에서는 state 를 제공하지 않고 있습니다.

더불어, Android, iOS Native SDK에서는 리다이렉트 URI 응답에 개발자가 개입하지 않으므로 설정을 제공하는 것이 의미 없습니다.

추가로, PKCE스펙이 적용된 인가코드요청의 인가코드를 탈취한다해도 해당코드로 액세스토큰을 발급 받을 수 없습니다.
(인가요청 시 code_challenge가 전달되었다면 토큰발급 시 상응하는 code_verifier가 전달되어야 정상 작동합니다.)

아래 내용 참고 해보시면 좋을 것같습니다.

PKCE https://datatracker.ietf.org/doc/html/rfc7636

1개의 좋아요

답변 감사합니다!

1개의 좋아요