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 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 ayudar a proteger el contenido.
Crear un token
Crea un valor firmado concatenando una cadena que contenga los campos obligatorios del token y los campos opcionales del token deseados. Separa cada campo y cualquier parámetro con un carácter de virgulilla
~
.Firma el valor firmado con una firma Ed25519 o un HMAC de clave simétrica.
Para componer el token, concatena una cadena que contenga los campos obligatorios y opcionales del token. Separa cada campo y cualquier parámetro con un carácter de 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 del token, con las siguientes excepciones:
FullPath
Headers
En el 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:
Nombre del campo o 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. |
|
Es una lista de hasta cinco segmentos de ruta de acceso a los que se 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 |
Es una URL codificada en base64 segura para la Web que incluye 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 de acceso que especificaste en el valor firmado. En un token, incluye el nombre del campo sin un = . |
FullPath=FULL_PATH_TO_OBJECT |
Signature |
Es una versión de la firma codificada en Base64 segura para la Web. | No aplicable |
hmac |
Es una versión del valor de HMAC codificada en Base64 seguro para la Web. | 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 con /videos/s/main.m3u8 .
|
Los globs deben comenzar con un asterisco (*
) o una barra diagonal (/
) para las rutas de URL.
Dado 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 del campo 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 la reproducción. Para evitar crear un token no válido, usa cadenas codificadas en Base64 aptas para la Web o codificadas como %25. 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 aptas para la Web o codificadas como %25. No se deben usar los siguientes caracteres para |
data=DATA_VALUE |
Headers |
Es una lista delimitada por comas de los nombres de los campos de encabezado. 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 con FullPath
Considera el siguiente ejemplo con el campo FullPath
:
- Artículo 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.
A continuación, se muestran ejemplos de tokens creados a partir de un valor firmado:
Firma Ed25519
Expires=160000000~FullPath~Signature=SIGNATURE_OF_SIGNED_VALUE
Aquí, SIGNATURE_OF_SIGNED_VALUE es la firma ED25519 del valor firmado creado anteriormente.
HMAC con clave simétrica
Expires=160000000~FullPath~hmac=HMAC_OF_SIGNED_VALUE
Aquí HMAC_OF_SIGNED_VALUE es el HMAC de clave simétrica del valor firmado que se creó anteriormente.
En los ejemplos anteriores, FullPath
se proporciona 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 con URLPrefix
Considera el siguiente ejemplo con el campo URLPrefix
:
- Artículo 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.
A continuación, se muestran ejemplos de tokens creados a partir de un valor firmado:
Firma Ed25519
Expires=160000000~URLPrefix=aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4~Signature=SIGNATURE_OF_SIGNED_VALUE
Aquí, SIGNATURE_OF_SIGNED_VALUE es la firma ED25519 del valor firmado creado anteriormente.
HMAC con clave simétrica
Expires=160000000~URLPrefix=aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4~hmac=HMAC_OF_SIGNED_VALUE
Aquí HMAC_OF_SIGNED_VALUE es el HMAC de clave simétrica del valor firmado que se creó anteriormente.
Ejemplo con Headers
Considera el siguiente ejemplo con el campo Headers
:
- Artículo 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.
A continuación, se muestran ejemplos de tokens creados a partir de un valor firmado:
Firma Ed25519
Expires=160000000~PathGlobs=*~Headers=user-agent,accept~Signature=SIGNATURE_OF_SIGNED_VALUE
Aquí, SIGNATURE_OF_SIGNED_VALUE es la firma ED25519 del valor firmado creado anteriormente.
HMAC con clave simétrica
Expires=160000000~PathGlobs=*~Headers=user-agent,accept~hmac=HMAC_OF_SIGNED_VALUE
Aquí HMAC_OF_SIGNED_VALUE es el HMAC de clave simétrica del valor firmado que se creó 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. Esto te permite firmar pares clave-valor de encabezado de solicitud específicos sin duplicar los valores en el token.