재생 토큰 생성 및 서명 - Amazon Interactive Video Service

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

재생 토큰 생성 및 서명

JWT 및 지원되는 토큰 서명 라이브러리 작업에 대한 자세한 내용은 jwt.io를 참조하세요. jwt.io 인터페이스에서 토큰에 서명하려면 프라이빗 키를 입력해야 합니다. 퍼블릭 키는 토큰을 확인하려는 경우에만 필요합니다.

토큰 스키마

모든 JWT에는 헤더, 페이로드 및 서명과 같은 세 개의 필드가 있습니다.

  • 헤더는 다음을 지정합니다.

    • alg는 서명 알고리즘입니다. ES384는 SHA-384 해시 알고리즘을 사용하는 ECDSA 서명 알고리즘입니다.

    • typ는 토큰 유형, JWT입니다.

    { "alg": "ES384", "typ": "JWT" }
  • 페이로드에는 Amazon IVS 관련 데이터가 포함되어 있습니다.

    • channel-arn은 비디오 재생 요청에 대한 참조입니다.

    • access-control-allow-origin은 지정된 오리진으로 재생을 제한하는 데 사용할 수 있는 선택적 필드입니다. 즉, 지정된 웹사이트에서만 스트림을 볼 수 있도록 허용합니다. 예를 들어, 사용자가 플레이어를 다른 웹사이트에 포함시키지 못하도록 할 수 있습니다. 기본적으로 모든 오리진에서 재생이 허용됩니다. (브라우저 클라이언트만 제한하고 비 브라우저 클라이언트의 재생은 제한하지 않습니다.) 이 필드는 쉼표로 구분된 여러 오리진을 포함할 수 있습니다. 와일드카드 도메인은 허용됩니다. 각 오리진의 호스트 이름은 *(예: https://*.amazon.com)로 시작할 수 있습니다.

    • strict-origin-enforcementaccess-control-allow-origin 필드에 지정된 오리진 제한을 강화하는 데 사용할 수 있는 선택적 필드입니다. 기본적으로 access-control-allow-origin 제한은 다변량 재생 목록에만 적용됩니다. strict-origin-enforcement가 활성화되면 서버는 요청한 오리진이 모든 재생 요청(다변량 재생 목록, 변형 재생 목록 및 세그먼트 포함)의 토큰과 일치하도록 요구합니다. 즉, 모든 클라이언트(브라우저가 아닌 클라이언트 포함)는 각 요청과 함께 유효한 오리진 요청 헤더를 제공해야 합니다. setOrigin 메서드를 사용하여 IVS iOS 및 Android 플레이어 SDK에서 헤더를 설정합니다. iOS Safari를 제외한 웹 브라우저에서는 자동으로 설정됩니다. iOS Safari의 경우 오리진 요청 헤더를 전송하려면 비디오 요소에 crossorigin="anonymous"를 추가해야 합니다. 예: <video crossorigin="anonymous"></video>.

    • single-use-uuid는 토큰을 작성할 때 생성하는 유효한 범용 고유 식별자(UUID)를 포함하는 선택적 필드입니다. 이 필드와 UUID 값을 추가하면 생성한 관련 토큰이 다변량 재생 목록을 가져오고 스트리밍을 시청하는 데 사용되면 무효화됩니다. 일회용 인증 토큰을 사용하면 악의적인 사용자가 비공개 채널에서 다른 시청자와 스트리밍을 공유하기가 더 어려워집니다. single-use-uuid 클레임을 사용할 때 exp 클레임에 대한 최댓값은 10분입니다.

    • viewer-id는 토큰이 부여된 시청자를 추적하고 참조하는 데 사용되는 ID를 포함하는 선택적 필드입니다. 이 필드는 나중에 시청자의 시청 세션을 취소하는 기능을 활성화하는 데 필요합니다. 최대 길이는 40자이며 값은 문자열로 한정되어야 합니다. 개인 식별 정보, 기밀 정보 또는 민감한 정보에는 이 필드를 사용하지 마세요. viewer-id를 사용할 때 exp의 최댓값은 10분입니다.

    • viewer-session-version은 이 시청자 세션과 연결할 버전을 포함하는 선택적 필드입니다. 시청자 세션을 취소할 때 이 값을 사용하여 취소되는 시청자 세션을 필터링할 수 있습니다. 예를 들어 여기에 Unix 타임스탬프를 지정하면 지정된 시간 전에 시작된 모든 세션이 취소됩니다. 값은 부호 있는 64비트 정수(Int64)여야 합니다. 이 필드는 viewer-id와 함께 제공되며(선택 사항) 자체적으로는 아무것도 하지 않습니다. 기본값은 0입니다.

    • exp는 토큰이 만료될 때의 Unix UTC 타임스탬프입니다. 스트림을 볼 수 있는 기간을 나타내는 것은 아닙니다. 시청자가 스트림을 통하지 않고 재생을 초기화할 때 토큰의 유효성을 검사합니다. 정수 유형 값으로 이 값을 입력합니다.

      Unix 타임스탬프는 윤초를 무시하고 1970-01-01T00:00:00Z UTC부터 지정된 UTC 날짜/시간까지의 초 수를 나타내는 숫자 값입니다. 언어마다 Unix 타임스탬프를 다른 단위로 측정합니다. 예를 들어 JavaScript 's는 시간을 밀리초 단위로 Date.now() 반환합니다. JWT RFC 섹션 4.1.4의 exp를 참조하세요.

    { "aws:channel-arn": "<channel_arn>", "aws:access-control-allow-origin": "<your-origin>", "aws:strict-origin-enforcement": true, "aws:single-use-uuid": "<UUID>", "aws:viewer-id": "<viewer_id>", "aws:viewer-session-version": "<viewer_session_version>", "exp": <unix timestamp> }
  • 서명을 생성하려면 헤더(ES384)에 지정된 알고리즘과 함께 프라이빗 키를 사용하여 인코딩된 헤더 및 인코딩된 페이로드에 서명합니다.

    ECDSASHA384( base64UrlEncode(header) + "." + base64UrlEncode(payload), <private-key> )

지침

  1. ES384 서명 알고리즘 및 재생 키 리소스 중 하나와 연결된 프라이빗 키를 사용하여 토큰의 서명을 생성합니다(위의 ECDSASHA384 예제 참조).

  2. 토큰을 수집합니다.

    base64UrlEncode(header) + "." + base64UrlEncode(payload) + "." + base64UrlEncode(signature)
  3. 서명된 토큰을 재생 URL에 쿼리 파라미터로 추가합니다.

    https://b37c565f6d790a14a0e78afaa6808a80.us-west-2.playback.live-video.net/ api/video/v1/aws.ivs.us-west-2.123456789. channel.fbc789c1-2c56-4ce6-a30a-d99275dc4481.m3u8?token=<token>