인증 안내
API 서비스 항목 모두 request 전문을 보낼때 헤더에 인증 항목을 반드시 추가해야 합니다.
인증시 사용되는 api-access-key 와 api-secret-key는 외부 유출이 안되게 보안에 유의해주시기 바랍니다.
인증시 사용되는 api-access-key 와 api-secret-key는 외부 유출이 안되게 보안에 유의해주시기 바랍니다.
헤더값 인증 항목 설명
구분 | 설명 | |
---|---|---|
Authorization | 라이브 | LIVE-HMAC-SHA256 |
샌드박스 | API.SENDBOX-HMAC-SHA256 | |
단독서버 | [지정코드]-HMAC-SHA256 변경 | |
Credential | ||
Signature |
Signature 생성 규칙
구분 | 설명 |
---|---|
Datekey | |
Signkey | |
Signature |
Signature 생성 규칙에 따라 매일 signature값이 바뀌기 때문에 주의하시기 바랍니다.
참고
HMAC-SHA256(key, data)
아울러 사전에 사용하실 IP를 설정하여야 하며 설정된 IP에 대한 인증절차도 api request 인증시 같이 진행하게 됩니다.
아울러 사전에 사용하실 IP를 설정하여야 하며 설정된 IP에 대한 인증절차도 api request 인증시 같이 진행하게 됩니다.
Signature 생성 샘플
자바 소스
######## 자바 소스 ########
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.util.Base64;
import java.util.Base64.Encoder;
import java.util.Calendar;
class Main {
public static void main(String[] args) {
String api_access_key = "cyrlT2uW2sIcoVQ"; // 입력 할 api_access_key
String secret_access_key = "WLqT42W1sCHDf3FewfFT"; // 입력 할 secret_access_key
try {
HmacUtils util = new HmacUtils();
String signature = util.getSignature(api_access_key, secret_access_key);
System.out.println(">> signature = " + signature); // 결과 값
}catch (Exception e) {
// TODO: handle exception
}
}
}
class HmacUtils{
public String generateHmac256(String message, byte[] key) throws InvalidKeyException, NoSuchAlgorithmException {
byte[] bytes = hmac("HmacSHA256", key, message.getBytes());
return bytesToHex(bytes);
}
byte[] hmac(String algorithm, byte[] key, byte[] message) throws NoSuchAlgorithmException, InvalidKeyException {
Mac mac = Mac.getInstance(algorithm);
mac.init(new SecretKeySpec(key, algorithm));
return mac.doFinal(message);
}
String bytesToHex(byte[] bytes) {
final char[] hexArray = "0123456789abcdef".toCharArray();
char[] hexChars = new char[bytes.length * 2];
for (int j = 0, v; j < bytes.length; j++) {
v = bytes[j] & 0xFF;
hexChars[j * 2] = hexArray[v >>> 4];
hexChars[j * 2 + 1] = hexArray[v & 0x0F];
}
return new String(hexChars);
}
public String getEncode(String target) throws UnsupportedEncodingException
{
String rs = "";
if(target == null) return rs;
Encoder encoder = Base64.getEncoder();
byte[] targetBytes = target.getBytes("UTF-8");
String encodedString = encoder.encodeToString(targetBytes);
return encodedString ;
}
public String getSignature(String accessKeyId, String secretAccessKey) throws InvalidKeyException, NoSuchAlgorithmException, UnsupportedEncodingException
{
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
Calendar c1 = Calendar.getInstance();
String ymd = sdf.format(c1.getTime()); //ex) 20220308
String dateKey = this.generateHmac256(ymd, secretAccessKey.getBytes());
String signkey = this.generateHmac256(accessKeyId, dateKey.getBytes());
String encodeStr = this.getEncode(signkey);
return encodeStr;
} catch (Exception e) {
// TODO: handle exception
return null;
}
}
}
PHP 소스
######## PHP 소스 ########
<?php
function getSignature($access_key_id, $secret_access_key)
{
$access_date = date('Ymd');
$date_key = hash_hmac('sha256', $access_date, $secret_access_key);
$signkey = hash_hmac('sha256', $access_key_id, $date_key);
return base64_encode ($signkey);
}
$signature = getSignature('api-access-key값','api-secret-key값');
echo $signature ;
?>
파이썬 소스
######## 파이썬 소스 ########
import hmac
import hashlib
import base64
from datetime import datetime
def getSignature (access_key_id, secret_access_key) :
access_date = datetime.today().strftime("%Y%m%d")
date_key = hmac.new( bytes(secret_access_key, 'utf-8'), bytes(access_date, 'utf-8'), hashlib.sha256).hexdigest()
signkey = hmac.new(bytes(date_key, 'utf-8'), bytes(access_key_id, 'utf-8'), hashlib.sha256).hexdigest()
signature = base64.b64encode(signkey.encode('utf-8')).decode('utf-8')
return signature
# signature 생성 함수 호출
header_signature = getSignature('api-access-key값','api-secret-key값')
print ('signature 헤더값 :: ' , header_signature)
NodeJs 소스
######## NodeJs 소스 ########
var crypto = require('crypto');
function getSignature(access_key, secret_key) {
var access_date = new Date(+new Date() + 3240 * 10000).toISOString().split("T")[0].replace(/-/gi,"");
var date_key = crypto.createHmac('sha256', secret_key).update(access_date).digest('hex');
var signkey = crypto.createHmac('sha256', date_key).update(access_key).digest('hex');
return Buffer.from(signkey).toString('base64');
}
// signature 생성 함수 호출 => getSignature(api-access-key, secret-key)
var signature = getSignature('고객사_api-access-key값', '고객사_api-secret-key값');
console.log("signature 헤더값 :: " + signature);