Page History
Warning |
---|
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.
Note |
---|
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
Information | Beschreibung |
---|---|
{"video-id":"%videoId%","exp-time":"%expiryTime%""} | Die Nachricht bildet die Grundlage für die Berechnung der Signatur und umfasst:
|
Shared secret | Der 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.
Info |
---|
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
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
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
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
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
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<?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 | |
---|---|
videoId | 212zpS6bjN77eixPUMUEjR |
sharedSecret | abc123 |
expiryTime | 1458396066 |
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.
Note |
---|
Bitte beachten Sie Folgendes:
|
Beispiel
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
<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>
|