반응형
OAuth 2.0 인증
인증 토큰을 발급후 api 요청시 헤더에 토큰을 추가하여 인증을 받고 통신하는 형태로 진행된다.
Authorization: Bearer {인증 토큰}
Security Scheme Type: OAuth2
Flow type: clientCredentials
Token URL: https://api.commerce.naver.com/external/v1/oauth2/token
전자서명 생성 방법
import bcrypt
import pybase64
clientId = "발급받은ID"
clientSecret = "발급받은 시크릿코드"
timestamp = 1643961623299
# 밑줄로 연결하여 password 생성
password = clientId + "_" + str(timestamp)
# bcrypt 해싱
hashed = bcrypt.hashpw(password.encode('utf-8'), clientSecret.encode('utf-8'))
# base64 인코딩
print(pybase64.standard_b64encode(hashed).decode('utf-8'))
# 실행 결과
JDJhJDEwJGFiY2RlZmdoaWprbG1ub3BxcnN0dXVCVldZSk42T0VPdEx1OFY0cDQxa2IuTnpVaUEzb
여기 까지는 네이버 api 문서에 나와있는 내용이다. 전자서명 하는 부분에서도 타임스탬프를 숫자로 적어놔서 현재의 시간을 구해와야 한다.
KST = timezone(timedelta(hours=9))
now = datetime.now(KST)
print(now,datetime.timestamp(now))
# from time import ctime
timestamp = datetime.timestamp(now) * 1000
timestamp = int(timestamp)
GMT 에서 KST로 변경하고 datetime.timestamp 함수에 1000을 곱해 api에서 요구하는 13자리 타임스탬프를 만들어준다.
API 문서에 나와있는 정보를 보고 POST로 해당 필드를 채워 보내면 정상적으로 토큰을 발급해준다.
access_url = "https://api.commerce.naver.com/external/v1/oauth2/token"
headers = {'User-Agent': 'python-naverlogin'}
data = {
"client_id": self.clientId,
"timestamp": timestamp,
"client_secret_sign": signature,
"grant_type": "client_credentials",
"type": "SELF"
}
r = requests.post(access_url, data=data, headers=headers)
json_object = json.loads(r.text)
access_token = json_object["access_token"]
발급받은 토큰을 다른 API를 요청할때 헤더에 넣어 사용하면다.
headers = { 'Authorization': "Bearer "+access_token }
반응형
댓글