Search

API ์ธ์ฆ ํ† ํฐ

ย ์นด์นด์˜ค T ๋น„์ฆˆ๋‹ˆ์Šค API ์†Œ๊ฐœ
์นด์นด์˜ค T ๋น„์ฆˆ๋‹ˆ์Šค API ๋ฅผ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” API ์ธ์ฆ ํ† ํฐ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ค€๋น„

biz.cs@kakaomobility.com ์œผ๋กœ ํ† ํฐ ์š”์ฒญ ์ด๋ฉ”์ผ์„ ๋ณด๋‚ด์ฃผ์„ธ์š”.
์นด์นด์˜ค T ๋น„์ฆˆ๋‹ˆ์Šค ์šด์˜์ž๊ฐ€ ์ „๋‹ฌํ•ด ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ „๋‹ฌ๋ฐ›์œผ์‹  ํ† ํฐ์œผ๋กœ API ํ˜ธ์ถœ์— ์‚ฌ์šฉํ•  API ์ธ์ฆ ํ† ํฐ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒ์„ฑ

API ์ธ์ฆ ํ† ํฐ์€ ํ•ด์‹ฑ(HmacSHA1)์„ ํ†ตํ•ด ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
์นด์นด์˜ค T ๋น„์ฆˆ๋‹ˆ์Šค ์šด์˜์ž๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ ํ† ํฐ์€ ํ•ด์‹ฑ์— ํ•„์š”ํ•œ Secret ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
ํ•ด์‹ฑ ๋  Message ๋Š” ๋‹ค์Œ์ฒ˜๋Ÿผ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
Message ํฌ๋งท
โ€œ{๋‚œ์ˆ˜}\n{ํ˜ธ์ถœํ•  API URL}\n{ํ˜ธ์ถœํ•  API HttpMethod}\n{๊ธฐ์—… ID}\n{API ์ธ์ฆํ† ํฐ์„ ์ƒ์„ฑํ•œ ์œ ๋‹‰์Šค์‹œ๊ฐ„(์ดˆ)}\n{๋‚œ์ˆ˜}โ€
๊ธฐ์—… ID ๋Š” ์นด์นด์˜ค T ๋น„์ฆˆ๋‹ˆ์Šค ๊ด€๋ฆฌ์‹œ์Šคํ…œ > ์„ค์ • > ๊ณ„์ •์ •๋ณด > T ๋น„์ฆˆ ID ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”. ํ˜ธ์ถœํ•  API URL ๋Š” ์ฟผ๋ฆฌ์ŠคํŠธ๋ง์„ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
Message ์˜ˆ์‹œ
โ€96292\nhttps://mob-b2b-dev.kakao.com/external/v2/orders\nGET\n00000000\n1698650510\n96292โ€

์˜ˆ์ œ

Python

import time import random import hmac import hashlib import base64 CORPORATION_ID = "" # T ๋น„์ฆˆ ID SECRET = "" # ์ด๋ฉ”์ผ๋กœ ์ „๋‹ฌ๋ฐ›์€ ํ† ํฐ nonce = random.randrange(100000) url = "https://mob-b2b-dev.kakao.com/external/v2/orders" http_method = "GET" timestamp = int(time.time()) message = f"{nonce}\n{url}\n{http_method}\n{CORPORATION_ID}\n{timestamp}\n{nonce}" api_auth_token = base64.b64encode( hmac.new(SECRET.encode("utf-8"), message.encode("utf-8"), hashlib.sha1).digest() ).decode("utf-8") print("Authorization: Token " + api_auth_token) print("x-mob-b2b-corp-id:", CORPORATION_ID) print("x-mob-b2b-nonce:", nonce) print("x-mob-b2b-timestamp:", timestamp)
Python
๋ณต์‚ฌ

Java

import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.nio.charset.StandardCharsets; import java.time.Instant; import java.util.Base64; import java.util.Random; public class ApiAuthTokenMaker { public static void main(String[] args) throws Exception { String corporationId = ""; // T ๋น„์ฆˆ ID String secret = ""; // ์ด๋ฉ”์ผ๋กœ ์ „๋‹ฌ๋ฐ›์€ ํ† ํฐ int nonce = new Random().nextInt(100000); String url = "https://mob-b2b-dev.kakao.com/external/v2/orders"; String httpMethod = "GET"; long timestamp = Instant.now().getEpochSecond(); String message = nonce + "\n" + url + "\n" + httpMethod + "\n" + corporationId + "\n" + timestamp + "\n" + nonce; Mac mac = Mac.getInstance("HmacSHA1"); mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA1")); String apiAuthToken = Base64.getEncoder().encodeToString(mac.doFinal(message.getBytes(StandardCharsets.UTF_8))); System.out.println("Authorization: Token " + apiAuthToken); System.out.println("x-mob-b2b-corp-id: " + corporationId); System.out.println("x-mob-b2b-nonce: " + nonce); System.out.println("x-mob-b2b-timestamp: " + timestamp); } }
Java
๋ณต์‚ฌ

C#

using System; using System.Security.Cryptography; using System.Text; class ApiAuthTokenMaker { static void Main() { string corporationId = ""; // T ๋น„์ฆˆ ID string secret = ""; // ์ด๋ฉ”์ผ๋กœ ์ „๋‹ฌ๋ฐ›์€ ํ† ํฐ int nonce = new Random().Next(100000); string url = "https://mob-b2b-dev.kakao.com/external/v2/orders"; string httpMethod = "GET"; long timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); string message = $"{nonce}\n{url}\n{httpMethod}\n{corporationId}\n{timestamp}\n{nonce}"; using var hmac = new HMACSHA1(Encoding.UTF8.GetBytes(secret)); string apiAuthToken = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(message))); Console.WriteLine("Authorization: Token " + apiAuthToken); Console.WriteLine("x-mob-b2b-corp-id: " + corporationId); Console.WriteLine("x-mob-b2b-nonce: " + nonce); Console.WriteLine("x-mob-b2b-timestamp: " + timestamp); } }
C#
๋ณต์‚ฌ