Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
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

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.


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
languagejava
titleJava Example
linenumberstrue
collapsetrue
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
languageruby
titleRuby-Example
linenumberstrue
collapsetrue
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
languagephp
titlePHP Example
linenumberstrue
<?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;
?>