Naver Cloud Platform API Signature
Naver Cloud Platfrom의 API를 사용하기 위해서는 키 두 개가 필요하다.
Access Key ID와
Secret Key
이 두 키로부터 얻어진 Signature도 필요하다.
나는 머리가 나빠서(...) Signature 생성 삽질하는 데 시간을 많이 써먹었다.
난해했던 부분
Header에 Signature를 넣으라는데....

어... 위 예제의 Body를 Secret Key로 암호화?
예제? 이거 말하는 건가?
https://sens.apigw.ntruss.com/sms/v2그러니까 여기로 날리는 요청의 Body...???
401 Unauthorized...^^...
아하! Signature 생성 가이드가 있구나!

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