Callback Security

Luniverse에서 제공하는 일부 API는 Callback 기능을 별도로 제공합니다. 유저는 Luniverse API를 실행한 뒤, 이에 대한 response를 자신이 지정한 Endpoint로 받도록 설정할 수 있습니다. Luniverse는 유저가 받는 response를 더욱 안전하게 제공하기 위해 보안적인 요소를 추가하였습니다.

Overview

이제 유저가 받는 Callback response의 Header에 인증 서명(X-Signature)이 포함됩니다. 유저는 API Key를 바탕으로 Signing Key를 생성할 수 있으며 이를 인증 서명과 비교하여 해당 response가 Luniverse를 통해 받은 response라는 것을 확인할 수 있습니다. 확인하는 방법은 다음과 같습니다.

// example header
Content-Type: "application/json"
X-SIGNATURE: "815f5dc296d5338dd761c088aa6a914311b4579523d557248fd1016912e755a4"

API Key 생성

Signing Key를 생성하기 위해 API Key를 생성합니다.


Signing Key 생성

API Key Field 우측의 [Signing Key]를 클릭합니다. API Key를 생성할 때 입력한 API Key Purpose를 확인할 수 있으며 Signing Key를 생성할 수 있는 버튼이 활성화됩니다. [Create Signing Key] 버튼을 클릭하여 Signing Key를 생성합니다.


Signing Key 확인

Signing Key를 확인할 수 있으며 우측 복사 버튼을 이용해 Signing Key를 복사할 수 있습니다.


X-Signature와 Signing Key 비교

  1. Signing Key를 HMAC, SHA-256 해시 알고리즘을 이용하여 해시한 후, X-Signature와 비교합니다. 두 값이 일치한다면 해당 response가 Luniverse에서 전송한 것이라는 것을 인증할 수 있습니다.
const crypto = require('crypto');

function isValidSignature(
    body,
    signature, // your "X-SIGNATURE" from header
    signingKey, // your unique Luniverse Service signing key
  ) {
    const hmac = crypto.createHmac('sha256', signingKey); // Create a HMAC SHA256 hash using the signing key
    hmac.update(JSON.stringify(body), 'utf8'); // Update the token hash with the request body using utf8
    return signature === hmac.digest('hex');
}