로그인이 필요합니다.
클라우드 서비스 보급·확산 사업 공급기업 선정! 이용료 최대 80% 지원

개발가이드(ver2.0)

인증 안내

API 서비스 항목 모두 request 전문을 보낼때 헤더에 인증 항목을 반드시 추가해야 합니다.
인증시 사용되는 api-access-key 와 api-secret-key는 외부 유출이 안되게 보안에 유의해주시기 바랍니다.

헤더값 인증 항목 설명

구분 설명
Authorization 라이브 LIVE-HMAC-SHA256
샌드박스 API.SENDBOX-HMAC-SHA256
단독서버 [지정코드]-HMAC-SHA256 변경
Credential 인증 구분값 <회사코드>/<api-access-key>/<요청일자(YYYYMMDD)>/srwms_request
Signature 인증을 위한 signanture 값 <signature>

Signature 생성 규칙

구분 설명
Datekey HMAC-SHA256(“<api-secret-key>” , “<요청일자<YYYYMMDD>>”)
Signkey HMAC-SHA256(Datekey , <api-access-key>)
Signature BASE64ENCODE(Signkey)
Signature 생성 규칙에 따라 매일 signature값이 바뀌기 때문에 주의하시기 바랍니다.

참고

HMAC-SHA256(key, data)
아울러 사전에 사용하실 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);
Top