찬수
찬수17mo ago

UNAUTHORIZED_KEY 에러 지속 발생

토스페이먼츠 연동 완료 후, 라이브 서비스를 8개월간 해오고 있습니다. 오늘 오후 3시경부터 갑자기 "UNAUTHORIZED_KEY", "인증되지 않은 시크릿 키 혹은 클라이언트 키 입니다"라는 오류가 발생하고 있습니다. dev server에서 라이브 클라이언트 키/라이브 시크릿 키를 넣고 결제를 시도해보면 정상적으로 성공합니다. 라이브 서비스에서 키는 모두 정상적인 것을 확인하였지만, 계속 같은 에러가 나며 결제가 실패합니다. 결제 오류의 원인을 더 정확하게 파악할 수 있는 방법이 있을까요?
48 Replies
토스페이먼츠 BOT
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) : - 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요. * 주말/공휴일에는 답변이 늦을 수 있어요.
Kimoon Lee
Kimoon Lee17mo ago
오류가 발생한 주문번호를 샘플로 알려주실수 있을까요?
찬수
찬수OP17mo ago
ce4cd848-a4f0-4f55-977a-836b13773f91 입니다 이외 모든 결제들이 실패하고 있습니다
Kimoon Lee
Kimoon Lee17mo ago
키를 정상적으로 입력안하신것 같은데요.
찬수
찬수OP17mo ago
dev server에서 성공했었고, vercel 및 google cloud 프론트/백엔드 배포환경에서 환경변수값(클라이언트키/시크릿키) 값이 똑바로 박혀있는걸 확인했습니다. 그런데 dev에서만 성공하고 배포환경에서는 실패하니다. 지난 8개월동안 정상작동했었고 환경변수 변경사항이 없습니다 만약 클라이언트키 문제라면, 결제위젯이 아예 렌더링되지 않아야 정상인 것도 확인했습니다.
Kimoon Lee
Kimoon Lee17mo ago
시크릿키 문제인것으로 보입니다.
찬수
찬수OP17mo ago
저희는 현재 결제위젯이 정상적으로 렌더링되며, 백엔드에서 마지막으로 confirm 요청을 날릴 때 미인증키 에러를 받는 것을 확인했습니다.
Kimoon Lee
Kimoon Lee17mo ago
키파싱 자체가 안되어서 아예 승인 서버로 요청이 안오는것으로 보이는데요. 시크릿키뒤에 : 를 붙이시고 base 64로 인코딩 해서 보내시는지 확인 부탁드립니다.
찬수
찬수OP17mo ago
현재 시크릿키 뒤에 : 를 붙이고 base64로 정상적으로 인코딩해서 보내고 있으며, 시크릿키 또한 정상적으로 기입해서 콘솔로그창으로 확인한 상태입니다.
No description
찬수
찬수OP17mo ago
No description
찬수
찬수OP17mo ago
만약 키파싱 문제라면 dev server애서 실패해야 하지 않을까요? 어떻게 오류의 원인을 파악할 수 있을까요?
Kimoon Lee
Kimoon Lee17mo ago
혹시 라이브서버의 외부 IP를 알수 있을까요?
찬수
찬수OP17mo ago
도메인은 api.carepet.io 이고, 외부 IP 바로 확인해서 알려드리겠습니다 35.241.21.77 입니다
찬수
찬수OP17mo ago
No description
Kimoon Lee
Kimoon Lee17mo ago
해당 IP 는 서버에서 나갈때 쓰는 데 쓰는 IP 가 아닌것 같습니다. 저희서버로 요청이 들어오는 IP 를 확인해주세요.
Ayaan이안
Ayaan이안17mo ago
@2001_still_dre 터미널에서 이거 입력하고 나오는 아이피 보내주세요 curl https://api.ip.pe.kr/
코드싸이
코드싸이17mo ago
배포환경으로 google cloud run 사용중인데요, 터미널로 연결할 수 있는 방법이 있나요? 찬수님과 같은 회사 개발자입니다.
코드싸이
코드싸이17mo ago
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.
today.lastday
today.lastday17mo ago
$ curl ifconfig.me 이렇게 해보세요
코드싸이
코드싸이17mo ago
google cloud run 배포환경이라서 터미널 연결이 불가능합니다 서버 소스코드에 ifconfig.me GET 요청을 보내는 코드를 작성해서 배포 후 알아보겠습니다
찬수
찬수OP17mo ago
Kimoon Lee
Kimoon Lee17mo ago
네 감사합니다. 지금 해당 서버에서 들어온것으로 추정되는 패킷을 까보면 authorization header 가 없습니다. content-type: text/plain;charset=UTF-8 이렇게 오고 있구요.
Ayaan이안
Ayaan이안17mo ago
node.js 환경으로 보이는데요, 혹시 어떤 모듈로 API를 보내고 계실까요 axios이신가요?
Kimoon Lee
Kimoon Lee17mo ago
header 가 정상적으로 세팅이 안되는 것으로 보여요.
Ayaan이안
Ayaan이안17mo ago
냥과장님이 확인해 주신 거랑 같이 확인해 보면 네네 맞습니다
찬수
찬수OP17mo ago
No description
찬수
찬수OP17mo ago
toss/ky를 사용하고 있습니다 Docker는 node:alpine 입니다
Ayaan이안
Ayaan이안17mo ago
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.
코드싸이
코드싸이17mo ago
@toss/ky | Slash libraries
ky 라이브러리를 CJS-ESM 모두에서 호환되도록 만든 라이브러리입니다.
Ayaan이안
Ayaan이안17mo ago
네 같은 모듈입니다. ky.create를 하셨나요? @codepsy2001 @2001_still_dre
코드싸이
코드싸이17mo ago
No description
Ayaan이안
Ayaan이안17mo ago
음... ky.create를 안하신거 같은데요.
코드싸이
코드싸이17mo ago
관련 부분 전체 코드입니다. 서버 프레임워크는 NestJS를 사용했습니다
Ayaan이안
Ayaan이안17mo ago
ky.extend대신 ky.create로 바꾸고req 보내줘보시겠어요?
코드싸이
코드싸이17mo ago
ky 공식 문서를 보시면 create, extend 모두 새 인스턴스를 생성한다고 되어있습니다. 그리고 지난 8개월간 문제 없이 작동했습니다. dev 서버에서도 문제 없이 작동하구요 create로 변경 후 재배포해서 테스트해보겠습니다
Ayaan이안
Ayaan이안17mo ago
No description
Ayaan이안
Ayaan이안17mo ago
기존에 create된 ky instance에서 오버라이드한 새 인스턴스를 생성하는 method로 보입니다. 모두 생성하는건 맞지만, 밑에 example을 보시면:
const original = ky.create({
headers: {
rainbow: 'rainbow',
unicorn: 'unicorn'
}
});

const extended = original.extend({
headers: {
rainbow: undefined
}
});
const original = ky.create({
headers: {
rainbow: 'rainbow',
unicorn: 'unicorn'
}
});

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

Did you find this page helpful?