*์ด๊ธ์ ๋ค์ ๋ค์ด๋ฒ 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 ํต์ ํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด์ผ๊ฒ ๋ค. ์๊ฐ๋ณด๋ค ๋๋ฌด ์ฌ์์ ๋๋์ง๋ง, ํ๋ฒ ์ ๋ฆฌํด ๋์ด์ผ์ง~