- 23 Apr 2025
- Drucken
Token Schutz: HMAC Signatur
- Aktualisiert am 23 Apr 2025
- Drucken
Schützen von Videos mit Token-Authentifizierung
Beschreibung
Die Token-Authentifizierung ist ein Sicherheitsmechanismus, der zum Schutz von Videos verwendet werden kann. Dazu wird dem HTML-Einbettungscode für das Video ein Token-Parameter hinzugefügt.
Der Token-Parameter ist ein Hash aus der Video-ID, der Ablaufzeit und einem geheimen Schlüssel.
Wenn ein Benutzer auf das eingebettete Video klickt, sendet der Browser den Token-Parameter an den VideoManager-Server.
Der VideoManager-Server prüft das Token und ermöglicht dem Benutzer, das Video anzusehen, wenn es gültig ist.
Schritte
Um die Token-Authentifizierung zu verwenden, müssen Sie:
Aktivieren Sie die Funktion „Token-Schutz“ in der Sicherheitsrichtlinie für das Video.
Holen Sie die Video-ID und die Ablaufzeit aus den Metadaten des Videos.
Holen Sie sich den geheimen Schlüssel vom VideoManager-Administrator.
Berechnen Sie die HMAC-Signatur anhand der Video-ID, der Ablaufzeit und des geheimen Schlüssels.
Fügen Sie den Token-Parameter mit dem Wert der HMAC-Signatur in den HTML-Einbettungscode ein.
Hier sehen Sie ein Beispiel für einen HTML-Einbettungscode mit dem Token-Parameter:
<div mi24-video-player
style=""
config-type="vmpro" flash-path="https://e.video-cdn.net/v2"
player-id="FDY_hXG2zDg8YjSjWe4GNT" video-id="4JsxZuu4Yc8L5C_dqejJne"
api-url="//d.video-cdn.net/play"
token="1461246419962~55e8fd678f425f67ae9689896020dcbf7718bbac2d799134b9d946392643a1cc">
</div>
<script type="text/javascript" src="https://e.video-cdn.net/v2/embed.js"></script>
Berechnen der HMAC-Signatur
Erstellen Sie eine Nachricht, die die Video-ID und die Ablaufzeit enthält.
Holen Sie sich den geheimen Schlüssel vom VideoManager-Administrator.
Verwenden Sie den HMAC-SHA256-Algorithmus zur Berechnung der Signatur der Nachricht und des geheimen Schlüssels.
Erforderliche Authentifizierungsinformationen
Das folgende JSON-Objekt wird als Grundlage für die Berechnung der Signatur verwendet:
{
"video-id": "%videoId%",
"exp-time": "%expiryTime%"
}
video-id
: ID des Videosexp-time
: Zeitpunkt, an dem die Signatur abläuft (Epochenzeitpunkt)
Shared Secret
Das Shared Secret ist ein Schlüssel, der zur Erzeugung der Signatur verwendet wird. Der Schlüssel kann über die Sicherheitseinstellungen in Ihrem VideoManager abgerufen werden (siehe Konfiguration der Sicherheitsrichtlinie).
Codebeispiele für die Signaturerstellung
Die folgenden Codebeispiele zeigen, wie eine HMAC-Signatur unter Verwendung des gemeinsamen Geheimnisses und der Verfallszeit berechnet wird. Die Beispiele zeigen auch, wie der Wert der Token-Lebensdauer von Minuten in Sekunden umgewandelt und zum aktuellen Epochenzeitpunkthinzugefügt wird.
Java Beispiel
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;
import java.math.*;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.time.Duration;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
public class VMProToken {
public static void main(String[] args) {
final String videoID = "212zpS6bjN77eixPUMUEjR";
final String sharedSecret = "abc123";
final Duration lifeTime = Duration.of(5, ChronoUnit.MINUTES); //token expires in 5 minutes
try {
final String token = generateToken(videoID, sharedSecret, lifeTime);
System.out.println(token);
} catch (NoSuchAlgorithmException | InvalidKeyException e) {
e.printStackTrace();
}
}
private static String generateToken(String videoId, String sharedSecret, Duration lifeTime)
throws NoSuchAlgorithmException, InvalidKeyException {
final String HASH_PATTERN = "{\"video-id\":\"%s\", \"exp-time\": %s}";
final String HASH_ALGORITHM = "HmacSHA256";
final long expiryTime = Instant.now().plus(lifeTime).getEpochSecond();
final String tokenCalcBase = String.format(HASH_PATTERN, videoId, expiryTime);
final Mac hmac = Mac.getInstance(HASH_ALGORITHM);
final byte[] keyBytes = DatatypeConverter.parseHexBinary(sharedSecret);
final SecretKeySpec secretKey = new SecretKeySpec(keyBytes, HASH_ALGORITHM);
hmac.init(secretKey);
final byte[] hmacBytes = hmac.doFinal(tokenCalcBase.getBytes());
final String hash = String.format("%064x", new BigInteger(1, hmacBytes));
return expiryTime + "~" + hash;
}
}
Ruby Beispiel
require 'openssl'
require 'date'
videoId = "212zpS6bjN77eixPUMUEjR"
sharedSecret = ["abc123"].pack('H*') #Hex2Bin
lifeTime = 5
expiryTime = (Time.now.to_i + (lifeTime*60)).to_s
message = sprintf("{\"video-id\":\"%s\", \"exp-time\": %s}", videoId, expiryTime)
hmac = OpenSSL::HMAC.hexdigest('sha256', sharedSecret , message)
token = expiryTime + "~" + hmac
printf("\nToken: %s\n", token)
<?php
$videoId = "212zpS6bjN77eixPUMUEjR";
$sharedSecret = "abc123";
$lifeTime = 5;
function generateToken($videoId, $sharedSecret, $lifeTime)
{
$expiryTime = time() + ($lifeTime*60);
$data = sprintf("{\"video-id\":\"%s\", \"exp-time\": %s}" , $videoId, $expiryTime);
$hash = hash_hmac ( "sha256", $data , hex2bin($sharedSecret) );
$token = sprintf ("%s~%s", $expiryTime , $hash);
return $token;
}
$token = generateToken($videoId, $sharedSecret, $lifeTime);
echo $token;
?>
Abrufen von Token-geschützten Videos
Um ein Token-geschütztes Video abzurufen, müssen Sie den "token"-Parameter mit der berechneten Signatur zum "mi24-video-player" div-Tag des HTML-Einbettungscodes des gewünschten Videos hinzufügen.
Wichtige Hinweise:
Der Parameter „token“ kann nur dem div-Tag „mi24-video-player“ hinzugefügt werden, d.h. Sie müssen den HTML-Einbettungscode verwenden, um ein token-geschütztes Video zu veröffentlichen.
Der bereitgestellte Embed-Code ist für die allgemeine Live-Instanz der movingimage Video-Plattform. Embed-Codes für Kunden, die einen VideoManager auf einer benutzerdefinierten Domain verwenden, haben andere URLs.
Beispiel:
<div mi24-video-player
style=""
config-type="vmpro"
flash-path="https://e.video-cdn.net/v2"
player-id="FDY_hXG2zDg8YjSjWe4GNT"
video-id="4JsxZuu4Yc8L5C_dqejJne"
api-url="//d.video-cdn.net/play"
token="1461246419962~55e8fd678f425f67ae9689896020dcbf7718bbac2d799134b9d946392643a1cc">
</div>
<script type="text/javascript" src="https://e.video-cdn.net/v2/embed.js"></script>