최신 업데이트: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>
전체 계산 프로세스는 다음과 같습니다:
요청(호스트, 작업, 헤더 등)의 콘텐츠를 표준(표준) 형식으로 정렬합니다. 표준 요청은 서명할 문자열을 생성하는 데 사용되는 입력 중 하나입니다.
표준 요청과 알고리즘, 요청 날짜, 자격 증명 범위, 표준 요청의 다이제스트(해시)와 같은 추가 정보를 사용하여 서명할 문자열을 생성합니다.
이 단계에서는 먼저 비밀 접근 키를 초기 해싱 작업의 키로 사용하여 요청 날짜, 지역 및 서비스에 일련의 키 해시 작업(HMAC 작업)을 수행하여 서명 키를 도출해야 합니다. br>
서명 키를 도출한 후 서명할 문자열에 키 해시 작업을 수행하여 서명을 계산합니다. 파생된 서명 키를 이 작업의 해시 키로 사용합니다.
서명 프로세스를 시작하려면 표준화된(표준) 형식으로 요청의 정보를 포함하는 문자열을 생성해야 합니다. 이렇게 하면 클라우드 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
서명할 문자열에는 요청에 대한 메타 정보 및 작업 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
서명은 accessKey Secret을 해시 인코딩 키로 사용하여 작업 2에서 서명할 문자열의 HMAC-SHA256 해시입니다. 계산 방법은 다음과 같습니다:
Signature = HMAC-SHA256(SigningKey, StringToSign)
참고: 사용 중인 프로그래밍 언어에 대해 올바른 순서로 HMAC 파라미터를 지정해야 합니다. 이 예시에서는 첫 번째 파라미터로 키를, 두 번째 파라미터로 데이터(message)를 표시하지만 사용자가 사용하는 함수는 키와 데이터를 지정하는 순서가 다를 수도 있습니다.*
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 -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"}'
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'
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이어야 합니다.