Ce guide explique comment générer un jeton et présente les champs obligatoires et facultatifs pour les jetons.
Pour créer un jeton, vous devez composer une chaîne à signer, que nous appelons une dans ce guide. La valeur signée inclut des paramètres qui décrivent le contenu que vous protégez, l'heure d'expiration de la valeur signée, etc. avant.
Vous utilisez la valeur signée lors de la création d'une chaîne de jeton. Vous créez une chaîne de jeton en composant les paramètres du jeton, par exemple un code d'authentification des messages basé sur le hachage (HMAC, Hash-based Message Authentication Code) avec clé symétrique de la valeur signée.
Media CDN utilise le jeton composé final pour protéger votre contenus.
Créer un jeton
Créez une valeur signée en concaténant une chaîne contenant le champs de jeton obligatoires et jeton facultatif souhaité . Séparez chaque champ et les paramètres avec Un tilde
~
.Signez la valeur signée avec une signature Ed25519 ou un HMAC à clé symétrique.
Composez le jeton en concaténant une chaîne contenant les éléments de jetons et les champs facultatifs de jeton. Séparez chaque champ des champs avec un tilde
~
.Lors de la composition du jeton, les valeurs de chacun des paramètres sont les entre la valeur signée et la chaîne de jeton, avec ce qui suit : exceptions:
FullPath
Headers
L'exemple de code suivant montre comment créer un jeton de manière programmatique:
Python
Pour vous authentifier auprès de Media CDN, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Java
Pour vous authentifier auprès de Media CDN, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Les sections suivantes décrivent les champs utilisés par les jetons.
Champs obligatoires pour les jetons
Les champs suivants sont obligatoires pour chaque jeton :
Expires
- L'un des éléments suivants:
PathGlobs
URLPrefix
FullPath
- Choisissez l'une des options suivantes:
Signature
hmac
Sauf indication contraire, les noms des paramètres et leurs valeurs sont sensibles à la casse.
Le tableau suivant explique chaque paramètre :
Nom / Alias du champ | Paramètres de jeton | Valeur signée |
---|---|---|
|
Nombre entier de secondes écoulées depuis l'époque Unix (1970-01-01T00:00:00Z) | Expires=EXPIRATION_TIME , après quoi le jeton n'est plus valide. |
|
Liste de cinq segments de chemin d'accès auxquels accorder l'accès (maximum) Les segments
peut être délimité par une virgule (
Les paramètres de chemin d'accès, indiqués par des points-virgules ( Par conséquent, assurez-vous que votre URL ne contient pas les éléments suivants :
Caractères spéciaux: |
PathGlobs=PATHS |
URLPrefix |
URL encodée au format base64 adapté au Web et incluant le protocole
Par exemple, des valeurs URLPrefix valides pour "https://example.com/foo/bar.ts" correspond à "https://example.com", `https://example.com/foo` et `https://example.com/foo/bar`. |
URLPrefix=BASE_64_URL_PREFIX |
FullPath |
Aucun Lorsque vous spécifiez FullPath dans un jeton, ne dupliquez pas
au chemin d'accès que vous avez spécifié
dans la valeur signée. Dans un jeton, incluez le champ
sans = . |
FullPath=FULL_PATH_TO_OBJECT |
Signature |
Version de la signature encodée en base64 adaptée au Web. | Non applicable |
hmac |
Version de la valeur HMAC encodée en base64 adaptée au Web. | Non applicable |
Syntaxe du caractère générique PathGlobs
Le tableau suivant explique la syntaxe du caractère générique PathGlobs
.
Opérateur | Correspondance établie | Examples |
---|---|---|
* (astérisque) |
Établit une correspondance avec zéro ou plusieurs caractères du chemin de l'URL, y compris
ou une barre oblique (/ ).
|
|
? (point d'interrogation) |
Correspond à un seul caractère dans le chemin d'accès de l'URL, sans inclure les caractères de barre oblique (/ ).
|
/videos/s?main.m3u8 correspondances
/videos/s1main.m3u8 Elle ne correspond à aucune des
/videos/s01main.m3u8 ou /videos/s/main.m3u8 .
|
Les expressions génériques doivent commencer par un astérisque (*
) ou une barre oblique (/
) pour les chemins d'URL.
Étant donné que *
et /*
correspondent à tous les chemins d'URL, nous vous déconseillons de les utiliser dans vos jetons signés. Pour une protection maximale,
vérifier que vos globs correspondent au contenu auquel vous souhaitez accorder l'accès.
Champs de jeton facultatifs
Sauf indication contraire, les noms des paramètres et leurs valeurs sont sensibles à la casse.
Le tableau suivant explique les noms de paramètres, les éventuels alias et les détails des paramètres facultatifs :
Nom / Alias du champ | Paramètres | Valeur signée |
---|---|---|
|
Nombre de secondes entières depuis l'époque Unix (1970-01-01T00:00:00Z) | Starts=START_TIME |
IPRanges |
Une liste comportant jusqu'à cinq adresses IPv4 et IPv6 au format CIDR pour
cette URL est valide au format base64 adapté au Web. Par exemple, pour spécifier les plages d'adresses IP "192.6.13.13/32,193.5.64.135/32", spécifiez Les plages d'adresses IP peuvent ne pas être utiles à inclure dans les jetons lorsque les clients sont susceptibles d'effectuer des migrations WAN ou dans les cas où le chemin d'accès réseau à l'interface de l'application est différent du chemin de distribution.
Media CDN rejette les clients disposant d'un code Les cas suivants peuvent entraîner le rejet des clients avec le code
Tous ces facteurs peuvent contribuer à ce qu'un client donné ait une adresse IP non déterministe pendant une session de lecture vidéo. Si l'adresse IP du client change après avoir accordé l'accès et que le client tente de télécharger un segment vidéo dans son tampon de lecture, il reçoit une erreur |
IPRanges=BASE_64_IP_RANGES |
|
Chaîne arbitraire utile pour l'analyse ou la lecture de journaux du traçage. Pour éviter de créer un jeton non valide, utilisez un encodage % ou sécurisé pour le Web
les chaînes encodées en base64. Les caractères suivants ne doivent pas être utilisés pour
|
SessionID=SESSION_ID_VALUE |
|
Chaîne arbitraire, utile pour l'analyse des journaux. Pour éviter de créer un jeton non valide, utilisez un encodage % ou sécurisé pour le Web
les chaînes encodées en base64. Les caractères suivants ne doivent pas être utilisés pour
|
data=DATA_VALUE |
Headers |
Liste des noms des champs d'en-tête séparés par une virgule. Les noms des en-têtes sont non sensible à la casse pour les recherches dans la requête. Noms des en-têtes dans la partie sont sensibles à la casse. Si un en-tête est manquant, la valeur est vide . S'il existe plusieurs copies d'un en-tête, elles sont concaténés par une virgule. | Headers=HEADER_1_NAME=HEADER_1_EXPECTED_VALUE,
HEADER_2_NAME=HEADER_2_EXPECTED_VALUE |
Examples
Les sections suivantes présentent des exemples de génération de jetons.
Exemple avec FullPath
Prenons l'exemple suivant utilisant le champ FullPath
:
- Élément demandé:
http://example.com/tv/my-show/s01/e01/playlist.m3u8
- Date/Heure d'expiration: 160000000
La valeur signée est la suivante :
Expires=160000000~FullPath=/tv/my-show/s01/e01/playlist.m3u8
Pour créer un jeton, signez la valeur signée avec une signature Ed25519 ou un HMAC à clé symétrique.
Voici des exemples de jetons créés à partir d'une valeur signée:
Signature ED25519
Expires=160000000~FullPath~Signature=SIGNATURE_OF_SIGNED_VALUE
Où SIGNATURE_OF_SIGNED_VALUE est la signature ED25519 du valeur signée précédemment créée.
HMAC à clé symétrique
Expires=160000000~FullPath~hmac=HMAC_OF_SIGNED_VALUE
Où HMAC_OF_SIGNED_VALUE est le code HMAC à clé symétrique du modèle précédemment créée.
Dans les exemples précédents, FullPath
est fourni dans le jeton, mais la valeur
n'est pas répété à partir du chemin spécifié dans la valeur signée. Cela vous permet de
signer le chemin complet de la requête
sans dupliquer la requête dans le jeton.
Exemple avec URLPrefix
Prenons l'exemple suivant avec le champ URLPrefix
:
- Élément demandé:
http://example.com/tv/my-show/s01/e01/playlist.m3u8
- Date/Heure d'expiration: 160000000
La valeur signée est la suivante :
Expires=160000000~URLPrefix=aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4
Dans l'exemple précédent, nous avons remplacé
le chemin d'accès à l'élément demandé,
http://example.com/tv/my-show/s01/e01/playlist.m3u8
par le chemin d'accès à l'élément ;
au format Base64 adapté au Web,
aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4
Pour créer un jeton, signez la valeur signée avec une signature Ed25519 ou un HMAC à clé symétrique.
Voici des exemples de jetons créés à partir d'une valeur signée:
Signature ED25519
Expires=160000000~URLPrefix=aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4~Signature=SIGNATURE_OF_SIGNED_VALUE
Où SIGNATURE_OF_SIGNED_VALUE est la signature ED25519 du valeur signée précédemment créée.
HMAC à clé symétrique
Expires=160000000~URLPrefix=aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4~hmac=HMAC_OF_SIGNED_VALUE
Où HMAC_OF_SIGNED_VALUE est le code HMAC à clé symétrique du modèle précédemment créée.
Exemple avec Headers
Prenons l'exemple suivant utilisant le champ Headers
:
- Élément demandé:
http://example.com/tv/my-show/s01/e01/playlist.m3u8
- Date d'expiration : 160000000
- Valeur PathGlobs:
*
- En-têtes de requête attendus:
user-agent: browser
accept: text/html
La valeur signée est la suivante:
Expires=160000000~PathGlobs=*~Headers=user-agent=browser,accept=text/html
Pour créer un jeton, signez la valeur signée avec une signature Ed25519 ou un HMAC à clé symétrique.
Voici des exemples de jetons créés à partir d'une valeur signée:
Signature ED25519
Expires=160000000~PathGlobs=*~Headers=user-agent,accept~Signature=SIGNATURE_OF_SIGNED_VALUE
Où SIGNATURE_OF_SIGNED_VALUE est la signature ED25519 du valeur signée précédemment créée.
HMAC à clé symétrique
Expires=160000000~PathGlobs=*~Headers=user-agent,accept~hmac=HMAC_OF_SIGNED_VALUE
Où HMAC_OF_SIGNED_VALUE est le code HMAC à clé symétrique du modèle précédemment créée.
Dans les exemples précédents, Headers=user-agent,accept
est fourni dans le jeton.
mais les valeurs d'en-tête attendues ne sont pas répétées à partir de la valeur signée. Cela permet
vous signez des paires clé/valeur spécifiques en-tête de requête sans dupliquer les valeurs.
dans le jeton.