웹훅 서명 확인

개요 #

우시페이가 웹훅 엔드포인트로 전송하는 이벤트를 확인합니다.

우시페이 서명 헤더 #

The 우시페이-서명 헤더에는 서명된 각 이벤트에 포함된 타임스탬프와 서명이 포함되어 있습니다.

타임스탬프 앞에는 t=로 표시되며, 각 서명 앞에는 v1.

예를 들어

Wooshpay-Signature:t=1492774577,v1=6fdfb9c357542b8ee07277f5fca2c6f728bae2dce9be2f91412f4de922c1bae4

웹훅 비밀 키 #

우쉬페이는 고유한 비밀 키 를 입력합니다. whsec_

서명을 확인하기 전에 다음에서 웹훅 비밀을 검색해야 합니다. webhook.secret 를 웹훅 객체에 추가합니다.

webhook-secret-key

서명 확인 #

비교하여 헤더에 서명예상 서명를 클릭하면 제3자가 아닌 우시페이가 보낸 것인지 확인할 수 있습니다.

서명을 단계별로 확인하려면 아래 가이드를 따르세요:

1단계: 헤더에서 타임스탬프와 서명을 추출합니다. #

헤더를 분할하여 , 문자를 구분 기호로 지정하여 요소 목록을 가져옵니다. 그런 다음 각 요소를 분할하여 = 문자를 구분 기호로 지정하여 접두사와 값 쌍을 가져옵니다.

접두사 값 t 는 타임스탬프에 해당하고 v1 는 서명에 해당합니다. 다른 모든 요소는 삭제할 수 있습니다.

예를 들어

t=1687845304,v1=6fdfb9c357542b8ee07277f5fca2c6f728bae2dce9be2f91412f4de922c1bae4

2단계: 준비하기 서명_페이로드 문자열 #

The 서명_페이로드 문자열을 연결하여 생성합니다:

  • 타임스탬프(문자열)
  • 캐릭터 .
  • 실제 JSON 페이로드(요청 본문)

예를 들어

1687845304+.+JSON 페이로드

1687845304.{
  "id": "evt_1NNUrjL6kclEVx6Mb1x5dKJ3",
  "object": "event",
  "api_version": "2022-11-15",
  "created": 1687845303,
  "data": {
    "object": {
      "id": "prod_O9oUVgsSaordCT",
      "object": "제품",
      "active": true,
      "livemode": true,
      "name": "test",
      "type": "서비스",
  "livemode": true,
  "pending_webhooks": 1,
  "type": "product.created"
}

3단계: 예상 서명 결정하기 #

SHA256 해시 함수를 사용하여 HMAC을 계산합니다.

  • 엔드포인트의 웹훅 시크릿을 에서 다운로드할 수 있습니다. webhook.secret 웹후크 객체에서
  • 사용 서명_페이로드 문자열을 메시지 2단계에서 이미 준비한 것입니다.

를 통해 + 메시지를 사용하면 다음과 같은 HMAC 문자열을 계산할 수 있습니다. 예상 서명

예를 들어

 public static void main(String[] args) {
        String webhookSecret = "whsec_261V2mfsXt1BsOjJbHaQOxnTzhWZKrUE";
        문자열 타임스탬프 = "1687845304";
        String requestBody = "{\"id\":\"evt_1NNUrjL6kclEVx6Mb1x5dKJ3\",\"object\":\"event\",\"api_version\":\"2022-11-15\",\"created\":1687845303,\"data\":{\"object\":{\"id\":\"prod_O9oUVgsSaordCT\",\"object\":\"product\",\"active\":true,\"livemode\":true,\"name\":\"test\",\"type\":\"service\",\"livemode\":true,\"pending_webhooks\":1,\"type\":\"product.created\"}";
        문자열 서명 페이로드 = 타임스탬프+"."+요청 본문;
        String signature = hmacSha256(웹훅시크릿,서명된페이로드);
        String WooshpaySignature = "t="+타임스탬프+",v1="+서명;
    }

    /**
     * HMAC-SHA256
     */
    public static String hmacSha256(String secret, String message) {
        String res;
        try {
            Mac mac = Mac.getInstance("HmacSHA256");
            SecretKey secretKey = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
            mac.init(secretKey);
            byte[] hash = mac.doFinal(message.getBytes());
            res = Hex.encodeHexString(hash);
        } catch (Exception e) {
            null을 반환합니다;
        }
        return res;
    }

4단계: 서명 비교 #

비교 헤더에 서명예상 서명.

동일성 일치의 경우, 두 값의 차이를 계산합니다. 현재 타임스탬프수신된 타임스탬프를 클릭한 다음 그 차이가 허용 범위 내에 있는지 결정하세요.

타이밍 공격으로부터 보호하기 위해 상수 시간 문자열 비교를 사용하여 예상 서명과 수신된 각 서명을 비교할 수 있습니다.

어떤 느낌인가요?
Updated on 8월 5, 2023