Authentication (인증)

영어로 된 OKEx 원본 문서: https://www.okex.com/docs/en/#summary-yan-zheng

이 챕터에서는 다음 다섯가지 측면의 인증에 대해서 다룹니다:

  • Generating an API Key (API 키 발급)
  • Creating a Request (요청 보내기)
  • Signing a Message (사이닝)
  • Timestamp (요청 보낸 시점)
  • Getting Server Time (서버타임 가져오기)

*** BaseURL 관련 주의사항 ***

  • Base URL 은 https://okex.co.kr 을 사용하셔야 합니다. (www.okex.co.kr 사용시 okex.co.kr 로 리다이렉트 합니다.)

Generating an API Key (API Key 발급)

어떠한 요청들에 대해 인증 받기 전에, 먼저 OKEx 웹사이트에서 API 키를 발급 받아야 합니다. 키를 발급 받으면, 꼭 기억해야 할 3가지 정보를 받게 됩니다.

  • API Key (API 키)

  • Secret (시크릿 키)

  • Passphrase

API 키와 시크릿 키는 OKEx에 의해서 랜덤하게 제공 됩니다. Passphrase는 API에 접근 할때에 보안을 강화 하기위해 제공됩니다. OKEx는 인증을 위해 Passphrase에 있는 salted hash를 저장하고 있지만, 만약 잃어버린 다면 Passphrase를 복구 할 수 없습니다.

Creating a Request (요청 보내기)

모든 REST 방식의 요청들은 다음 헤더들을 포함해야만 합니다:

  • OK-ACESS-KEY: API 키 (String)

  • OK-ACCESS-SIGN: base64로 인코딩된 시그니쳐 (Sigining a Message (사이닝) 쪽을 참고하세요)

  • OK-ACCESS-TIMESTAMP: 요청을 위한 타임 스탬프

  • OK-ACCESS-PASSPHRASE: API 키를 만들 때에 썼던 Passphrase

모든 요청의 body값들은 application/json 형식의 content type을 가져야 합니다. 또한 유효한 JSON 형태여야만 합니다.

Signing a Message (사이닝)

OK-ACESS-SIGN 헤더는 base64로 디코드 된 시크릿 키를 사용하여 sha256 HMAC 을 사용하여 timestamp + method + requestPath + body (where + represents string concatenation)를 digest하여 생성 됩니다.
예시:

(sign = CryptoJS.enc.Base64.stringify(
    CryptoJS.HmacSHA256(timestamp + "GET" + "/users/self/verify", secretKey)
))
  • timestamp: OK-ACCESS-TIMESTAMP 헤더 값과 같으며 nanometer 로 계산됩니다.
  • method: UPPER CASE 형태여야만 합니다. (GET/POST/PUT/PATCH/DELETE)
  • requestPath: 요청 보낸 엔드포인트의 path 입니다. 예시: /orders?before=2&limit=30
  • body: request body의 문자형태의 값이지만, 만약 request body 값이 없다면 생략할수 있습니다. (GET 방식의 요청일때에).
    예시:
{ "product_id": "BTC-USD-0309", "order_id": "377454671037440" }
  • secretKey: 값은 API 키 값을 발급 받고나면 생기는 값입니다.
  • Prehash string:
2018-03-08T10:59:25.789ZPOST/orders?before=2&limit=30{"product_id":"BTC-USD-0309","order_id":"377454671037440"}

예제 코드

Timestamp (타임 스탬프)

OK ACCESS-TIMESTAMP 리퀘스트 헤더에는 UTC 타임 포맷 or ISO8601 기준 포맷이 적용되어야합니다. 1000분의 1초 (milliseconds) 단위로 표기(정확)해야 됩니다.
사용자의 날짜시점이 사용하는 api 서비스에 30초 안에 요청되어야 하며 그후는 만료나 기각될수 있습니다.
사용자의 서버와 API 간의 시간 지연이 발생할경우 저희는 타임 엔드포인트로 쿼리를 요청 할 것을 추천드립니다.
타임스탬프는 보낸 요청이 끝나거나 거절될때 까지 혹은 api service 가 걸리는 시간의 30초 이내여야 합니다.

Getting Server Time

API 서버 시간 입니다. 이것은 공개된 endpoint이며, 어떠한 인증도 필요치 않습니다.

HTTP Requests

GET /api/general/v3/time

Return Parameters

Parameters Parameters Types
iso ISO 8601 format
epoch Unix Epoch in UTC

Return Sample

{
    "iso": "2015-01-07T23:47:25.201Z",
    "epoch": 1420674445.201
}