[Naver NCloud] Signature 생성 삽질 in Python

2025.02.05
·
2 min read

Naver Cloud Platform API Signature

  • Naver Cloud Platfrom의 API를 사용하기 위해서는 키 두 개가 필요하다.

    • Access Key ID와

    • Secret Key

  • 이 두 키로부터 얻어진 Signature도 필요하다.

    • 나는 머리가 나빠서(...) Signature 생성 삽질하는 데 시간을 많이 써먹었다.

난해했던 부분

Header에 Signature를 넣으라는데....

3156
  • 어... 위 예제의 Body를 Secret Key로 암호화?

    • 예제? 이거 말하는 건가?

https://sens.apigw.ntruss.com/sms/v2
  • 그러니까 여기로 날리는 요청의 Body...???

    • 401 Unauthorized...^^...

아하! Signature 생성 가이드가 있구나!

3157
  • 근데 GET 관련한 예제밖에 없군...

    • 으데... 보자... 나는 POST 쓸 거니까 method = "POST" 하고...

    • URI 맞게 바꾸고...

    • 요청의 Body를... HmacSHA256...


결과물

TIMESTAMP = str(int(time.time() * 1000))

def make_signature():
    msg = f'POST {URI}\n{TIMESTAMP}\n{access_key}'
    msg = bytes(msg, 'UTF-8')
    inner_secret_key = bytes(secret_key, 'UTF-8')
    mac = hmac.new(secret_key, msg, hashlib.sha256).digest()
    return base64.b64encode(mac)

header = {
    'Content-Type':'application/json; charset=utf-8',
    'x-ncp-apigw-timestamp':TIMESTAMP,
    'x-ncp-iam-access-key':access_key,
    'x-ncp-apigw-signature-v2':make_signature()
}
  • 헤헷

이렇게는 하지 마세요. (안 그러시겠지만...)

def make_signature():
    msg = f'POST {URI}\n{str(int(time.time() * 1000))}\n{access_key}' # 요렇게
    msg = bytes(msg, 'UTF-8')
    inner_secret_key = bytes(secret_key, 'UTF-8')
    mac = hmac.new(secret_key, msg, hashlib.sha256).digest()
    return base64.b64encode(mac)

header = {
    'Content-Type':'application/json; charset=utf-8',
    'x-ncp-apigw-timestamp':str(int(time.time() * 1000)), # 요렇게
    'x-ncp-iam-access-key':access_key,
    'x-ncp-apigw-signature-v2':make_signature()
}
  • Signature에 들어간 Timestamp랑 Header Timestamp가 다른 건 별로 바람직한 상황이 아니자너요...?







- 컬렉션 아티클