Authentication Example

최신 업데이트: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 예제

  1. StringToSign 을 생성합니다
// 경로, 쿼리 파라미터, 본문을 '\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();
}
  1. HMAC-SHA1을 사용하여 secretKey 와 StringToSign 으로 시그니처를 생성합니다.
// 주어진 데이터와 키로 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;
}
  1. accessKey 와 encodeSign 을 ':'로 연결하여 토큰을(Token) 얻습니다.
String accessToken = String.format("%s:%s", accessKey, encodeSign);

이 문서의 내용이 도움이 되었습니까?
아니오
정상적으로 제출되었습니다.피드백을 주셔서 감사합니다.앞으로도 개선을 위해 노력하겠습니다.