UNAUTHORIZED_KEY 에러 지속 발생
토스페이먼츠 연동 완료 후, 라이브 서비스를 8개월간 해오고 있습니다.
오늘 오후 3시경부터 갑자기 "UNAUTHORIZED_KEY", "인증되지 않은 시크릿 키 혹은 클라이언트 키 입니다"라는 오류가 발생하고 있습니다.
dev server에서 라이브 클라이언트 키/라이브 시크릿 키를 넣고 결제를 시도해보면 정상적으로 성공합니다.
라이브 서비스에서 키는 모두 정상적인 것을 확인하였지만, 계속 같은 에러가 나며 결제가 실패합니다.
결제 오류의 원인을 더 정확하게 파악할 수 있는 방법이 있을까요?
48 Replies
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) :
- 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요.
* 주말/공휴일에는 답변이 늦을 수 있어요.
오류가 발생한 주문번호를 샘플로 알려주실수 있을까요?
ce4cd848-a4f0-4f55-977a-836b13773f91
입니다
이외 모든 결제들이 실패하고 있습니다
키를 정상적으로 입력안하신것 같은데요.
dev server에서 성공했었고, vercel 및 google cloud 프론트/백엔드 배포환경에서 환경변수값(클라이언트키/시크릿키) 값이 똑바로 박혀있는걸 확인했습니다. 그런데 dev에서만 성공하고 배포환경에서는 실패하니다.
지난 8개월동안 정상작동했었고 환경변수 변경사항이 없습니다
만약 클라이언트키 문제라면, 결제위젯이 아예 렌더링되지 않아야 정상인 것도 확인했습니다.
시크릿키 문제인것으로 보입니다.
저희는 현재 결제위젯이 정상적으로 렌더링되며, 백엔드에서 마지막으로 confirm 요청을 날릴 때 미인증키 에러를 받는 것을 확인했습니다.
키파싱 자체가 안되어서 아예 승인 서버로 요청이 안오는것으로 보이는데요.
시크릿키뒤에 : 를 붙이시고 base 64로 인코딩 해서 보내시는지 확인 부탁드립니다.
현재 시크릿키 뒤에 : 를 붙이고 base64로 정상적으로 인코딩해서 보내고 있으며, 시크릿키 또한 정상적으로 기입해서 콘솔로그창으로 확인한 상태입니다.


만약 키파싱 문제라면 dev server애서 실패해야 하지 않을까요? 어떻게 오류의 원인을 파악할 수 있을까요?
혹시 라이브서버의 외부 IP를 알수 있을까요?
도메인은 api.carepet.io 이고, 외부 IP 바로 확인해서 알려드리겠습니다
35.241.21.77 입니다

해당 IP 는 서버에서 나갈때 쓰는 데 쓰는 IP 가 아닌것 같습니다.
저희서버로 요청이 들어오는 IP 를 확인해주세요.
@2001_still_dre
터미널에서 이거 입력하고 나오는 아이피 보내주세요
curl https://api.ip.pe.kr/
배포환경으로 google cloud run 사용중인데요, 터미널로 연결할 수 있는 방법이 있나요?
찬수님과 같은 회사 개발자입니다.
https://stackoverflow.com/questions/75127668/is-there-a-way-to-open-a-terminal-inside-google-cloud-run Google Cloud Run은 단일 엔드포인트만 노출해서 ssh 등으로 터미널 연결은 불가능합니다.
Stack Overflow
Is there a way to open a terminal inside Google Cloud Run?
Is there a way to open a terminal inside a running instance of Google Cloud Run? As a git bash or linux terminal...
I have to execute a command when the instance was running.
$ curl ifconfig.me
이렇게 해보세요
google cloud run 배포환경이라서 터미널 연결이 불가능합니다
서버 소스코드에 ifconfig.me GET 요청을 보내는 코드를 작성해서 배포 후 알아보겠습니다
What Is My IP Address? - ifconfig.me
Get my IP Address

네 감사합니다.
지금 해당 서버에서 들어온것으로 추정되는 패킷을 까보면
authorization header 가 없습니다.
content-type: text/plain;charset=UTF-8
이렇게 오고 있구요.
node.js 환경으로 보이는데요, 혹시 어떤 모듈로 API를 보내고 계실까요
axios이신가요?
header 가 정상적으로 세팅이 안되는 것으로 보여요.
냥과장님이 확인해 주신 거랑 같이 확인해 보면
네네 맞습니다

toss/ky를 사용하고 있습니다
Docker는 node:alpine 입니다
npm
ky
Tiny and elegant HTTP client based on the browser Fetch API. Latest version: 1.1.0, last published: 27 minutes ago. Start using ky in your project by running
npm i ky
. There are 370 other projects in the npm registry using ky.@toss/ky | Slash libraries
ky 라이브러리를 CJS-ESM 모두에서 호환되도록 만든 라이브러리입니다.
네 같은 모듈입니다.
ky.create를 하셨나요?
@codepsy2001 @2001_still_dre

음... ky.create를 안하신거 같은데요.
관련 부분 전체 코드입니다. 서버 프레임워크는 NestJS를 사용했습니다
ky.extend대신 ky.create로 바꾸고req 보내줘보시겠어요?
ky 공식 문서를 보시면 create, extend 모두 새 인스턴스를 생성한다고 되어있습니다. 그리고 지난 8개월간 문제 없이 작동했습니다.
dev 서버에서도 문제 없이 작동하구요
create로 변경 후 재배포해서 테스트해보겠습니다

기존에 create된 ky instance에서 오버라이드한 새 인스턴스를 생성하는 method로 보입니다.
모두 생성하는건 맞지만, 밑에 example을 보시면:
ky.create된 instance에서 extend를 하는거라서요.
한번 배포하고 테스트 부탁드릴게요
실패합니다.
@냥과장 이번건도 똑같이 헤더가 안들어왔나요?
네 동일하네요.
beforeRequest 훅 사용해서 요청 보내기 전 헤더를 콘솔 출력 해보겠습니다.
이래도 안되면 기본 fetch 함수를 사용해서 재구현해보겠습니다.
ky로 안되면 axios로 해보시기 바랍니다.
훅으로 확인 결과 헤더 셋팅 안되는거 확인했습니다. fetch나 axios를 사용해서 재구현하면 될 것 같습니다.
재구현하고도 오류가 발생하면 공유주시기 바랍니다.
fetch로 재구현한 후 해결됐습니다. 그런데 확인해보니 ky로 구현한 디스코드 웹훅에서 똑같은 에러가 발생하네요.
헤더가 설정되지 않습니다.
결제 관련 문제는 완전히 해결되었습니다. 감사합니다.
네 왜 헤더 설정이 갑자기 안되었는지는 모르겠는데, 해결하셨다니 다행이네요.
ky쪽 버그가 있는게 아닐까 의심해 봅니다. ky레포지토리에 이슈 남겨보시는걸 추천드려요
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.