Medietoken media-tokens
Medietoken är en token som genereras av Adobe Pass Authentication REST API V2 som ett resultat av ett auktoriseringsbeslut som ska ge visningsåtkomst till skyddat innehåll (resurs).
Medietoken är giltig under en begränsad och kort tidsperiod (standardtid 7 minuter) som anges vid tidpunkten för utfärdandet, vilket anger tidsgränsen innan den måste verifieras och användas av klientprogrammet. Medietoken är begränsad till engångsbruk och får aldrig cachelagras.
Medietoken består av en signerad sträng baserad på PKI (Public Key Infrastructure) som skickas i klartext. Med det PKI-baserade skyddet signeras token med en asymmetrisk nyckel som utfärdats till Adobe av en certifikatutfärdare (CA).
Medietoken skickas till programmeraren, som sedan kan validera den med Media Token Verifier innan videoströmmen startas för att säkerställa åtkomstsäkerheten för den resursen.
Verifieraren för medietoken är ett bibliotek som distribueras av Adobe Pass Authentication och som ansvarar för att verifiera äktheten för en medietoken.
Media Token Verifier media-token-verifier
Adobe Pass Authentication rekommenderar att programmerare skickar medietoken till sin egen backend-tjänst som integrerar biblioteket för verifiering av medietoken för att säkerställa säker åtkomst innan videoströmmen initieras. Medietokenens TTL (time-to-live) är utformad för att ta hänsyn till potentiella klocksynkroniseringsproblem mellan den tokengenererande servern och den validerande servern.
Adobe Pass Authentication ger starkt stöd för att parsa medietoken och extrahera data direkt eftersom tokenformatet inte är garanterat och kan ändras i framtiden. Media Token Verifier-biblioteket bör vara det enda verktyget som används för att analysera tokeninnehållet.
Du kan ladda ned Media Token Verifier-biblioteket via följande länk:
- https://tve.zendesk.com/hc/en-us/articles/204963159-Media-Token-Verifier-library
Media Token Verifier-biblioteket kräver JDK version 1.5 eller senare och stöder användning av en önskad Java Cryptography Extension-provider (JCE) för signaturalgoritmen (SHA256WithRSA).
Biblioteket för verifiering av medietoken som representeras av Java-arkivet mediatoken-verifier-VERSION.jar innehåller:
- Adobe offentlig nyckel.
- API för tokenverifiering (
ITokenVerifier.java). - Referensimplementering (
com.adobe.entitlement.test.EntitlementVerifierTest.java). - Beroenden och certifikatnyckelbehållare.
123456.Metoder methods
Klassen ITokenVerifier definierar följande metoder:
-
Metoden
isValid()som används för att validera medietoken. Det accepterar ett enskilt argument, resurs-ID. Om den angivna resursidentifieraren ärnullvaliderar metoden endast medietokenens autentiserings- och giltighetsperiod.Metoden
isValid()returnerar ett av följande statusvärden:table 0-row-2 1-row-2 2-row-2 3-row-2 4-row-2 5-row-2 VALID_TOKEN Tokenvalideringar har slutförts INVALID_TOKEN_FORMAT Tokenformatet är ogiltigt INVALID_SIGNATURE Det gick inte att verifiera tokenautentiseringen TOKEN_EXPIRED Token TTL är inte giltig INVALID_RESOURCE_ID Token är inte giltig för angiven resurs ERROR_UNKNOWN Token har inte verifierats än -
Metoden
getResourceID()som används för att hämta den resursidentifierare som är associerad med medietoken och jämföra den med identifieraren som returnerades från auktoriseringsbeslutets svar. -
Metoden
getTimeIssued()som används för att hämta tiden när medietoken utfärdades. -
Metoden
getTimeToLive()som används för att hämta medietoken. -
Metoden
getUserSessionGUID()som används för att hämta en anonym GUID som angetts av MVPD. -
Metoden
getMvpdId()som används för att hämta identifieraren för den MVPD som autentiserade användaren. -
Metoden
getProxyMvpdId()som används för att hämta identifieraren för Proxy MVPD som autentiserade användaren.
Exempel sample
Verifieringsarkivet för medietoken innehåller en referensimplementering (com.adobe.entitlement.test.EntitlementVerifierTest.java) och ett exempel på hur API anropas med testklassen. Det här exemplet (com.adobe.entitlement.text.EntitlementVerifierTest.java) illustrerar integrationen av Media Token Verifier-biblioteket i en medieserver.
package com.adobe.entitlement.test;
import com.adobe.entitlement.verifier.CryptoDataHolder;
import com.adobe.entitlement.verifier.ITokenVerifier;
import com.adobe.entitlement.verifier.ITokenVerifierFactory;
import com.adobe.entitlement.verifier.SimpleTokenPKISignatureVerifierFactory;
import com.adobe.tve.crypto.SignatureVerificationCredential;
import java.io.InputStream;
public class EntitlementVerifierTest {
String mRequestorID = null;
String mTokenToVerify = null;
String mPathToCertificate = null;
String mKeystoreType = null;
String mKeystorePasswd = null;
String mResourceID = null;
public static void main(String[] args) {
if (args == null || args.length < 2 ) {
System.out.println("Incorrect args: Usage: EntitlementVerifierTest requestorID tokenToVerify [resourceID]");
return;
}
String requestorID = args[0];
String tokenToVerify = args[1];
String pathToCertificate = "media_token_keystore.jks"; // the default keystore provided in the entitlement jar
String keystoreType = "jks";
String keystorePasswd = "123456"; // password for the default keystore
if (requestorID == null || tokenToVerify == null) {
System.out.println("One or more arguments is null");
return;
}
System.out.println("RequestorID: " + requestorID);
System.out.println("token: " + tokenToVerify);
System.out.println("cert: " + pathToCertificate);
System.out.println("keystoretype: " + keystoreType);
System.out.println("keystore passwd: " + keystorePasswd);
String resourceID = null;
if (args.length > 2) {
resourceID = args[2];
}
System.out.println("Resource ID: " + resourceID);
EntitlementVerifierTest verifier = new EntitlementVerifierTest(requestorID,
tokenToVerify, pathToCertificate, keystoreType, keystorePasswd, resourceID);
verifier.verifyToken();
}
protected EntitlementVerifierTest(String inRequestorID,
String inTokenToVerify,
String inPathToCertificate,
String inKeystoreType,
String inKeystorePasswd, String inResourceID) {
mRequestorID = inRequestorID;
mTokenToVerify = inTokenToVerify;
mPathToCertificate = inPathToCertificate;
mKeystoreType = inKeystoreType;
mKeystorePasswd = inKeystorePasswd;
mResourceID = inResourceID;
}
protected void verifyToken() {
// It is expected that the SignatureVerificationCredential and
// CryptoDataHolder could be created at Init time in a web application
// and be reused for all token verifications.
CryptoDataHolder cryptoData = createCryptoDataHolder(mPathToCertificate, mKeystoreType, mKeystorePasswd);
ITokenVerifierFactory tokenVerifierFactory = new SimpleTokenPKISignatureVerifierFactory();
ITokenVerifier tokenVerifier = tokenVerifierFactory.getInstance(mRequestorID, mTokenToVerify, cryptoData);
ITokenVerifier.eReturnValue status = tokenVerifier.isValid(mResourceID);
System.out.println("Is token Valid? : " + status.toString());
System.out.println("Token User ID: " + tokenVerifier.getUserSessionGUID());
System.out.println("Token was generated at: " + tokenVerifier.getTimeIssued());
System.out.println("Token Mvpd ID: " + tokenVerifier.getMvpdId());
System.out.println("Token Proxy Mvpd ID: " + tokenVerifier.getProxyMvpdId());
}
protected CryptoDataHolder createCryptoDataHolder(String pathToCertificate,
String keystoreType, String keystorePasswd) {
SignatureVerificationCredential verificationCredential =
readShortTokenVerificationCredential(pathToCertificate, keystoreType, keystorePasswd);
CryptoDataHolder cryptoData = new CryptoDataHolder();
cryptoData.setCertificateInfo(verificationCredential);
return cryptoData;
}
protected SignatureVerificationCredential readShortTokenVerificationCredential(String keystoreFile,
String keystoreType,
String keystorePasswd) {
SignatureVerificationCredential cred = null;
if (keystoreFile != null){
try {
// load the keystore file
ClassLoader loader = EntitlementVerifierTest.class.getClassLoader();
InputStream certInputStream = loader.getResourceAsStream(keystoreFile);
if (certInputStream != null) {
cred = new SignatureVerificationCredential(certInputStream, keystorePasswd, keystoreType);
}
}
catch (Exception e) {
System.out.println("Error creating short token server credentials: " + e.getMessage());
}
}
if (cred == null) {
System.out.println("Error creating short token server credentials");
}
return cred;
}
}
REST API V2 rest-api-v2
Medietoken kan hämtas med följande API:
Se avsnitten Svar och Exempel i API:t ovan för att förstå strukturen för auktoriseringsbeslut och medietokens.
Mer information om hur och när ovanstående API ska integreras finns i följande dokument: