Ce guide explique comment générer un jeton, ainsi que les étapes obligatoires et facultatives pour les jetons.
Pour créer un jeton, vous composez 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 un jeton en composant les paramètres du jeton, tels que code d'authentification de message basé sur un hachage (HMAC) à clé symétrique du .
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 une clé symétrique HMAC
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:
<ph type="x-smartling-placeholder">
- </ph>
PathGlobs
URLPrefix
FullPath
- Choisissez l'une des options suivantes:
<ph type="x-smartling-placeholder">
- </ph>
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 de secondes entières é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, certaines 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 de
Chemin de l'URL, sans la barre oblique (/ )
caractères.
|
/videos/s?main.m3u8 correspondances
/videos/s1main.m3u8 Elle ne correspond à aucune des
/videos/s01main.m3u8 ou /videos/s/main.m3u8 .
|
Les globes doivent commencer par un astérisque (*
) ou une barre oblique (/
)
pour les chemins d'URL.
Comme *
et /*
correspondent à tous les chemins d'URL, nous vous déconseillons
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 décrit les noms des paramètres, les alias et les détails 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
Il peut être utile d'inclure des plages IPRange dans les jetons lorsque les clients sont
de migration WAN ou dans les cas où le chemin réseau
l'interface de l'application est différent
du chemin de livraison.
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 de noms de 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 avec 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:
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:
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 avec le champ Headers
:
- Élément demandé:
http://example.com/tv/my-show/s01/e01/playlist.m3u8
- Date/Heure d'expiration: 160000000
- Valeur PathGlobs:
*
- En-têtes de requête attendus:
<ph type="x-smartling-placeholder">
- </ph>
user-agent: browser
accept: text/html
La valeur signée est:
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.