Bad client credentials(KOE010)

안녕하세요, 자사에서 제공할 서비스를 개발하기 위해 로컬에서 API 인증 호출 테스트를 실행하고 있었습니다.
여러가지 가능성이 의심되지만 일단 현재 문제를 가장 명확하게 보여주는 에러 메시지를 받아서 문의 글 남깁니다.

현재 원본 앱과 테스트 앱 중에 테스트 앱을 주로 사용하고 있으며 카카오톡 채널에서 고객들에게 메시지를 발송하고 그 메시지로 회원 등록을 실행하기 위해 인증 코드를 받아오는 작업을 마쳤습니다.
그러나 redirect URI의 파라미터로 넘어온 code를 사용해 엑세스 토큰을 발급 받도록 https://kauth.kakao.com/oauth/token로 POST 요청을 보내자 Unauthorized로 상태 메시지가 표시되었고 body는 다음과 같이 KOE010 에러를 표시했습니다.
{“error”:“invalid_client”,“error_description”:“Bad client credentials”,“error_code”:“KOE010”}

오류코드 관련 안내를 봤을 때 client_secret을 사용하는 앱에서 발생하는 에러라고 하지만 저는 활성화시킨 적이 없었으며 혹시 해결될까 싶어서 설정 후 추가해서 요청을 보냈음에도 계속해서 같은 결과가 확인됐습니다.

테스트는 express 서버와 request 모듈을 사용해서 POST 했으며 인가 코드를 받은 부분도 로그에서 확인됐습니다.

작성한 코드를 아래 사진으로 첨부하니 참고 바랍니다.
사용한 client_id는 테스트 앱의 REST_API 키이며 일치하는 것을 확인했습니다.

image

https://devtalk.kakao.com/t/topic/119042/14?u=tim.l

우선, KOE010 에러는 client_secret 이 달라 발생하기도 하지만
Request가 정해진 형식으로 들어오지 않아서 발생하기도합니다.

가장 많이 리포팅되는 내용은
헤더의 ‘content-Type’: 'application/x-www-form-urlencoded’만 설정하고
data부를 encodeURI 처리하지 않은 경우였습니다.


그래서 data부 인코딩 예제를 첨부해드린 것이였구요.

node.js + axios 예제 - Unlink


KOE320 에러는 이미 사용한 인가 코드를 재사용했거나 잘못된 인가 코드를 사용할때 발생합니다.

확인 부탁드려요~

redirect uri가 data로 들어갔을 때 인코딩이 틀어져서 인식이 제대로 되지 않는다는 말씀이실까요?
인가 코드는 한 번 발급되면 언제까지 유효한가요?

redirect uri가 data로 들어갔을 때 인코딩이 틀어져서 인식이 제대로 되지 않는다는 말씀이실까요?

넵, 맞습니다. 쿼리스트링 형태의 데이터부 처리가 필요합니다. 데이터부처리가 어려우시면 토큰요청 시, 주소에 파라메터 설정하셔도됩니다.

인가 코드는 한 번 발급되면 언제까지 유효한가요?

보안을 위해 1회 사용시 만료됩니다.

POST 요청을 보낼 때 주소에 파라미터 설정을 할 수 있나요…? 몹시 바보같은 질문이지만… POST 요청에서는 바디에 파라미터를 추가하는 것만 알고 있어서요… 죄송합니다.
두번째 질문에 대한 건 이미 한 번 사용된 코드를 제가 다시 사용했다는 말씀이시네요. 이해됐습니다, 감사해요!

네, 가능합니다.

데이터 전송시 주소의 Parameter영역으로 보낼 수도있고 POST방식일때 Body에 담아서 보낼수도 있습니다.
(둘다 사용할 수도있습니다.)

말씀해주신 방식으로 진행하는 걸 시도해 보고 싶은데, 혹시 적절한 검색어를 알려주실 수 있으실까요…? 감사합니다ㅠㅠ

음… 글쎄요.
POST방식일때 Body담는게 정확한 방법이라 검색어는 잘모르겠네요…

알겠습니다… 도움 주셔서 감사합니다!

1개의 좋아요

관리자님, 잠깐만요… 말씀하신대로 url 인코딩 해서 요청 보냈는데 관리자 페이지에 등록된 redirect url과 다르다는 오류가 돌아옵니다… 이건 어떻게 해야 할까요…??

이제 데이터가 넘어가나보군요.

인가 요청 시와 토큰요청 시 전달된 redirect url가 불일치 하면 발생하는 문제입니다.

동일하게 설정하셨다면 인코딩 방식을 일치 시켜보시면 좋을 것 같아요.