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. |
n 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;
?> |