Partager via


Syntaxe JSON CustomData pour le serveur de test PlayReady

Aperçu

Le serveur de test PlayReady prend en charge la syntaxe JSON CustomData pour la configuration avancée des licences. Cette méthode permet aux développeurs de spécifier des paramètres de licence et des stratégies complexes à l’aide du format JSON dans le champ CustomData des demandes de licence.

JSON Structure

Le champ CustomData accepte un objet JSON avec différents paramètres de configuration :

{
  "version": "1.0",
  "config": {
    "licenseType": "persistent|non-persistent|rental|subscription",
    "keyId": "GUID",
    "contentKey": "base64-encoded-key",
    "policies": {
      "outputProtection": {
        "digital": "required|optional|never",
        "analog": "required|optional|never"
      },
      "playback": {
        "allowOffline": true|false,
        "expirationDate": "ISO-8601-datetime",
        "gracePeriod": "duration-in-seconds"
      }
    }
  }
}

Paramètres de configuration

Type de licence

Spécifie le type de licence à générer :

  • persistant : Licence stockée sur l’appareil, survive au redémarrage de l’application
  • non persistant : licence temporaire, expire lorsque l’application se ferme
  • location : licence limitée dans le temps avec expiration spécifique
  • abonnement : licence basée sur un abonnement avec validation périodique

Gestion de clés

Configurez les clés de chiffrement et les identificateurs :

{
  "keyId": "12345678-1234-1234-1234-123456789012",
  "contentKey": "base64EncodedContentKey",
  "keyRotation": {
    "enabled": true,
    "interval": "PT1H"
  }
}

Stratégies de protection de sortie

Contrôler les exigences de protection de sortie :

{
  "outputProtection": {
    "digital": {
      "hdcp": "required",
      "cgmsa": "copy-never"
    },
    "analog": {
      "macrovision": "required",
      "cgmsa": "copy-once"
    }
  }
}

Exemples de configurations

Licence permanente de base

{
  "version": "1.0",
  "config": {
    "licenseType": "persistent",
    "keyId": "12345678-1234-1234-1234-123456789012",
    "policies": {
      "playback": {
        "allowOffline": true
      }
    }
  }
}

Licence de location avec restrictions de temps

{
  "version": "1.0",
  "config": {
    "licenseType": "rental",
    "keyId": "87654321-4321-4321-4321-210987654321",
    "policies": {
      "playback": {
        "expirationDate": "2024-12-31T23:59:59Z",
        "gracePeriod": 3600
      },
      "outputProtection": {
        "digital": "required",
        "analog": "optional"
      }
    }
  }
}

Licence d’abonnement avec la protection de sortie

{
  "version": "1.0",
  "config": {
    "licenseType": "subscription",
    "keyId": "11111111-2222-3333-4444-555555555555",
    "policies": {
      "playback": {
        "allowOffline": false
      },
      "outputProtection": {
        "digital": "required",
        "analog": "required"
      },
      "subscription": {
        "renewalUrl": "https://subscription.service.com/renew",
        "validationInterval": "PT24H"
      }
    }
  }
}

Utilisation dans les demandes de licence

Requête HTTP POST

Incluez la configuration JSON dans le champ CustomData :

POST /pr/svc/rightsmanager.asmx HTTP/1.1
Host: playready.directtaps.net
Content-Type: application/octet-stream

[License Request with CustomData containing JSON configuration]

Intégration du client

Exemple JavaScript

const customData = {
  version: "1.0",
  config: {
    licenseType: "persistent",
    keyId: keyId,
    policies: {
      playback: {
        allowOffline: true
      }
    }
  }
};

// Include in license request
const licenseRequest = {
  customData: JSON.stringify(customData),
  // ... other license request parameters
};

Exemple C#

var customData = new {
    version = "1.0",
    config = new {
        licenseType = "persistent",
        keyId = keyId,
        policies = new {
            playback = new {
                allowOffline = true
            }
        }
    }
};

string jsonCustomData = JsonConvert.SerializeObject(customData);
// Include in PlayReady license request

Fonctionnalités avancées

Accès conditionnel

Configurez l’accès conditionnel en fonction des attributs de l’appareil ou de l’utilisateur :

{
  "conditionalAccess": {
    "deviceRestrictions": {
      "allowedDeviceTypes": ["mobile", "desktop"],
      "blockedDevices": ["emulator", "debugger"]
    },
    "geoRestrictions": {
      "allowedCountries": ["US", "CA", "GB"],
      "blockedRegions": ["region1", "region2"]
    }
  }
}

Prise en charge multifacteur

Prise en charge de plusieurs clés de chiffrement :

{
  "keys": [
    {
      "keyId": "key-1-guid",
      "contentKey": "base64-key-1",
      "keyType": "content"
    },
    {
      "keyId": "key-2-guid", 
      "contentKey": "base64-key-2",
      "keyType": "track"
    }
  ]
}

Gestion des erreurs

Erreurs de validation JSON

  • JSON mal formé : HTTP 400 avec des détails d’erreur d’analyse JSON
  • Champs obligatoires manquants : HTTP 400 avec des erreurs de validation de champ
  • Valeurs de champ non valides : HTTP 400 avec violations de contrainte de valeur

Erreurs de configuration

  • Type de licence non pris en charge : HTTP 400 avec la liste des types pris en charge
  • Format de clé non valide : HTTP 400 avec les exigences de format de clé
  • Conflits de stratégie : HTTP 400 avec des conseils de résolution de stratégie

Meilleures pratiques

  1. Validation JSON : Valider la structure JSON avant d’envoyer des demandes
  2. Compatibilité des versions : Utiliser la version appropriée pour la prise en charge des fonctionnalités
  3. Sécurité des clés : n’exposez jamais les clés de contenu dans le code côté client
  4. Test de stratégie : Tester minutieusement différentes combinaisons de stratégies
  5. Gestion des erreurs : Implémenter une gestion complète des erreurs pour tous les scénarios

Support et résolution des problèmes

Pour les problèmes liés à la syntaxe JSON CustomData :

  1. Valider le format ET la structure JSON
  2. Vérifier la présence et les valeurs de champ requises
  3. Vérifier la compatibilité et les contraintes de stratégie
  4. Tester d’abord avec des configurations simplifiées
  5. Passer en revue la réponse du serveur pour obtenir des informations détaillées sur les erreurs

Pour obtenir une prise en charge supplémentaire, reportez-vous à la documentation principale des serveurs de test PlayReady .