최신 업데이트:2025-09-22 10:04:18
인증 토큰을(Token) 생성하는 두 가지 실용적인 예시를 소개합니다:
Python 실행 가능 예제
제공된 샘플 코드에서 YOUR_ACCESS_KEY, YOUR_ACCESS_KEY_SECRET, YOUR_REQUEST_BODY를 실제 값으로 변경한 후 코드를 실행하면 토큰(Token) 값이 출력됩니다.
import hashlib
import hmac
import base64
import urllib
def build_signing_str(path, query, body):
connector = '\n'
signing_str = path
if query:
signing_str += '?' + query
signing_str += connector
if body:
signing_str += body
return signing_str
def get_signature_hmac_sha1(data, key):
hmac_sha1 = hmac.new(key.encode(), data.encode(), hashlib.sha1)
return hmac_sha1.hexdigest()
def url_safe_encode_bytes(src):
b64 = base64.urlsafe_b64encode(src.encode())
return b64.decode()
def generate_access_token(accessKey, encodeSign):
return "{}:{}".format(accessKey, encodeSign)
사용 예시:
path = "/fops"
query = ""
body = "YOUR_REQUEST_BODY"
secretKey = "YOUR_ACCESS_KEY_SECRET"
accessKey = "YOUR_ACCESS_KEY"
signing_str = build_signing_str(path, query, body)
sign = get_signature_hmac_sha1(signing_str, secretKey)
encode_sign = url_safe_encode_bytes(sign)
access_token = generate_access_token(accessKey, encode_sign)
print(access_token)
Java 예제
// 경로, 쿼리 파라미터, 본문을 '\n'으로 연결하여 서명용 문자열 구성
private String buildSigningStr(String path, String query, String body) {
char connector = '\n';
StringBuilder signingStrBuilder = new StringBuilder(path);
if (StringUtils.isNotEmpty(query)) signingStrBuilder.append('?').append(query);
signingStrBuilder.append(connector);
if (StringUtils.isNotEmpty(body)) signingStrBuilder.append(body);
return signingStrBuilder.toString();
}
// 주어진 데이터와 키로 HMAC-SHA1 서명 생성
public static String getSignatureHmacSHA1(byte[] data, String key) {
byte[] keyBytes = key.getBytes();
SecretKeySpec signingKey = new SecretKeySpec(keyBytes, "HmacSHA1");
Mac mac;
StringBuffer sb = new StringBuffer();
try {
mac = Mac.getInstance("HmacSHA1");
mac.init(signingKey);
byte[] rawHmac = mac.doFinal(data);
for (byte b : rawHmac) {
sb.append(byteToHexString(b));
}
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
}
3. 서명된 데이터 Sign에 대해 URL-세이프 Base64 인코딩을 수행하여 encodeSign을 얻습니다.
```java
// URL-safe Base64 인코딩 수행 ,4의 배수 길이가 되도록 '='로 패딩
public static byte[] urlSafeEncodeBytes(byte[] src) {
if (src.length % 3 == 0) return encodeBase64Ex(src);
byte[] b = encodeBase64Ex(src);
if (b.length % 4 == 0) return b;
int pad = 4 - b.length % 4;
byte[] b2 = new byte[b.length + pad];
System.arraycopy(b, 0, b2, 0, b.length);
b2[b.length] = '=';
if (pad > 1) b2[b.length + 1] = '=';
return b2;
}
String accessToken = String.format("%s:%s", accessKey, encodeSign);