Comment sécuriser mon contenu avec des clés signées ?

Les clés signées sont une alternative au le contrôle de domaine pour éviter que vos vidéos ne soient intégrées là où vous ne le souhaitez pas. Alors que la sécurité du contrôle de domaine est basée sur la vérification des informations de référence envoyées par l’agent utilisateur d’intégration, la sécurité signée par l’utilisateur est basée sur la vérification d’une signature apposée à votre code d’intégration, générée à l’aide d’une clé de signature secrète partagée par vous et Dacast.

En règle générale, les clés signées sont destinées à être utilisées dans des applications qui génèrent dynamiquement du contenu HTML. Les clés signées vous permettent de définir un délai d’expiration pour votre code d’intégration, de sorte qu’un code d’intégration particulier ne soit valable que pour une durée limitée dans le futur. Lorsque votre application génère un document HTML avec une vidéo intégrée, elle génère également un code d’intégration signé, spécifique à cette page, qui n’est valable que pour une courte période dans le futur. Si vos pages sont statiques, vous ne pouvez pas utiliser de clés signées car la clé doit être générée en temps réel.

Utilisation

Normalement, lorsque vous intégrez une vidéo Dacast sur votre site, vous utilisez simplement le code d’intégration généré par Dacast. Cela ressemble à peu près à ceci :

<iframe src="https://iframe.dacast.com/vod/3b67c4a9-3886-4eb1/027495c1-9ca8-cbed”………</iframe>

Lorsque vous utilisez les clés signées, vous continuez à utiliser le même code d’intégration, mais un paramètre supplémentaire est ajouté à l’attribut src de l’iframe. Cela ressemble à peu près à ceci :

<iframe src="https://iframe.dacast.com/vod/3b67c4a9-3886-4eb1/027495c1-9ca8-cbed/?uss_token=S3Le_oSTGNSyBB9bdxetqsdqsd”………</iframe>

Le paramètre uss_token est généré dynamiquement par votre application à l’aide de votre clé de signature secrète, et Dacast ne diffusera pas la vidéo si le jeton n’est pas valide et n’a pas expiré. La sécurité signée par l’utilisateur s’applique également aux extraits de listes de lecture.

Activation des clés signées

Les clés signées peuvent être activées dans la section section des paramètres de sécurité de votre page de configuration. Notez que vous devrez également générer une clé de signature sur la même page avant que Dacast n’applique des contrôles de sécurité signés par l’utilisateur à vos vidéos :

Caractéristiques des clés signées dacast

Générer des URL de codes d’intégration signés

Il existe trois façons de générer le paramètre uss_token à ajouter à votre code d’intégration.

La première fonctionne uniquement pour les vidéos individuelles (pas pour les sélections) et est spécifique à la vidéo incorporée. En d’autres termes, un jeton généré pour une vidéo particulière ne peut pas être utilisé pour d’autres vidéos que vous possédez.

La seconde méthode génère un jeton qui sera valable (jusqu’à son expiration) pour toutes les vidéos que vous possédez. Cela peut s’avérer utile si vous créez une page qui intègre un certain nombre de vidéos différentes et que vous ne souhaitez pas générer des jetons spécifiques à chaque vidéo. C’est également la méthode requise si vous intégrez une liste de lecture.

La troisième est similaire à la première, sauf qu’elle vous demande de spécifier le format (vidéo/téléchargement/source) afin de n’autoriser que la lecture, mais pas les téléchargements avec ce jeton.

 

Jetons spécifiques à la vidéo

Pour générer un jeton USS, vous devez d’abord choisir une durée d’expiration pour le jeton. En règle générale, vous choisissez une heure située quelques minutes dans le futur (notez que, dans l’idéal, l’heure de votre système devrait être synchronisée à l’aide de NTP ou d’un protocole similaire, de sorte que votre système pense qu’il s’agit de la même heure que celle du système Dacast). L’heure que vous choisissez doit être en UTC, et convertie en une chaîne de caractères au format :

YYYYMMDDHHMMSS

Ainsi, par exemple, le 10 juillet 2021, 07:18:22 PM (UTC) serait exprimé comme suit :

20210710191822

Le paramètre uss_token est alors généré sous la forme de la chaîne suivante :

2.<expiry_timestamp>.MD5(<content_id>:<signing_key>:<expiry_timestamp>)

où `<horodatage d’expiration>` est la chaîne d’horodatage générée ci-dessus, `<content_id>` est l’ID du contenu de la vidéo que vous intégrez, et `<clé de signature>` est votre clé de signature qui se trouve sur la page des paramètres de Dacast. MD5() est une fonction qui calcule le hachage MD5 d’une chaîne donnée.

 

Jetons spécifiques à l’utilisateur

Ce type de jeton ne nécessite pas l’identifiant de la vidéo et sera valable pour toutes vos vidéos ainsi que pour vos sélections. La méthode de construction du jeton est similaire à celle des jetons spécifiques aux vidéos. Le jeton final est calculé comme suit :

3.<expiry_timestamp>.MD5(<signing_key>:<expiry_timestamp>)

La différence réside dans le fait que le jeton est désormais préfixé par “3” et que l’identifiant de la vidéo n’est plus inclus dans la chaîne hachée.

Jetons spécifiques au format

Similaire au jeton spécifique à la vidéo, sauf qu’il vous faut spécifier l’une des options suivantes : vidéo/téléchargement/source, en fonction de ce que vous souhaitez autoriser :

4.<expiry_timestamp>.MD5(video:<content_id>:<signing_key>:<expiry_timestamp>)

ou

4.<expiry_timestamp>.MD5(download:<content_id>:<signing_key>:<expiry_timestamp>)


Exemples de langues
Voici quelques exemples de génération de jetons de sécurité signés par l’utilisateur dans certains langages courants côté serveur :

Rubis

	require 'digest'

	# Expire in 2 minutes time
	expiry_timestamp = (Time.now.utc + 120).strftime("%Y%m%d%H%M%S")
	signing_key = "000033337777aaaa222233334444bbbb"
	video_id = 920344

	# Generate a video-specific token
	signature_vs = Digest::MD5.hexdigest(
	   "#{video_id}:#{signing_key}:#{expiry_timestamp}"
)
token_vs = "2.#{#{signing_key}".#{signature_timestamp}

# Generate a user-specific token
signature_us = Digest::MD5.hexdigest(
   "#{signing_key}:#{expiry_timestamp}"
   )
   token_us = "3.#{expiry_timestamp}.#{signature_us}"

 # Generate a video- and format-specific token
 # This allows only playback, not downloads
 signature_fs = Digest::MD5.hexdigest(
    "video:#{video_id}:#{signing_key}:#{expiry_timestamp}"
)
token_fs = "4.#{expiry_timestamp}.#{signature_fs}"

# This allows only download, not playback
signature_fs = Digest::MD5.hexdigest(
   "download:#{video_id}:#{signing_key}:#{expiry_timestamp}"
)
token_fs = "4.#{expiry.timestamp}.#{signature_fs}""

Java

// This example requires the apache common-codec library
	//	(http://commons.apache.org.codec)
	import org.apache.commons.codec.digest.DigestUtils;

	import java.text.SimpleDateFormat;
	import java.util.Date;
	import java.util.Timezone;

	public class DacastUssTokens {

		public static void main(String)[] args) {
			SimpleDateFormat dateFormat = new SimpleDateFormat("yyyMMddHHmmss");
			dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));

			String expiryTimestamp = dateformat.format(
					new Date(System.currentTimeMillis() + (120 * 1000)));
			String signingKey = "000033337777aaaa222233334444bbbb";
			int videoID = 920344;

			// Generate a video-specific token
			String signatureVs = DigestUtils.md5Hex(
					String.format("%d:%s:%s", videoId, signingKey, expiryTimestamp));
			String tokenVs = String.format("2.%s.%s", expiryTimestamp, signatureVs);

			// Generate a user-specific token
			String signaturesUS = DigestUtils.md5Hex(
					String.format("%s:%s", signingkey, expiryTimestamp));
			String tokenUs = String.format("3.%s.%s", expiryTimestamp, signatureUs);

			// Generate a video- and format-specfic token
			// This allows only playback, not downloads
			String signatureFs = DigestUtils.md5Hes(
					String.format("%s:%s:%s", "video", videoId, signingKey, expiryTimestamp
			String tokenFs = String.format("4.%s.%s", expiryTimestamp, signatureFs);

			 // This allows only downloads, not playback
			 String signatureFs = DigestUtils.md5Hex(
			 		String.format("%s:%d:%s:%s", "video", videoId, signingKey, expiryTime
			 String tokenFs = String.format("4.%s.%s", expiryTimestamp, signatureFs);
	}
}

PHP
<?php
		# Epire in 2 minutes time
		$time = new DateTime('now', new DateTimeZone('UTC'));
		$time -> modify("+2 minutes");
		$expiry_timestamp = $time -> format{'ymdHis'};
		$signing_key = "000033337777aaaa222233334444bbbb";
		$video_id = 920344;

		# generate  video-specific token
		$signature_vs = md5("{expiry_timestamp}.{$signature_vs}");
		$token_vs = "2.{$expiry_timestamp}.{$signature_vs}";

		# Generate a user-specific token
		$signature_us = md5("{signing_key}:{$signature_timestamp}";
		$token_us = "3.{$expiry_timestamp}.{$signature_us}";

		# Generate a video- and format-specific token
		# This allows only playback, not downloads
		$signature_fs = md5("video_id}:{$signing_key}:{$sexpiry_timestamp}");
		$token_fs = "4.{$expiry_timestamp}.{$signature_fs}";

		# This allows only downloads, not playback
		$signature_fs = md5("download:{$video_id}:{signing_key}:{$expiry_timestamp}";
		$token_fs = "4.{$expiry_timestamp}.{$signature_fs}";
?>

C#

Nous n’avons pas d’exemple complet de code C# pour l’instant, car nous ne sommes pas des ingénieurs .NET. Cependant, le problème principal est la création d’un hachage MD5 de la chaîne. Un article explique exactement comment procéder : Comment calculer un hachage MD5 à partir d’une chaîne ?

Harmonie Duhamel

Harmonie is a Senior digital marketer with over 6 years in the Tech Industry. She has a strong marketing and sales background and loves to work in multilingual environments.