본문으로 건너뛰기

Multi DRM 기반 JWT 가이드

Multi DRM은 다양한 디바이스 및 브라우저 환경에서 콘텐츠를 안전하게 보호하기 위해, 여러 DRM 기술을 하나의 통합된 시스템으로 제공하는 서비스입니다.
Kollus VOD는 글로벌 DRM 솔루션인 PallyCon과 연동하여 Widevine(Android/Chrome), FairPlay(iOS/Safari), PlayReady(Windows/Edge) DRM을 단일한 JWT 인증 규격으로 관리할 수 있습니다.

ℹ️참고

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


JWT 기술 사양

암호화 알고리즘

보안 무결성을 위해 HMAC SHA-256(HS256) 알고리즘만을 지원합니다.

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

인증 키

JWT를 생성하고 호출할 때 다음 두 가지 키가 사용됩니다.

보안 키(Security Key)

  • 설명: JWT 서명(Signing)에 사용되는 비밀 키입니다. 절대로 외부에 노출되어서는 안 됩니다.
  • 위치: Kollus VOD 콘솔 > [서비스 계정] > [사용자 키]
ℹ️참고

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

사용자 키(Custom Key)

  • 설명: 보안 키를 암호화한 값입니다.
  • 위치: Kollus VOD 콘솔 > [서비스 계정] > [사용자 키]
    새로고침 시 값이 변경될 수 있으나, 변경 시점에 표시된 최신 값을 복사해서 사용하면 됩니다.

JWT 페이로드 상세 규격

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

필수 옵션 적용 예시

{
"cuid": "user_id",
"expt": 1735660800,
"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=XXXX",
"custom_header": {
"key": "pallycon-customdata-v2",
"value": "BASE64_ENCODED_TOKEN"
}
}
}
}
]
}

기본 옵션

옵션타입필수 여부기본값설명
cuidstring-사용자 ID. 중복 재생, 북마크, 이어보기(nscreen) 설정 시 기준 식별자(Key)로 사용됩니다.
영문 및 숫자 사용을 권장합니다. 한글이나 특수문자는 차단 내역 조회 시 검색이 제한될 수 있습니다.
exptinteger-JWT 만료 시간(Unix TimeStamp). 최댓값은 1893455999입니다.
만료 후에도 서버 시간 오차를 고려하여 최대 1분까지 콘텐츠 접근이 허용될 수 있습니다.
mcarray-재생할 콘텐츠 정보를 담은 배열

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

옵션타입설명
mckeystring
drm_policyobjectDRM 정책 데이터

drm_policy 객체

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

data 하위 옵션

옵션타입필수 여부설명
license_urlstring라이선스 서버 주소(Widevine, PlayReady 사용 시 필수)
certificate_urlstringFairPlay 인증서 주소(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": "2024-12-31T23:59:59Z",
"site_id": "XXXX",
"policy": "...",
"cid": "content_id"
}

파라미터 설명

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

라이선스 토큰에 대한 자세한 내용은 공식 문서를 참고하세요.