Scope=friends 로 아무리 동의를 받아도 처리가 안됩니다

안녕하세요.
개발자 센터에 새로운 어플리케이션을 테스트중인데요.
불과 10일전까지만 해도 다른 계정의 어플리케이션에서 문제가 없었는데, 새로 만든 어플리케이션에서는 계속 이런 현상이 있습니다.
scope=friends 를 사용하면 ‘카카오 서비스내 친구목록(즐겨찾기 친구포함)’ 동의 화면이 뜨고 몇번을 진행해도 친구목록 api 호출시 아래와 같은 응답을 받습니다.
카카오톡 앱에서 뭔가 허용해야 할 게 있나요? 동의를 했음에도 카카오톡 앱에서 연결된 서비스 관리에 해당 동의 항목이 나오지도 않습니다.
아래 저와 비슷한 현상을 겪은 글을 봤는데 저는 AccessToken 문제가 아닙니다.
왜냐하면 같은 토큰으로 https://kapi.kakao.com/v2/user/me 는 잘 호출되며 https://kapi.kakao.com/v1/api/talk/friends 만 여러번 동의를 했음에도 계속 이런 응답이 나오는겁니다. 아무리 동의를 재시도해도 마찬가지입니다.
뭔가 현 상태가 버그가 아닌가 싶을 정도네요. 동의를 했을때 서버에서 뭔가 제대로 처리를 못하고 있는거 아닌지요?
참고로 사용한 AccessToken 은 9lVEQHtyxVKfIOwCuma6XMzV************** 입니다.
정확한 답변 부탁 드립니다.

{
“msg”: “insufficient scopes.”,
“code”: -402,
“api_type”: “FRIENDS”,
“required_scopes”: [
“friends”
],
“allowed_scopes”: [
“account_email”,
“talk_message”,
“profile”
]
}

위 응답만 본다면 코드받기 요청시 friends가 요청되지 않았을 것으로 보입니다.

이력 확인을 위해 앱아이디를 알려주시기 바랍니다.

앱의 아이디는 534090 입니다. 감사합니다.

해당 앱의 호출 이력을 확인해봤습니다.
이 글을 최초 올려주신 오늘 새벽 2시~4시쯤에 많은 호출을 확인할 수 있었습니다.

다만, 문제가 되는 friends 스콥이 지속적으로 추가되어 요청이 들어왔다가 없는 채로 요청이 들어온 것이 확인 되었습니다.
그리고, 토큰을 발급받기 전에는 항상 friends 없는 상태의 코드를 받아 발급된 토큰에는 friends 스콥이 없었습니다.

구현하신 코드 받기, 추가 동의 받기, 토큰 발급 과정을 다시 살펴 보시기 바랍니다.

처음 ‘인가코드받기’ 를 할땐 scope 없이 요청했다가 '토큰 받기’를 한 후에 한번 더 '추가 항목 동의 받기’를 호출해서 scope을 넣었는데요.
그렇다면 토큰이 만들어진 후 ‘추가 항목 동의 받기’ 호출시 friends 을 scope에 넣었는데도 제대로 반영이 안된 듯 합니다.
그럼 그냥 처음부터 ‘인가코드받기’ 할때 scope을 모두 넣어버리면 되는건가요?

문서에 보면 https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#additional-consent ‘추가 항목 동의 받기’ 항목에 Parameter에 는 response_type이 없으나 샘플 코드에는 response_type=code가 있습니다. 저는 물론 샘플 코드를 참고해서 '추가 항목 동의 받기’를 호출한거구요

이 부분이 문제였던걸까요?

1개의 좋아요

네, 간단히 답변드리면 처음에 인가 코드 받기때 필요한 스콥을 모두 넣으면 정상 동작할 것입니다.

‘추가 동의 받기’ 가이드에도 써있지만, '인가 코드 받기’나 추가 동의 받기는 보내는 요청 측면에서는 동일한 요청입니다.
다만 서비스 측면에서 어떤 동의항목을 더 받아야하냐 마냐의 차이만 있습니다.

이렇게 해서 받은 코드를 '토큰 받기’의 파라미터로 넣으면 그 코드에 해당하는 동의 항목 정보를 포함하는 토큰이 발급되는 형식입니다.
따라서 나중에 받은 코드는 그 이전에 받은 토큰에 전혀 영향끼치지 않습니다.
나중에 받은 코드를 이용해 다시 토큰을 받아야 해당 사용자는 필요한 스콥을 모두 얻게되는 것입니다.

이러한 동작은 필수적이지 않은 기능 사용할때 추가 동의를 받거나, 선택 항목을 동의 안했다가 해당 기능 이용시 동의를 받을 때 사용하게 됩니다.

말씀하신대로 인증 코드 받기에 필요한 스콥을 모두 넣은 형태로만 구현한다면, 당장의 친구 목록 조회는 가능할 것입니다.
다만, 연결시 친구 목록 제공에 동의를 하지 않았던 유저가 다시 동의를 하기 위해서는 ‘추가 항목 동의 받기’ -> '토큰 받기’의 과정이 필요하게 됩니다.

물론, 이러한 동작은 실제 서비스과정에서 사용자 편의성을 위한 것이므로,
현재 테스트 구현중이시라면 처음부터 모두 넣는 식의 구현은 아무런 문제는 없습니다.

친절한 답변 감사합니다~~