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}"
}
}
}
}]
}
식별 키 정보는 서비스 연동 키 문서를 참고하세요.
기본 옵션
| 옵션 | 타입 | 설명 |
|---|---|---|
cuid | string | 시청자 ID
|
expt | integer | JWT 만료 일시 (형식: Unix Timestamp, 최댓값: 1893455999)
|
mc | array | 재생할 콘텐츠 정보를 포함하는 배열 |
콘텐츠 옵션 (mc 배열 내부 설정)
| 옵션 | 타입 | 설명 |
|---|---|---|
mckey | string | 콘텐츠 식별자 (미디어 콘텐츠 키) |
drm_policy | object | Multi DRM 정책 데이터 |
drm_policy 객체
| 옵션 | 타입 | 설명 |
|---|---|---|
kind | string | DRM 솔루션 종류 (현재 inka(PallyCon)만 지원) |
streaming_type | string | 스트리밍 프로토콜 종류
|
data | object | 라이선스 인증 및 발급에 필요한 데이터 |
data 하위 옵션
| 옵션 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
license_url | string | △ | (Widevine, PlayReady 사용 시 필수) 라이선스 서버 주소 |
certificate_url | string | △ | (FairPlay 사용 시 필수) FairPlay 인증서 주소 |
custom_header | object | ◯ | 라이선스 요청 시 전달할 사용자 정의 헤더 |
custom_header.key | string | ◯ | 헤더 키 이름 ("pallycon-customdata-v2" 고정) |
custom_header.value | string | ◯ | PallyCon 라이선스 토큰 값 (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_id | PallyCon 서비스에서 발급된 Site ID |
policy | 라이선스 정책(재생 유효 기간, 재생 횟수 등)을 정의하는 문자열 |
cid | 콘텐츠 식별자 (Kollus 업로드 파일 키)
|
라이선스 토큰 데이터 구성에 관한 상세 가이드는 공식 문서를 참고하세요.