Weitere Informationen zum Herunterladen von geschützten und ungeschützten Dateien finden Sie in diesem Artikel.


Wenn die Funktion "Token Protection" in der Sicherheitsrichtlinie eines Videos aktiviert ist (dies kann von einem VideoManager-Administrator aktiviert werden - siehe Sicherheitsrichtlinie bearbeiten für weitere Details), muss ein Authentifizierungscode generiert und dann dem HTML-Einbettungscode hinzugefügt werden, damit Videos mit Token-Schutz wiedergegeben werden können.


Bitte beachten Sie, dass nur der HTML-Einbettungscode mit Token-Schutz verwendet werden kann.


In diesem Abschnitt erfahren Sie, wie Sie eine auf HMAC-SHA256 basierende Signatur berechnen können.

HMAC ist eine Technik, die Hash-Funktionen (SHA256) verwendet, um Nachrichten zu authentifizieren und deren Integrität sicherzustellen. Da HMAC in Verbindung mit einem Schlüssel verwendet wird, stammt der Eingabewert der Hash-Funktion nicht nur aus der Nachricht selbst, sondern auch aus einem geheimen Schlüssel. Dieser Schlüssel ist nur Ihnen bekannt, sodass nur Sie den entsprechenden Prüfsummenwert berechnen und die Authentizität und Integrität bestimmen können.

Berechnung der HMAC-Signatur

Benötigte Authentifizierungsinformationen

InformationBeschreibung

{"video-id":"%videoId%","exp-time":"%expiryTime%""}

Die Nachricht bildet die Grundlage für die Berechnung der Signatur und umfasst:

  • video-id: ID des Videos
  • exp-time: Zeitpunkt, zu dem die Signatur abläuft (Epochenzeitstempel)
Shared secretDer Schlüssel kann in den Sicherheitseinstellungen in Ihrem VideoManager abgerufen werden (Siehe "Sicherheitsrichtlinie bearbeiten").


Der folgende Code zeigt Beispiele, wie man eine HMAC-Signatur berechnet.


Beachten Sie, dass die Beispiel-Funktionen einen Token-Lebensdauerwert in Minuten akzeptieren. Dieser wird dann in Sekunden umgewandelt und zum aktuellen Epoch-Zeitstempel addiert.

Java Code Sample

Java Example
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 Code Sample


Ruby-Example
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 Code Sample

PHP Example
<?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;
?>

Testen Ihrer HMAC-Implementierung

Die Codebeispiele wandeln die "Lebensdauer" des Tokens (in Minuten) in "Verfallszeit" um (den Unix-Epoche-Zeitstempel, der die genaue Sekunde darstellt, in der das Token abläuft). Dies bedeutet, dass der generierte Code jedes Mal unterschiedlich ist, wenn er berechnet wird, auch wenn Sie dieselben Werte eingeben (die Lebensdauer wird in Sekunden umgewandelt und zum aktuellen Epoche-Zeitpunkt hinzugefügt). Sie können Ihre Ausgabe überprüfen, indem Sie sie mit einem bestimmten Verfallszeitpunkt testen, anstatt sie zu berechnen.

Sie können Ihre HMAC-Implementierung mit den folgenden Parametern testen:

Parameter
videoId212zpS6bjN77eixPUMUEjR
sharedSecretabc123
expiryTime1458396066


Die folgende Signatur sollte mit diesen Parametern berechnet werden:

1458396066~62dcbe0e20827245454280c51129a9f30d1122eaeafc5ce88f0fec527631f1b5

Abrufen eines Videos mit Token-Schutz

Um ein Video mit Token-Schutz abzurufen, fügen Sie dem "mi24-video-player" div-Tag des gewünschten HTML-Einbettungscodes des Videos den "token" Parameter mit der berechneten Signatur hinzu.

Bitte beachten Sie Folgendes:

  • Der Parameter "token" kann nur zum Div-Tag hinzugefügt werden. Das bedeutet, dass Sie den HTML-Code einbetten müssen, um ein token-geschütztes Video zu veröffentlichen.
  • Der unten stehende Einbettungscode stammt aus der allgemeinen Live-Instanz der Movingimage Video-Plattform. Einbettungscodes für Kunden, die einen VideoManager auf einer benutzerdefinierten Domain verwenden, enthalten alternative 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>



  • No labels