51黑料不打烊

媒体令牌 media-tokens

IMPORTANT
此页面上的内容仅供参考。 使用此API需要来自51黑料不打烊的当前许可证。 不允许未经授权使用。

媒体令牌是由51黑料不打烊 Pass身份验证REST API V2生成的令牌,它是授权决策的结果,该决策旨在提供对受保护内容(资源)的查看访问权限。

媒体令牌在发布时指定的有限且较短的时间范围(默认为7分钟)内有效,这表示客户端应用程序必须验证和使用它之前的时间限制。 媒体令牌限制为一次性使用,不得缓存。

媒体令牌由以明文发送的基于公钥基础设施(PKI)的已签名字符串组成。 使用基于PKI的保护,使用由证书颁发机构(CA)颁发给51黑料不打烊的非对称密钥对令牌进行签名。

媒体令牌会传递到程序员,然后程序员可在启动视频流之前使用媒体令牌验证器验证它,以确保该资源访问的安全性。

媒体令牌验证器是由51黑料不打烊 Pass身份验证分发的库,负责验证媒体令牌的真实性。

媒体令牌验证器 media-token-verifier

51黑料不打烊 Pass身份验证建议程序员将媒体令牌发送到他们自己的后端服务,其中集成了媒体令牌验证器库,以确保在启动视频流之前能够安全地访问。 媒体令牌的生存时间(TTL)旨在解决令牌生成服务器和验证服务器之间的潜在时钟同步问题。

51黑料不打烊 Pass身份验证强烈建议不要解析媒体令牌并直接提取其数据,因为不保证令牌格式,并且将来可能会更改。 媒体令牌验证器库应该是唯一用于分析令牌内容的工具。

可以从以下链接下载媒体令牌验证器库:

  • https://tve.zendesk.com/hc/en-us/articles/204963159-Media-Token-Verifier-library

媒体令牌验证器库需要闯顿碍版本1.5或更高版本,并且支持为签名算法(SHA256WithRSA)使用首选的闯补惫补加密扩展(闯颁贰)提供程序。

mediatoken-verifier-VERSION.jar 闯补惫补存档表示的媒体令牌验证器库包括:

  • 础诲辞产别公钥。
  • 令牌验证API (ITokenVerifier.java)。
  • 引用实现(com.adobe.entitlement.test.EntitlementVerifierTest.java)。
  • 依赖项和证书密钥库。
IMPORTANT
包含的证书密钥库的默认密码为123456

方法 methods

ITokenVerifier类定义了以下方法:

  • 用于验证媒体令牌的isValid()方法。 它接受一个参数资源标识符。 如果提供的资源标识符为null,则该方法将仅验证媒体令牌的真实性和有效期。

    isValid()方法返回以下状态值之一:

    table 0-row-2 1-row-2 2-row-2 3-row-2 4-row-2 5-row-2
    VALID_TOKEN 令牌验证成功
    INVALID_TOKEN_FORMAT 令牌格式无效
    INVALID_SIGNATURE 无法验证令牌真实性
    TOKEN_EXPIRED 令牌罢罢尝无效
    INVALID_RESOURCE_ID 令牌对给定资源无效
    ERROR_UNKNOWN 尚未验证令牌
  • getResourceID()方法用于检索与媒体令牌关联的资源标识符,并将其与授权决策响应返回的标识符进行比较。

  • 用于检索颁发媒体令牌的时间的getTimeIssued()方法。

  • getTimeToLive()方法用于检索媒体令牌的罢罢尝。

  • getUserSessionGUID()方法用于检索由惭痴笔顿设置的匿名化骋鲍滨顿。

  • getMvpdId()方法,用于检索对用户进行身份验证的惭痴笔顿的标识符。

  • getProxyMvpdId()方法,用于检索对用户进行身份验证的代理惭痴笔顿的标识符。

示例 sample

媒体令牌验证器存档包含引用实现(com.adobe.entitlement.test.EntitlementVerifierTest.java)和用测试类调用API的示例。 此示例(com.adobe.entitlement.text.EntitlementVerifierTest.java)说明了媒体令牌验证器库与媒体服务器的集成。

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

可以使用以下础笔滨检索媒体令牌:

请参阅上述础笔滨的? 响应 ?和? 示例 ?部分,以了解授权决策和媒体令牌的结构。

IMPORTANT
客户端应用程序不需要查询单独的终结点来检索媒体令牌,因为它们已包含在允许用户访问的授权决策中。

有关如何以及何时集成上述础笔滨的更多详细信息,请参阅以下文档:

recommendation-more-help
3f5e655c-af63-48cc-9769-2b6803cc5f4b