--- title: "Content certification" slug: "vpe-rn-content-protection" updated: 2026-09-17T09:22:36Z published: 2026-09-17T09:22:36Z canonical: "guide.ncloud-docs.com/vpe-rn-content-protection" stale: true --- > ## Documentation Index > Fetch the complete documentation index at: https://guide.ncloud-docs.com/llms.txt > Use this file to discover all available pages before exploring further. # Content certification Available in Classic and VPC It explains how to apply Secure Token to the playback source and configure DRM. Supported platforms: `Android` `iOS` Note This feature only works on physical devices. (Simulator not supported) ## Secure Token You can apply Secure Token to playback source and support OneTimeUrl as the `token` option. Additionally, you can replace Secure Token seamlessly during video playback using `playerRef.current.tokenChange()`. ``` const playerRef = useRef(null); return ( ); // Token update — Replace with a new token during playback playerRef.current.tokenChange('token=st=1675320871~exp=1675320901~acl=....'); ``` ## Integrate with PallyCon DRM This is a DoveRunner (PallyCon) DRM example that directly requests the PallyCon license server. ### FairPlay ``` const playerRef = useRef(null); return ( { const res = await fetch('https://license-global.pallycon.com/ri/licenseManager.do', { method: 'POST', headers: { 'pallycon-customdata-v2': '{Token for FairPlay}', }, body: spc, }); const ckcBase64 = await res.text(); return ckcBase64; }, }, }, ], }} /> ); ``` ### Widevine ``` const playerRef = useRef(null); return ( { const res = await fetch('https://license-global.pallycon.com/ri/licenseManager.do', { method: 'POST', headers: { 'Content-type': 'application/x-www-form-urlencoded', 'pallycon-customdata-v2': '{Token for Widevine}', }, body: spc, }); const ckcBase64 = await res.text(); return ckcBase64; }, }, }, ], }} /> ); ``` ## Integrate with One Click Multi DRM You can apply DRM by integrating the Video Player Enhancement service with the One Click Multi DRM service. Check the endpoint and request headers to request FPS certificate and licensing. ### FairPlay ``` const playerRef = useRef(null); return ( { const res = await fetch('{License URL}', { method: 'POST', headers: { "x-ncp-region_code": "KR", "x-ncp-iam-access-key": accessKey, "x-ncp-apigw-timestamp": timestamp, "x-ncp-apigw-signature-v2": signature, "x-drm-token": "{One Click Multi DRM FPS TOKEN}", }, body: spc, }); const ckcBase64 = await res.text(); return ckcBase64; }, }, }, ], }} /> ); ``` ### Widevine ``` const playerRef = useRef(null); return ( { const res = await fetch('{License URL}', { method: 'POST', headers: { "x-ncp-region_code": "KR", "x-ncp-iam-access-key": accessKey, "x-ncp-apigw-timestamp": timestamp, "x-ncp-apigw-signature-v2": signature, "x-drm-token": "{One Click Multi DRM FPS TOKEN}", }, body: spc, }); const ckcBase64 = await res.text(); return ckcBase64; }, }, }, ], }} /> ); ```