*이글은 다시 네이버 API를 사용할 때 더 쉽게 사용하기위해 적은 글 입니다.
*사용 언어 : 자바스크립트, Nodejs 서버
네이버 클라우드 서비스의 API를 사용하는 경우 Access Key, Secret Key 를 그대로 사용하는게 아니라, 네이버에서 미리 정해진 알고리즘으로 Signature Key를 요청 헤더에 담아야 한다. 먼저 네이버의 공식 문서를 보면 x-ncp-apigw-timestamp, x-ncp-iam-access-key, x-ncp-apigw-signature-v2 이렇게 세가지를 헤더에 담아 보내야 한다. 이 세가지가 우리의 계정이다.
x-ncp-apigw-signature-v2 는 시그니처 키를 사용하는데, 위처럼 특정 요청문을 HamcSHA256 알고리즘으로 암호화한후 Base64로 인코딩한 값을 넣어주면 된다. 말이 쉽지, 처음 봤을데 뭔소리인가 했다. 그냥 Secret Key를 암호화해서 보냈는데 계속 오류나길레 뭔 다른 값이 있나 했는데, 바로 밑에 예제가 있었다. 문서를 꼼꼼히 보는 습관을 기르자 ㅠㅠ
StringToSign형태의 String값을 암호화하면 된다. 이를 코드로 표현하면 secretKey 문자열에 쭉 쭉 덧붙여 나가는 것.
request의 method + 공백(space) + API의 URL + 줄바꿈(\n) + 타임스탬프 + Access Key
Signature Key 발급원리는 이해했으니, 이제 만들어보자. 우선 nCloud의 API Key는 마이페이지>계정관리>인증키관리 에서 확인할 수 있다. 검정박스가 AccessKey, 보기 누르면 나오는 키가 SecretKey. 각각 잘 복사해두고 환경변수에 두어 사용하면 된다.
POST https://mail.apigw.ntruss.com/api/v1/mails
Signature Key 생성에 쓰이는 URL과 Method는 사용하려는 API의 문서를 보면 나와 있다. 사용하려는 API가 메일 발송에 쓰이는 Outbound Mailer 라고 하자. 이때 메일을 발송하는 API는 위와 같다. 그럼, 키 생성에 필요한 인자값은 아래 값이 된다.
Key | Value |
method | HTTP 메소드 ex) POST |
url | 사용하려는 API의 도메인을 제외한 "/"아래 모든 url. 단 쿼리스트링도 포함 ex) /api/vi/mails |
const CryptoJS = require('crypto-js');
function makeSignature() {
var space = " "; // one space
var newLine = "\n"; // new line
var method = "POST"; // method
var url = "/api/v1/mails"; // url (include query string)
var timestamp = _timestamp; // current timestamp (epoch)
var accessKey = _accessKey; // access key id (from portal or Sub Account)
var secretKey = _secretKey; // secret key (from portal or Sub Account)
var hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, secretKey);
hmac.update(method);
hmac.update(space);
hmac.update(url);
hmac.update(newLine);
hmac.update(timestamp);
hmac.update(newLine);
hmac.update(accessKey);
var hash = hmac.finalize();
let result = hash.toString(CryptoJS.enc.Base64);
console.log(result)
return result;
}
아무튼간에 네이버가 말하는데로 잘 하면 우리도 쉽게 API를 사용할 수 있다. 다음엔 서버에서 다른 서버로 Ajax 통신하는 방법을 정리해야겠다. 생각보다 너무 쉬워서 놀랐지만, 한번 정리해 두어야지~
'Dev > 코딩공부 이모저모' 카테고리의 다른 글
VScode ) Beautify 설정 (0) | 2022.01.15 |
---|---|
Api 문서 자동화에 대한 개인적인 노력과 후기... (0) | 2021.12.26 |
Server ) RESTful API, 자주 사용하는 Status code 정리 및 예시 (0) | 2021.10.04 |
Server ) Api Http status code에 대하여, header와 통일시켜야할까 body에만 담아야 할까? (0) | 2021.10.03 |
Server ) Nginx 502 Bad Gateway 에러 / nginx 설정 잘못함 (1) | 2021.09.28 |