En esta guía se explica cómo generar un token y los campos obligatorios y opcionales de los tokens.
Para crear un token, debes componer una cadena que firmar, a la que llamaremos valor firmado en esta guía. El valor firmado incluye parámetros que describen el contenido que estás protegiendo, la hora de vencimiento del valor firmado, etc.
El valor firmado se usa al crear 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 firmado.
Media CDN usa el token compuesto final para proteger tu contenido.
Crear un token
Crea un valor firmado concatenando una cadena que contenga los campos de token obligatorios y los campos de token opcionales que quieras. Separe cada campo y los parámetros con el carácter de tilde
~
.Firma el valor firmado con una firma Ed25519 o un HMAC de clave simétrica.
Crea el token concatenando una cadena que contenga los campos obligatorios y los opcionales. Separe cada campo y los parámetros con el carácter de tilde
~
.Al componer 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 el siguiente código de ejemplo se muestra cómo crear un token mediante programación:
Python
Para autenticarte en Media CDN, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en 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 el artículo Configurar la autenticación en 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
- Una de las siguientes:
PathGlobs
URLPrefix
FullPath
- Una de las siguientes:
Signature
hmac
A menos que se indique lo contrario, los nombres de los parámetros y sus valores distinguen entre mayúsculas y minúsculas.
En la siguiente tabla se explica cada parámetro:
Nombre del campo o alias | Parámetros de token | Valor firmado |
---|---|---|
|
Número entero de segundos transcurridos desde el inicio del registro de tiempo de Unix (1970-01-01T00:00:00Z). | Expires=EXPIRATION_TIME , tras lo cual el token dejará de ser válido. |
|
Lista de hasta cinco segmentos de ruta a los que se va a conceder acceso. Los segmentos se pueden delimitar con comas (
No se permiten los parámetros de ruta, que se indican con puntos y comas ( Por estos motivos, asegúrese de que su 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 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 especifique FullPath en un token, no duplique
la ruta que haya especificado en el valor firmado. En un token, incluye el nombre del campo
sin = . |
FullPath=FULL_PATH_TO_OBJECT |
Signature |
Versión de la firma codificada en base64 segura para la Web. | No aplicable |
hmac |
Una versión codificada en base64 segura para la Web del valor HMAC. | No aplicable |
Sintaxis de comodín PathGlobs
En la siguiente tabla se explica la sintaxis del carácter comodín PathGlobs
.
Operador | Coincide con | Ejemplos |
---|---|---|
* (asterisco) |
Coincide con cero o más caracteres de la ruta de la URL, incluidas las barras inclinadas (/ ).
|
|
? (signo de interrogación) |
Coincide con un solo carácter de la ruta de la URL, sin incluir el carácter de barra diagonal (/ ).
|
/videos/s?main.m3u8 coincide con
/videos/s1main.m3u8 . No coincide con ninguna de las dos: /videos/s01main.m3u8 o /videos/s/main.m3u8 .
|
Los globs deben empezar por un asterisco (*
) o una barra inclinada (/
) en las rutas de URLs.
Como *
y /*
coinciden con todas las rutas de URLs, no recomendamos usar ninguna de ellas en tus tokens firmados. Para disfrutar de la máxima protección, asegúrese de que sus globs coincidan con el contenido al que quiere conceder acceso.
Campos de token opcionales
A menos que se indique lo contrario, los nombres de los parámetros y sus valores distinguen 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 del campo o alias | Parámetros | Valor firmado |
---|---|---|
|
Segundos enteros desde el inicio del registro de tiempo de Unix (1970-01-01T00:00:00Z). | Starts=START_TIME |
IPRanges |
Lista de hasta cinco direcciones IPv4 e IPv6 en formato CIDR para las que esta URL es válida en formato base64 seguro para web. Por ejemplo, para especificar los intervalos de IP "192.6.13.13/32,193.5.64.135/32", debe especificar Puede que no sea útil incluir IPRanges en los tokens cuando los clientes corran el riesgo de sufrir migraciones de WAN o en los casos en los que la ruta de red al frontend de tu aplicación sea diferente de la ruta de entrega.
Media CDN rechaza a los clientes con un código A continuación, se indican algunos 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 vídeo. Si la dirección IP del cliente cambia después de que hayas concedido acceso y el cliente intenta descargar un segmento de vídeo en su búfer de reproducción, recibirá un |
IPRanges=BASE_64_IP_RANGES |
|
Una cadena arbitraria, útil para el análisis de registros o la reproducción de seguimientos. Para evitar que se cree un token no válido, utilice cadenas codificadas en base64 seguras para la Web o codificadas con %. No se deben usar los siguientes caracteres en |
SessionID=SESSION_ID_VALUE |
|
Cadena arbitraria, útil para analizar registros. Para evitar que se cree un token no válido, utilice cadenas codificadas en base64 seguras para la Web o codificadas con %. No se deben usar los siguientes caracteres en |
data=DATA_VALUE |
Headers |
Lista delimitada por comas de nombres de campos de encabezado. En los nombres de los encabezados no se distingue entre mayúsculas y minúsculas en las búsquedas de la solicitud. En los nombres de los encabezados de los valores firmados se distingue 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 de cómo generar tokens.
Ejemplo con FullPath
Veamos un ejemplo con el campo FullPath
:
- Artículo solicitado:
http://example.com/tv/my-show/s01/e01/playlist.m3u8
- Fecha de caducidad: 160000000
El valor firmado es:
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.
Estos son algunos ejemplos de tokens creados a partir de un valor firmado:
Firma Ed25519
Expires=160000000~FullPath~Signature=SIGNATURE_OF_SIGNED_VALUE
Donde SIGNATURE_OF_SIGNED_VALUE es la firma ED25519 del valor firmado creado anteriormente.
HMAC de clave simétrica
Expires=160000000~FullPath~hmac=HMAC_OF_SIGNED_VALUE
Donde HMAC_OF_SIGNED_VALUE es el HMAC de clave simétrica del valor firmado creado anteriormente.
En los ejemplos anteriores, FullPath
se proporciona en el token, pero el valor no se repite en la ruta especificada en el valor firmado. De esta forma, puedes firmar la ruta completa de la solicitud sin duplicarla en el token.
Ejemplo con URLPrefix
Veamos un ejemplo con el campo URLPrefix
:
- Artículo solicitado:
http://example.com/tv/my-show/s01/e01/playlist.m3u8
- Fecha de caducidad: 160000000
El valor firmado es:
Expires=160000000~URLPrefix=aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4
En el ejemplo anterior, hemos sustituido la ruta del elemento solicitado, http://example.com/tv/my-show/s01/e01/playlist.m3u8
, por la ruta del 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.
Estos son algunos ejemplos de tokens creados a partir de un valor firmado:
Firma Ed25519
Expires=160000000~URLPrefix=aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4~Signature=SIGNATURE_OF_SIGNED_VALUE
Donde SIGNATURE_OF_SIGNED_VALUE es la firma ED25519 del valor firmado creado anteriormente.
HMAC de clave simétrica
Expires=160000000~URLPrefix=aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4~hmac=HMAC_OF_SIGNED_VALUE
Donde HMAC_OF_SIGNED_VALUE es el HMAC de clave simétrica del valor firmado creado anteriormente.
Ejemplo con Headers
Veamos un ejemplo con el campo Headers
:
- Artículo solicitado:
http://example.com/tv/my-show/s01/e01/playlist.m3u8
- Fecha de caducidad: 160000000
- Valor de PathGlobs:
*
- Encabezados de solicitud esperados:
user-agent: browser
accept: text/html
El valor firmado es:
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.
Estos son algunos ejemplos de tokens creados a partir de un valor firmado:
Firma Ed25519
Expires=160000000~PathGlobs=*~Headers=user-agent,accept~Signature=SIGNATURE_OF_SIGNED_VALUE
Donde SIGNATURE_OF_SIGNED_VALUE es la firma ED25519 del valor firmado creado anteriormente.
HMAC de clave simétrica
Expires=160000000~PathGlobs=*~Headers=user-agent,accept~hmac=HMAC_OF_SIGNED_VALUE
Donde HMAC_OF_SIGNED_VALUE es el HMAC de clave simétrica del valor firmado creado anteriormente.
En los ejemplos anteriores, Headers=user-agent,accept
se proporciona en el token, pero los valores de encabezado esperados no se repiten del valor firmado. De esta forma, puede firmar pares clave-valor de encabezado de solicitud específicos sin duplicar los valores en el token.