Token Schutz: HMAC Signatur
  • 23 Apr 2025

Token Schutz: HMAC Signatur


Artikel-Zusammenfassung

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:

  1. Aktivieren Sie die Funktion „Token-Schutz“ in der Sicherheitsrichtlinie für das Video.

  2. Holen Sie die Video-ID und die Ablaufzeit aus den Metadaten des Videos.

  3. Holen Sie sich den geheimen Schlüssel vom VideoManager-Administrator.

  4. Berechnen Sie die HMAC-Signatur anhand der Video-ID, der Ablaufzeit und des geheimen Schlüssels.

  5. 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

  1. Erstellen Sie eine Nachricht, die die Video-ID und die Ablaufzeit enthält.

  2. Holen Sie sich den geheimen Schlüssel vom VideoManager-Administrator.

  3. 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 Videos

  • exp-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>


War dieser Artikel hilfreich?

What's Next