본문으로 건너뛰기

Multi DRM 전용 JWT 규격

Multi DRM은 다양한 디바이스 및 브라우저 환경에서 콘텐츠를 안전하게 보호하기 위해, 여러 표준 DRM 기술을 통합하여 제공하는 서비스입니다.

Kollus VOD는 글로벌 DRM 솔루션인 PallyCon(현 Doverunner)과 연동하여 Widevine(Android/Chrome), FairPlay(iOS/Safari), PlayReady(Windows/Edge) DRM을 단일한 JWT 인증 규격으로 통합 관리합니다.

ℹ️기능 활성화

Multi DRM은 별도의 계약 및 활성화가 필요한 부가 서비스입니다. 해당 기능을 활성화하려면 영업 담당자(AM, biz@catenoid.net) 또는 기술 지원팀(PE, tech_support@catenoid.net)으로 문의해 주세요.


JWT 기술 사양

암호화 알고리즘

Kollus VOD는 HMAC SHA-256(HS256) 알고리즘만을 지원합니다.

Header: { "alg": "HS256", "typ": "JWT" }

인증 키

JWT 생성 및 호출 시 다음 두 가지 키를 사용합니다.

보안 키

  • 설명: JWT 서명(Signing) 및 검증에 사용되는 비밀 키입니다. 외부 유출에 주의하세요.
  • 확인 경로: Kollus VOD 콘솔 > [서비스 계정] > [사용자 키]
ℹ️참고

보안 키 변경은 기술 지원팀(PE, tech_support@catenoid.net)으로 문의해 주세요.

사용자 키

  • 설명: 보안 키를 암호화한 값으로, 보안 키와 함께 인증(JWT)에 사용됩니다.
  • 확인 경로: Kollus VOD 콘솔 > [서비스 계정] > [사용자 키]
    새로고침 시 값이 업데이트될 수 있으며, 사용 시점의 최신 값을 복사하여 적용해야 합니다.

JWT 페이로드 상세 규격

Multi DRM 연동 시에는 mc 배열 내부에 drm_policy 객체를 포함하여 각 환경별(Widevine, FairPlay, PlayReady) 라이선스 정보를 전달해야 합니다.

필수 옵션 적용 예시

{
"cuid": "{END_USER_ID}",
"expt": 1703980800,
"mc": [{
"mckey": "{MEDIA_CONTENT_KEY}"
"drm_policy": {
"kind": "inka",
"streaming_type": "dash",
"data": {
"license_url": "https://license.pallycon.com/ri/licenseManager.do",
"certificate_url": "https://license.pallycon.com/ri/fpsKeyManager.do?siteId={YOUR_SITE_ID}",
"custom_header": {
"key": "pallycon-customdata-v2",
"value": "{BASE64_ENCODED_TOKEN}"
}
}
}
}]
}

식별 키 정보는 서비스 연동 키 문서를 참고하세요.

기본 옵션

옵션타입설명
cuidstring시청자 ID
  • 중복 재생, 북마크, 이어보기(nscreen) 설정의 기준값입니다.
  • 영문 및 숫자 사용을 권장합니다. 한글이나 특수문자 사용 시 차단 내역 검색이 제한될 수 있습니다.
exptintegerJWT 만료 일시 (형식: Unix Timestamp, 최댓값: 1893455999)
  • 만료 후에도 서버 시간 오차를 고려하여 최대 1분까지 콘텐츠 접근이 허용될 수 있습니다.
mcarray재생할 콘텐츠 정보를 포함하는 배열

콘텐츠 옵션 (mc 배열 내부 설정)

옵션타입설명
mckeystring콘텐츠 식별자 (미디어 콘텐츠 키)
drm_policyobjectMulti DRM 정책 데이터

drm_policy 객체

옵션타입설명
kindstringDRM 솔루션 종류 (현재 inka(PallyCon)만 지원)
streaming_typestring스트리밍 프로토콜 종류
  • hls: FairPlay
  • dash: 그 외 환경
dataobject라이선스 인증 및 발급에 필요한 데이터

data 하위 옵션

옵션타입필수 여부설명
license_urlstring(Widevine, PlayReady 사용 시 필수) 라이선스 서버 주소
certificate_urlstring(FairPlay 사용 시 필수) FairPlay 인증서 주소
custom_headerobject라이선스 요청 시 전달할 사용자 정의 헤더
custom_header.keystring헤더 키 이름 ("pallycon-customdata-v2" 고정)
custom_header.valuestringPallyCon 라이선스 토큰 값 (Base64 인코딩 필수)

DRM 상세 설정

PlayReady

  • 지원 환경: Windows Edge, Windows Chrome(v138 이상)
⚠️주의

브라우저의 하드웨어 가속 옵션이 반드시 활성화되어 있어야 합니다. 가속 기능이 비활성화된 경우 라이선스 발급 단계에서 -57208 에러가 발생하며 재생이 차단됩니다.

{
"drm_policy": {
"kind": "inka",
"streaming_type": "dash",
"data": {
"license_url": "https://license.pallycon.com/ri/licenseManager.do",
"custom_header": {
"key": "pallycon-customdata-v2",
"value": "eyJ0aW1lc3RhbXAi..."
}
}
}
}

Widevine

  • 지원 환경: Chromium 기반 브라우저, Android
⚠️주의
  • 화면 캡처 방지: 하드웨어 가속이 활성화된 환경에서만 정상 작동합니다.
  • CSS 충돌: iframe 내부에 특정 CSS 효과가 적용될 경우, 브라우저 보안 정책에 따라 재생이 원활하지 않을 수 있습니다.
  • 시크릿 모드(Incognito): 구글 보안 정책에 따라 시크릿 모드에서 Widevine DRM 재생이 제한될 수 있습니다.
{
"drm_policy": {
"kind": "inka",
"streaming_type": "dash",
"data": {
"license_url": "https://license.pallycon.com/ri/licenseManager.do",
"custom_header": {
"key": "pallycon-customdata-v2",
"value": "eyJ0aW1lc3RhbXAi..."
}
}
}
}

FairPlay

  • 지원 환경: Safari, iOS, iPadOS
⚠️주의

FairPlay 환경에서는 certificate_url 설정이 필수입니다. URL 내 siteId 파라미터에는 PallyCon 콘솔에서 발급받은 ID를 입력하세요.

{
"drm_policy": {
"kind": "inka",
"streaming_type": "hls",
"data": {
"license_url": "https://license.pallycon.com/ri/licenseManager.do",
"certificate_url": "https://license.pallycon.com/ri/fpsKeyManager.do?siteId=XXXX",
"custom_header": {
"key": "pallycon-customdata-v2",
"value": "eyJ0aW1lc3RhbXAi..."
}
}
}
}

PallyCon 라이선스 토큰 생성

custom_header.value 파라미터에 입력할 값은 PallyCon 규격의 JSON 데이터를 생성한 후, 해당 문자열 전체를 Base64로 인코딩하여 준비합니다.

토큰 데이터 구조

{
"timestamp": "2025-12-31T23:59:59Z",
"site_id": "XXXX",
"policy": "...",
"cid": "content_id"
}

파라미터 설명

옵션설명
timestamp토큰 생성 시각 (ISO 8601 형식 준수)
site_idPallyCon 서비스에서 발급된 Site ID
policy라이선스 정책(재생 유효 기간, 재생 횟수 등)을 정의하는 문자열
cid콘텐츠 식별자 (Kollus 업로드 파일 키)
  • 확인 경로: Kollus VOD 콘솔 > [라이브러리] > 콘텐츠 클릭 > [기본] 탭
ℹ️참고

라이선스 토큰 데이터 구성에 관한 상세 가이드는 공식 문서를 참고하세요.