Signature Calculation

최신 업데이트:2023-02-06 15:35:17

각 요청에 대해 Cloud VoD는 요청의 권한 부여 헤더를 통해 ID를 확인합니다.

이 섹션에서는 클라우드 VoD에서 비디오 목록을 가져오는 예를 들어 Authorization 헤더를 구성하는 방법을 단계별로 설명합니다.
비디오 목록을 가져오는 URL은 다음과 같습니다:
https://api.cloudv.haplat.net/vod/videoManage/getVideoList

사용방법

권한 부여는 알고리즘, AccessKey Secret, SignedHeaders 및 서명으로 구성됩니다. 알고리즘은 WS3-HMAC-SHA256의 고정 값이므로 권한 부여는 다음과 같습니다:

Authorization:WS3-HMAC-SHA256
Credential=<AccessKeyId >/<Date>/<Region>/<Service>/wos_request,
SignedHeaders=<SignedHeader>;<SignedHeader>;<SignedHeader>,
Signature=<Signature>

전체 계산 프로세스는 다음과 같습니다:

  1. Signature = HexEncode(HMAC_SHA256(SecretKey, StringToSign ));
  2. Stringtosign = Algorithm + ‘\n’ + Timestamp + ‘\n’ + Hash.SHA256( CanonicalRequest )
  3. CanonicalRequest = Method + ‘\n’ + RequestURI + ‘\n’ + QueryString + ‘\n’ + CanonicalHeaders + ‘\n’ + SignedHeaders + ‘\n’ + HashedRequestPayload
  4. HashedRequestPayload = Lowercase(HexEncode(Hash.SHA256( RequestPayload )))

권장 계산 단계

1. 표준 요청(Request) 생성

요청(호스트, 작업, 헤더 등)의 콘텐츠를 표준(표준) 형식으로 정렬합니다. 표준 요청은 서명할 문자열을 생성하는 데 사용되는 입력 중 하나입니다.

2. 서명할 문자열 생성

표준 요청과 알고리즘, 요청 날짜, 자격 증명 범위, 표준 요청의 다이제스트(해시)와 같은 추가 정보를 사용하여 서명할 문자열을 생성합니다.

3. 서명 계산

이 단계에서는 먼저 비밀 접근 키를 초기 해싱 작업의 키로 사용하여 요청 날짜, 지역 및 서비스에 일련의 키 해시 작업(HMAC 작업)을 수행하여 서명 키를 도출해야 합니다. br>
서명 키를 도출한 후 서명할 문자열에 키 해시 작업을 수행하여 서명을 계산합니다. 파생된 서명 키를 이 작업의 해시 키로 사용합니다.

작업 1: 표준 요청 생성

서명 프로세스를 시작하려면 표준화된(표준) 형식으로 요청의 정보를 포함하는 문자열을 생성해야 합니다. 이렇게 하면 클라우드 VoD가 요청을 수신할 때 서비스 측에서 사용자가 계산한 것과 동일한 서명을 계산할 수 있습니다.

다음 형식에 따라 표준 요청을 생성해야 합니다:

<HTTPMethod> + "\n" +
<RequestURI> + "\n" +
<QueryString> + "\n" +
<CanonicalHeaders> + "\n" +
<SignedHeaders> + "\n" +
<HashedPayload>

표준 요청(Request):

필드 설명
HTTPMethod HTTP 방법 중 하나입니다. 예를 들어 GET 및 POST. 예시 요청에서는 POST 방법을 사용하고 있습니다.
RequestURI 요청의 URI입니다. 비디오 목록 API를 가져오는 경우 URI는 /vod/videoManage/getVideoList입니다.
QueryString 요청 URL의 쿼리 문자열 파라미터입니다. POST 요청의 경우 QueryString은 빈 문자열 “”입니다.
GET 요청의 경우 QueryString은 “?” 뒤에 오는 문자열입니다. 요청 URL에. 예를 들어 videoName=testVideoName&pageIndex=2&pageSize=5. *
CanonicalHeaders 서명을 계산하는 데 사용할 헤더의 키와 값입니다. CanonicalHeaders에 적어도 헤더 호스트콘텐츠 유형 을 포함해야 합니다. 더 나은 인증을 위해 CanonicalHeaders에 사용자 정의 헤더를 추가할 수도 있습니다.
참고:
1. 모든 대문자는 소문자로 전환하고 첫 번째와 마지막 공백을 제거해야 합니다. 그런 다음 key:value\n 형식으로 키와 값을 조합합니다.
2. CanonicalHeaders에 포함할 헤더가 두 개 이상일 경우 헤더의 모든 키와 값은 헤더 키(소문자)의 ASCII 순서로 정렬됩니다.*
SignedHeaders ASCII 오름차순으로 정렬되고 세미콜론으로 구분된 소문자 요청 헤더 이름 목록입니다. 나열된 헤더는 CanonicalHeaders에 나열된 헤더와 동일해야 합니다.

예를 들어 위의 CanonicalHeaders 예에서 SignedHeaders는 다음과 같습니다:
content-type;host
HashedRequestPayload 요청 페이로드에 대한 SHA256 해시의 16진수 값입니다.
예를 들어 요청이 content-type: application/json인 경우 HashedRequstPayload는 다음과 같습니다:
Lowercase(HexEncode(Hash.SHA256({"videoName":"a","pageSize":"5","pageIndex":"2"}))) if content-type:application/x-www-form-urlencoded, HashedRequestPayload는 다음과 같습니다:
Lowercase(HexEncode(Hash.SHA256("videoName=a&pageIndex=2&pageSize=5"))) 참고: Lowercase(HexEncode(Hash.SHA256(RequestPayload))) 는 요청 페이로드의 HASH를 계산한 후 16진수로 인코딩하고 소문자로 전환하기 위한 의사 코드입니다.
GET 요청의 경우 HashedRequestPayload는 빈 문자열의 해시이고 해시는 다음 값을 반환합니다: 135b13e1b15e3c836eab2ab9196a86e7bcdb7b68da27215175a65b89ade3587e

이 예에서 CanonicalRequest는 다음과 같습니다:

POST
/vod/videoManage/getVideoList
content-type:application/json; charset=utf-8
host:api.cloudv.haplat.net
content-type;host
641f7989f8d223af8c5049f805890fcaf2ae4a99780a01eb454cf7c9368dd1a4

작업 2: 서명할 문자열 생성

서명할 문자열에는 요청에 대한 메타 정보 및 작업 1: 서명 에 대한 표준 요청 생성에서 생성한 표준 요청에 대한 메타 정보가 포함됩니다. 작업 3: 서명 계산 에서 요청 서명을 계산하기 위한 입력으로 서명할 문자열과 나중에 생성하는 파생 서명 키를 사용합니다.

서명할 문자열은 다음 문자열을 연결한 것입니다:

StringToSign =
    Algorithm + \n +
    Timestamp + \n +
    HashedCanonicalRequest

필드 설명
Algorithm 사용중인 해시 알고리즘, 현재 “WS3-HMAC-SHA256”으로 고정되어 있습니다.
Timestamp 요청 헤더 X-WS-Timestamp에 사용하는 값과 일치하는 타임스탬프(초)입니다. 이 예에서 값은 1564645579입니다.
HashedCanonicalRequest 작업 1: 정규 요청 생성 에서 생성한 CanonicalRequest의 해시는 이 예에서는 다음과 같습니다. 16bc1b4d4e6818f5aec2a7273cb2c3d3e4831fd61c6510222b9bec19bffac646 . .

참고: 타임스탬프와 표준 시간이 동기화되었는지 확인해야 합니다. 그렇지 않으면 시간 차이가 5분 이상일 경우 동기화가 실패합니다. 시스템이 표준 시간과 동기화되지 않은 경우 요청이 실패하고 타임스탬프 만료로 인한 만료 서명 오류를 반환할 수 있습니다.

이 예에서 StringToSign은 다음과 같습니다:

WS3-HMAC-SHA256
1564645579
16bc1b4d4e6818f5aec2a7273cb2c3d3e4831fd61c6510222b9bec19bffac646

작업 3: 서명 계산

서명은 accessKey Secret을 해시 인코딩 키로 사용하여 작업 2에서 서명할 문자열의 HMAC-SHA256 해시입니다. 계산 방법은 다음과 같습니다:

Signature = HMAC-SHA256(SigningKey, StringToSign)

참고: 사용 중인 프로그래밍 언어에 대해 올바른 순서로 HMAC 파라미터를 지정해야 합니다. 이 예시에서는 첫 번째 파라미터로 키를, 두 번째 파라미터로 데이터(message)를 표시하지만 사용자가 사용하는 함수는 키와 데이터를 지정하는 순서가 다를 수도 있습니다.*

작업 4: 권한 부여 생성

Authorization은 인증을 위해 요청 헤더에 입력해야 하는 값입니다. 결과 Authorization은 다음과 같이 할 수 있습니다:

Authorization =
    Algorithm + ' ' +
    'Credential=' + AccessKey + ', ' +
    'SignedHeaders=' + SignedHeaders + ', ' +
    'Signature=' + Signature

필드 설명
Algorithm 사용중인 해시 알고리즘, 현재 “WS3-HMAC-SHA256”으로 고정되어 있습니다.
AccessKey AccessKey ID입니다. 콘솔의 보안 설정 > 접근 제어 > 사용자 정보 관리 > 접근 키 관리 에서 접근 키 ID를 가져올 수 있습니다. 이 예에서 AccessKey ID는 AKIDz8krbsJ5yKBZQpn74WFkmLPx3EXAMPLE . .
SignedHeaders 자세한 내용은 작업 1: 표준 요청 생성 을 참조하십시오. 이 예에서 값은 content-type;host . .
Signature 작업 3: 서명 계산에서 생성한 서명입니다. 이 예에서 서명 값은 72e494ea809ad7a8c8f7a4507b9bddcbaa8e581f516e8da2f66e2c5a96525168 . .

상기 정보에 따르면 다음과 같이 Authorization을 가져올 수 있습니다:

WS3-HMAC-SHA256 Credential=AKIDz8krbsJ5yKBZQpn74WFkmLPx3EXAMPLE, SignedHeaders=content-type;host, Signature=792dcb6d648a456a030c9c6683fa7bde2a31cb4c72cfeaa354da000adf7c288d

최종 요청(Request)은 다음과 같습니다:

POST https://api.cloudv.haplat.net/
Authorization: WS3-HMAC-SHA256 Credential=AKIDz8krbsJ5yKBZQpn74WFkmLPx3EXAMPLE, SignedHeaders=content-type;host, Signature=792dcb6d648a456a030c9c6683fa7bde2a31cb4c72cfeaa354da000adf7c288d
Content-Type: application/json; charset=utf-8
Host: api.cloudv.haplat.net
X-WS-AccessKey: AKIDz8krbsJ5yKBZQpn74WFkmLPx3EXAMPLE
X-WS-Timestamp: 1564645579

{"videoName":"a","pageSize":"5","pageIndex":"2"}

오류 코드

코드 설명
4001 인증 파라미터가 정확하지 않습니다. 요청(Request)에 필요한 파라미터가 모두 포함되어 있는지 확인하십시오.
4002 X-WS-AccessKey 오류입니다. 요청에 접근 키가 있는지 확인하십시오.
4003 잘못된 X-WS-Timestamp입니다. 타임스탬프는 두 번째 수준에 있어야 합니다.
4004 X-WS-Timestamp가 만료됩니다.
4005 잘못된 호스트 파라미터입니다.
4006 콘텐츠 유형이 잘못되었습니다.
4007 인증에 실패했습니다. 파라미터가 정확한지 확인하십시오.
4008 인증에 실패했습니다. 실패는 다음과 같은 이유로 인해 발생할 수 있습니다:
- 잘못된 서명.
- 서명이 요청에서 실제로 전송된 내용과 일치하지 않습니다.
- 잘못된 AccessKey 비밀.
4009 승인은 다른 요청에서 이미 사용되었습니다. 다른 요청을 생성하십시오.

curl 예시

POST 요청

content-type:application/json

curl -X POST https://api.cloudv.haplat.net/vod/videoManage/getVideoList 
-H "Authorization: WS3-HMAC-SHA256 Credential=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, SignedHeaders=content-type;host, Signature=471d8f86cefa4fa2f929642207b6df8fe770e82e0df328f4f68af08c8b8a8029" 
-H "Content-Type: application/json; charset=utf-8" 
-H "Host: api.cloudv.haplat.net" 
-H "X-WS-Timestamp: 1564644606" 
-H "X-WS-AccessKey: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" 
-d '{"videoName": "a","pageIndex":"2","pageSize":"5"}'

content-type:application/x-www-form-urlencoded

curl -X POST https://api.cloudv.haplat.net/vod/videoManage/getVideoList 
-H "Authorization: WS3-HMAC-SHA256 Credential=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, SignedHeaders=content-type;host, Signature=37ea1014de0c90e83e733f8d19a5d3ae993896d34450c9f8cf8df5642c81339e" 
-H "Content-Type: application/x-www-form-urlencoded; charset=utf-8" 
-H "Host: api.cloudv.haplat.net" 
-H "X-WS-Timestamp: 1564644607" 
-H "X-WS-AccessKey: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" 
-d 'videoName=a&pageIndex=2&pageSize=5'

GET 요청

curl -X GET https://api.cloudv.haplat.net/vod/videoManage/getVideoList?videoName=a&pageIndex=2&pageSize=5 
-H "Authorization: WS3-HMAC-SHA256 Credential=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, SignedHeaders=content-type;host,     Signature=0b489e43c5cd2e52cbe0768a68c614a4211210a6d63b18ff65cc986f18e75aac" 
-H "Content-Type: application/x-www-form-urlencoded; charset=utf-8" 
-H "Host: api.cloudv.haplat.net" 
-H "X-WS-Timestamp: 1564644607" 
-H "X-WS-AccessKey: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"

GET 요청의 경우 콘텐츠 유형은 application/x-www-form-urlencoded이어야 합니다.

이 문서의 내용이 도움이 되었습니까?
아니오
정상적으로 제출되었습니다.피드백을 주셔서 감사합니다.앞으로도 개선을 위해 노력하겠습니다.