개발/library, framework

[NCP] ncp sens 문자발송시 401 unauthorized

prpn97 2023. 11. 2. 23:56

제목과 같이 테스트하는데 401 unauthorized 에러가 나왔다. 

https://api.ncloud-docs.com/docs/common-ncpapi

 

Ncloud API

 

api.ncloud-docs.com

NCP 공식문서 그대로 진행했고, 인증관련 에러라서 확인해봐야 할 것은 serviceId, accessKey, secretKey정도일 것이다. 

 

분명 일치한다면... 뭐가 문제일까?

 

문제는 다른 곳에 있었다...... -,-

makeSignature 함수에서 crypto로 암호화를 하는데 요렇게 변수가 들어간다. 

      const key = makeSignature(
        accessKey,
        secretKey,
        method,
        uri,
        timestamp
      );

 

그럼 방금 말했듯 변수들에 이상이 없다면 확인해야 할 것은 method, timestamp겠다. 

그런데 method는 어차피 문자발송이라 Post고, 그럼 timestamp 라는건가?

혹시나 해서 현재시간을 기준으로 바로 문자열로 바꿨더니..... 정상적으로 202로 확인되고 문자 발송이 완료되었다. 

 

 

왜 오류였을까?

 

timestamp에 대해서 공식문서에는 다음과 같이 정의하고 있다. 

 

- 1970년 1월 1일 00:00:00 협정 세계시(UTC)부터의 경과 시간을 밀리초(Millisecond)로 나타낸 것
- API Gateway 서버와 시간 차가 5분 이상 나는 경우 유효하지 않은 요청으로 간주

      //변경 전 코드
      const timestamp = String(Math.floor(Date.now() / 1000));
      //변경 후 코드
      const timestamp = Date.now().toString();

 

 

물론 헤더에 timestamp가 key에도 들어가기 때문에 2번 들어간다지만....... 

unauthorized 로만 에러가 확인되니까 환경변수에 관련된 에러라고 특정해서 생각해서 1시간은 붙잡은 것 같다. 

      const headers = {
        "x-ncp-apigw-timestamp": timestamp,
        "x-ncp-iam-access-key": accessKey,
        "x-ncp-apigw-signature-v2": key,
      };

 

 

내 시야가 정답은 아니라는걸 꼭 명심하자!

728x90