En esta guía, se explica cómo generar un token y los campos obligatorios y opcionales para los tokens.
Para crear un token, debes redactar una cadena para firmar, a la que nos referimos como valor con firma en esta guía. El valor con firma incluye parámetros que describen el contenido que proteges, la fecha de vencimiento del valor con firma, etcétera.
Usas el valor con firma mientras creas una cadena de token. Para crear una cadena de token, debes componer los parámetros del token, como un código de autenticación de mensajes basado en hash (HMAC) de clave simétrica del valor con firma.
Media CDN usa el token compuesto final para ayudar a proteger el contenido.
Crear un token
Crea un valor con firma mediante la concatenación de una cadena que contenga los campos de token obligatorios y los campos de token opcionales deseados. Separa cada campo y cualquier parámetro con un carácter de tilde
~.Firma el valor con firma con una firma Ed25519 o un HMAC de clave simétrica.
Para componer el token, concatena una cadena que contenga los campos de token obligatorios y los campos de token opcionales. Separa cada campo y cualquier parámetro con un carácter de tilde
~.Cuando compones el token, los valores de cada uno de los parámetros son los mismos entre el valor con firma y la cadena de token, con las siguientes excepciones:
FullPathHeaders
En la siguiente muestra de código, se indica cómo crear un token de manera programática:
Python
Para autenticarte en Media CDN, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Java
Para autenticarte en Media CDN, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
En las siguientes secciones, se describen los campos que usan los tokens.
Campos de token obligatorios
Los siguientes campos son obligatorios para cada token:
Expires- Uno de los siguientes:
PathGlobsURLPrefixFullPath
- Uno de los siguientes:
Signaturehmac
A menos que se especifique lo contrario, en los nombres de los parámetros y en sus valores, se distingue entre mayúsculas y minúsculas.
En la siguiente tabla, se explica cada parámetro:
| Nombre de campo / alias | Parámetros de token | Valor con firma |
|---|---|---|
|
Número entero de segundos que transcurrieron desde la época Unix (1970-01-01T00:00:00Z) | Expires=EXPIRATION_TIME, después de lo cual el
token ya no es válido. |
|
Una lista de hasta cinco segmentos de ruta para otorgar acceso. Los segmentos
se pueden delimitar con comas (
No se permiten los parámetros de ruta, que se indican con punto y coma ( Por estos motivos, asegúrate de que tu URL no contenga los siguientes
caracteres especiales: |
PathGlobs=PATHS |
URLPrefix |
Una URL codificada en base64 segura para la Web, incluido el protocolo
Por ejemplo, algunos valores de URLPrefix válidos para `https://example.com/foo/bar.ts` son `https://example.com`, `https://example.com/foo` y `https://example.com/foo/bar`. |
URLPrefix=BASE_64_URL_PREFIX |
FullPath |
Ninguno Cuando especifiques FullPath en un token, no dupliques
la ruta que especificaste en el valor con firma. En un token, incluye el nombre del campo
sin un =. |
FullPath=FULL_PATH_TO_OBJECT |
Signature |
Una versión codificada en Base64 segura para la Web de la firma. | No aplicable |
hmac |
Una versión codificada en Base64 segura para la Web del valor HMAC. | No aplicable |
Sintaxis de comodín de PathGlobs
En la siguiente tabla, se explica la sintaxis de comodín de PathGlobs.
| Operador | Coincidencias | Ejemplos |
|---|---|---|
* (asterisco) |
Coincide con cero o más caracteres en la ruta de la URL, incluidos
los caracteres de barra diagonal (/).
|
|
? (signo de interrogación) |
Coincide con un solo carácter en
la ruta de la URL, sin incluir los caracteres de barra diagonal (/)
.
|
/videos/s?main.m3u8 coincide con
/videos/s1main.m3u8. No coincide con
/videos/s01main.m3u8 ni /videos/s/main.m3u8.
|
Los globs deben comenzar con un asterisco (*) o una barra diagonal (/)
para las rutas de URL.
Debido a que * y /* coinciden con todas las rutas de URL, no recomendamos
usar ninguna de ellas en tus tokens firmados. Para obtener la máxima protección, asegúrate de que tus globs coincidan con el contenido al que deseas otorgar acceso.
Campos de token opcionales
A menos que se especifique lo contrario, en los nombres de los parámetros y en sus valores, se distingue entre mayúsculas y minúsculas.
En la siguiente tabla, se explican los nombres de los parámetros, los alias y los detalles de los parámetros opcionales:
| Nombre de campo / alias | Parámetros | Valor con firma |
|---|---|---|
|
Número entero de segundos desde la época Unix (1970-01-01T00:00:00Z) | Starts=START_TIME |
IPRanges |
Una lista de hasta cinco direcciones IPv4 e IPv6 en formato CIDR para
las que esta URL es válida en formato base64 seguro para la Web. Por ejemplo, para especificar los rangos de IP "192.6.13.13/32,193.5.64.135/32", debes especificar Es posible que los IPRanges no sean útiles para incluir en los tokens cuando los clientes están
en riesgo de migraciones de WAN o casos en los que la ruta de red al
frontend de tu aplicación es diferente de la ruta de entrega.
Media CDN rechaza a los clientes con un Los siguientes son casos que pueden provocar que Media CDN rechace a los clientes con un código
Todos estos factores pueden contribuir a que un cliente determinado tenga una dirección IP no determinista durante una sesión de reproducción de video. Si la
dirección IP del cliente cambia después de que emites el acceso y el
cliente intenta descargar un segmento de video en su búfer de
reproducción, recibe un |
IPRanges=BASE_64_IP_RANGES |
|
Una cadena arbitraria, útil para el análisis de registros o el seguimiento de la reproducción Para evitar crear un token no válido, usa cadenas codificadas en % o en base64 seguras para la Web. No se deben usar los siguientes caracteres para
|
SessionID=SESSION_ID_VALUE |
|
Una cadena arbitraria, útil para el análisis de registros. Para evitar crear un token no válido, usa cadenas codificadas en % o en base64 seguras para la Web. No se deben usar los siguientes caracteres para
|
data=DATA_VALUE |
Headers |
Una lista de nombres de campos de encabezado delimitada por comas. Los nombres de encabezado no distinguen entre mayúsculas y minúsculas para las búsquedas en la solicitud. Los nombres de encabezado en los valores con firma distinguen entre mayúsculas y minúsculas. Si falta un encabezado, el valor es la cadena vacía. Si hay varias copias de un encabezado, se concatenan con comas. | Headers=HEADER_1_NAME=HEADER_1_EXPECTED_VALUE,
HEADER_2_NAME=HEADER_2_EXPECTED_VALUE |
Ejemplos
En las siguientes secciones, se muestran ejemplos para generar tokens.
Ejemplo con FullPath
Considera el siguiente ejemplo con el campo FullPath:
- Elemento solicitado:
http://example.com/tv/my-show/s01/e01/playlist.m3u8 - Hora de vencimiento: 160000000
El valor con firma es el siguiente:
Expires=160000000~FullPath=/tv/my-show/s01/e01/playlist.m3u8
Para crear un token, firma el valor con firma con una firma Ed25519 o un HMAC de clave simétrica.
Los siguientes son tokens de ejemplo creados a partir de un valor con firma:
Firma Ed25519
Expires=160000000~FullPath~Signature=SIGNATURE_OF_SIGNED_VALUE
En el código anterior, SIGNATURE_OF_SIGNED_VALUE es la firma ED25519 del valor con firma creado anteriormente.
HMAC de clave simétrica
Expires=160000000~FullPath~hmac=HMAC_OF_SIGNED_VALUE
En el código anterior, HMAC_OF_SIGNED_VALUE es el HMAC de clave simétrica del valor con firma creado anteriormente.
En los ejemplos anteriores, se proporciona FullPath en el token, pero el valor no se repite de la ruta especificada en el valor con firma. Esto te permite firmar la ruta completa de la solicitud sin duplicarla en el token.
Ejemplo con URLPrefix
Considera el siguiente ejemplo con el campo URLPrefix:
- Elemento solicitado:
http://example.com/tv/my-show/s01/e01/playlist.m3u8 - Hora de vencimiento: 160000000
El valor con firma es el siguiente:
Expires=160000000~URLPrefix=aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4
En el ejemplo anterior, reemplazamos la ruta de acceso al elemento solicitado, http://example.com/tv/my-show/s01/e01/playlist.m3u8, por la ruta de acceso al elemento en formato Base64 seguro para la Web, aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4.
Para crear un token, firma el valor con firma con una firma Ed25519 o un HMAC de clave simétrica.
Los siguientes son tokens de ejemplo creados a partir de un valor con firma:
Firma Ed25519
Expires=160000000~URLPrefix=aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4~Signature=SIGNATURE_OF_SIGNED_VALUE
En el código anterior, SIGNATURE_OF_SIGNED_VALUE es la firma ED25519 del valor con firma creado anteriormente.
HMAC de clave simétrica
Expires=160000000~URLPrefix=aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4~hmac=HMAC_OF_SIGNED_VALUE
En el código anterior, HMAC_OF_SIGNED_VALUE es el HMAC de clave simétrica del valor con firma creado anteriormente.
Ejemplo con Headers
Considera el siguiente ejemplo con el campo Headers:
- Elemento solicitado:
http://example.com/tv/my-show/s01/e01/playlist.m3u8 - Hora de vencimiento: 160000000
- Valor de PathGlobs:
* - Encabezados de solicitud esperados:
user-agent: browseraccept: text/html
El valor con firma es el siguiente:
Expires=160000000~PathGlobs=*~Headers=user-agent=browser,accept=text/html
Para crear un token, firma el valor con firma con una firma Ed25519 o un HMAC de clave simétrica.
Los siguientes son tokens de ejemplo creados a partir de un valor con firma:
Firma Ed25519
Expires=160000000~PathGlobs=*~Headers=user-agent,accept~Signature=SIGNATURE_OF_SIGNED_VALUE
En el código anterior, SIGNATURE_OF_SIGNED_VALUE es la firma ED25519 del valor con firma creado anteriormente.
HMAC de clave simétrica
Expires=160000000~PathGlobs=*~Headers=user-agent,accept~hmac=HMAC_OF_SIGNED_VALUE
En el código anterior, HMAC_OF_SIGNED_VALUE es el HMAC de clave simétrica del valor con firma creado anteriormente.
En los ejemplos anteriores, se proporciona Headers=user-agent,accept en el token, pero los valores de encabezado esperados no se repiten del valor con firma. Esto te permite firmar pares clave-valor de encabezado de la solicitud específicos sin duplicar los valores en el token.