You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 8 Next »

EN

Im Rahmen des Features "Token-Schutz" im VideoManager Pro muss ein Token generiert werden, damit geschützte Videos bei aktiviertem Token-Schutz nicht abgespielt werden können.

Eine Möglichkeit besteht darin, aus einem Schlüssel und einer Nachricht einen Hash zu berechnen. Dies bedeutet der Request wird als Hash gesendet und enthält einen Zeitstempel, so dass der Hash jedes Mal anders ist, wenn er gesendet wird.

In diesem Abschnitt erfahren Sie, wie ein HMAC-SHA256-Code zu diesem Zweck erzeugt wird.

 

HMAC steht für "Keyed-Hash Message Authentication Code". Für die Berechnung eines HMAC-Tokens werden folgende Parameter benötigt:

ParameterBeschreibung
HSHA256

M

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

Message: als Grundlage für die Token-Berechnung. Sie setzt sich wie folgt zusammen:

  • video-id: ID des Videos
  • expTime: Zeitpunkt, an dem der Token ablaufen soll (epoch timestamp)

Shared secretDer Schlüssel kann in den Sicherheitseinstellungen des VideoManagers eingesehen werden (siehe "VideoManager Handbuch: Sicherheitsrichtlinie bearbeiten").

 

 

Java Code-Beispiel

Das folgende Java-Code-Beispiel zeigt, wie ein HMAC-Token berechnet wird.

Java Example
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;

public String generateToken(String videoId, String tokenSecret, long lifeTimeMillis) {
    final String HASH_PATTERN = "{\"video-id\":\"%s\", \"exp-time\": %s}"
    final String HASH_ALGORITHM = "HmacSHA256";
    
    final long expiryTime = System.currentTimeMillis() + lifeTimeMillis;
    
    final String tokenCalcBase = String.format(HASH_PATTERN, videoId, expiryTime);
    final Mac hmac = Mac.getInstance(HASH_ALGORITHM);
    final byte[] keyBytes = DatatypeConverter.parseHexBinary(tokenSecret);
    final SecretKeySpec secretKey = new SecretKeySpec(keyBytes, HASH_ALGORITHM);
    hmac.init(secretKey);
    final byte[] hmacBytes = hmac.doFinal(tokenCalcBase.getBytes());
    final String hash = String.format("%032x", new BigInteger(1, hmacBytes));
    
    return expiryTime + "~" + hash;
}

Ruby Code-Beispiel

 

Ruby-Example
require 'openssl'

shared_secret = ["abc123"].pack('H*') #Hex2Bin
video_id = "212zpS6bjN77eixPUMUEjR"
exp_time = "1458396066"


message = sprintf("{\"video-id\":\"%s\", \"exp-time\": %s}", video_id, exp_time)
hmac = OpenSSL::HMAC.hexdigest('sha256', shared_secret , message)
token = exp_time + "~" + hmac
 
printf("\nToken: %s\n", token)

PHP Code-Beispiel

 

PHP Example
<?php
 
$shared_secret = "16f189853dd46d871645074c402a3458";
$exp_time = "1902840215";
$video_id = "AZBTcFzS5h2FHCBWwcLjya";

function generateToken($video_id, $exp_time, $shared_secret)
{
  $data = sprintf("{\"video-id\":\"%s\", \"exp-time\": %s}" , $video_id, $exp_time);
  $hash = hash_hmac ( "sha256", $data , hex2bin($shared_secret) );
  $token = sprintf ("%s~%s", $exp_time , $hash);
  return $token;
}

$token = generateToken($video_id, $exp_time, $shared_secret);
echo $token;
?>
 

Testen der HMAC-Implementierung

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

ParameterBeschreibung
video-ID212zpS6bjN77eixPUMUEjR
secretabc123
expTime1458396066

 

Mit diesen Parametern sollte folgender Token erzeugt werden:

1458396066~62dcbe0e20827245454280c51129a9f30d1122eaeafc5ce88f0fec527631f1b5