• Feed
  • Explore
  • Ranking
/
/
    잡다한 것

    [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가 다른 건 별로 바람직한 상황이 아니자너요...?







    - 컬렉션 아티클