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 firmado en esta guía. El valor firmado incluye parámetros que describen el contenido que proteges, la fecha de vencimiento del valor firmado, etcétera.
Usas el valor firmado mientras creas una cadena de tokens. 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 firmado.
Media CDN usa el token compuesto final para ayudar a proteger el contenido.
Crear un token
Crea un valor firmado 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 virgulilla
~
.Firma el valor firmado con una firma Ed25519 o un HMAC de clave simétrica.
Para crear el token, concatena una cadena que contenga los campos de token obligatorios y opcionales. Separa cada campo y cualquier parámetro con un carácter virgulilla
~
.Cuando se compone el token, los valores de cada uno de los parámetros son los mismos entre el valor firmado y la cadena de token, con las siguientes excepciones:
FullPath
Headers
En la siguiente muestra de código, se muestra cómo crear un token de manera programática:
Python
Para autenticarte en Media CDN, configura las credenciales predeterminadas de la aplicación. Si deseas 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. Si deseas 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:
PathGlobs
URLPrefix
FullPath
- Una de las siguientes opciones:
Signature
hmac
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:
Nombres de campos o alias | Parámetros de token | Valor con firma |
---|---|---|
|
Es un 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. |
|
Es una lista de hasta cinco segmentos de ruta a los que se les otorgará acceso. Los segmentos se pueden delimitar con comas (
No se permiten los parámetros de ruta de acceso, 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 que incluya el protocolo Por ejemplo, algunos valores válidos de URLPrefix 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 de acceso que especificaste en el valor firmado. 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 de HMAC. | No aplicable |
Sintaxis de comodines de PathGlobs
En la siguiente tabla, se explica la sintaxis de comodines PathGlobs
.
Operador | Coincidencias | Ejemplos |
---|---|---|
* (asterisco) |
Coincide con cero o más caracteres en la ruta de la URL, incluidas las barras diagonales (/ ).
|
|
? (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 te recomendamos que las uses 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:
Nombres de campos o 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 código 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 |
|
Es una cadena arbitraria, útil para el análisis de registros o el seguimiento de reproducción. Para evitar crear un token no válido, usa cadenas codificadas en Base64 con codificación % o seguras para la Web. No se deben usar los siguientes caracteres para |
SessionID=SESSION_ID_VALUE |
|
Es una cadena arbitraria, útil para el análisis de registros. Para evitar crear un token no válido, usa cadenas codificadas en Base64 con codificación % o seguras para la Web. No se deben usar los siguientes caracteres para |
data=DATA_VALUE |
Headers |
Es una lista de nombres de campos de encabezado separados por comas. Los nombres de encabezado no distinguen mayúsculas de minúsculas para las búsquedas en la solicitud. Los nombres de encabezado en los valores firmados distinguen mayúsculas de 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 de uso de 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 firmado es el siguiente:
Expires=160000000~FullPath=/tv/my-show/s01/e01/playlist.m3u8
Para crear un token, firma el valor firmado con una firma Ed25519 o un HMAC de clave simétrica.
Los siguientes son ejemplos de tokens creados a partir de un valor firmado:
Firma Ed25519
Expires=160000000~FullPath~Signature=SIGNATURE_OF_SIGNED_VALUE
En el que SIGNATURE_OF_SIGNED_VALUE es la firma ED25519 del valor firmado que se creó anteriormente.
HMAC de clave simétrica
Expires=160000000~FullPath~hmac=HMAC_OF_SIGNED_VALUE
En el que HMAC_OF_SIGNED_VALUE es el HMAC de clave simétrica del valor firmado que se creó anteriormente.
En los ejemplos anteriores, se proporciona FullPath
en el token, pero el valor no se repite desde la ruta de acceso especificada en el valor firmado. Esto te permite firmar la ruta completa de la solicitud sin duplicarla en el token.
Ejemplo de uso de 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 firmado 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 firmado con una firma Ed25519 o un HMAC de clave simétrica.
Los siguientes son ejemplos de tokens creados a partir de un valor firmado:
Firma Ed25519
Expires=160000000~URLPrefix=aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4~Signature=SIGNATURE_OF_SIGNED_VALUE
En el que SIGNATURE_OF_SIGNED_VALUE es la firma ED25519 del valor firmado que se creó anteriormente.
HMAC de clave simétrica
Expires=160000000~URLPrefix=aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4~hmac=HMAC_OF_SIGNED_VALUE
En el que HMAC_OF_SIGNED_VALUE es el HMAC de clave simétrica del valor firmado que se creó anteriormente.
Ejemplo de uso de 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: browser
accept: text/html
El valor firmado es el siguiente:
Expires=160000000~PathGlobs=*~Headers=user-agent=browser,accept=text/html
Para crear un token, firma el valor firmado con una firma Ed25519 o un HMAC de clave simétrica.
Los siguientes son ejemplos de tokens creados a partir de un valor firmado:
Firma Ed25519
Expires=160000000~PathGlobs=*~Headers=user-agent,accept~Signature=SIGNATURE_OF_SIGNED_VALUE
En el que SIGNATURE_OF_SIGNED_VALUE es la firma ED25519 del valor firmado que se creó anteriormente.
HMAC de clave simétrica
Expires=160000000~PathGlobs=*~Headers=user-agent,accept~hmac=HMAC_OF_SIGNED_VALUE
En el que HMAC_OF_SIGNED_VALUE es el HMAC de clave simétrica del valor firmado que se creó 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 firmado. Esto te permite firmar pares clave-valor específicos del encabezado de solicitud sin duplicar los valores en el token.