Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Overzicht
De PlayReady-testserver bevat een speciale clientinfo functie die de informatie weerspiegelt die beschikbaar is voor de licentieserver op basis van de vraag met betrekking tot de licentieaanvraag die door de client wordt gegenereerd. Met deze functie kunnen ontwikkelaars eenvoudig onderzoeken welke clientgegevens naar licentieservers worden verzonden en de juiste logica voor het genereren van licenties bouwen op basis van clientmogelijkheden.
Functie Clientgegevens
Gebruik de clientinfo parameter om clientgegevens te controleren die zijn verzonden in licentieaanvragen:
URL van testserver:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(msg:clientinfo)
SOAP-actie:
http://schemas.microsoft.com/DRM/2007/03/protocols/AcquireLicense
Voorbeeld van aanvraagstructuur
De functie clientgegevens verwerkt standaard aanvragen voor het verkrijgen van PlayReady-licenties en retourneert gedetailleerde informatie over de client in plaats van een licentie. Dit is de structuur van een typische aanvraag:
<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<AcquireLicense xmlns="http://schemas.microsoft.com/DRM/2007/03/protocols">
<challenge>
<Challenge xmlns="http://schemas.microsoft.com/DRM/2007/03/protocols/messages">
<LA xmlns="http://schemas.microsoft.com/DRM/2007/03/protocols"
Id="SignedData" xml:space="preserve">
<Version>1</Version>
<ContentHeader>
<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader"
version="4.0.0.0">
<DATA>
<PROTECTINFO>
<KEYLEN>16</KEYLEN>
<ALGID>AESCTR</ALGID>
</PROTECTINFO>
<KID>JpbjtvscoUq8vU7xq6eEOg==</KID>
<LA_URL>https://test.playready.microsoft.com/service/rightsmanager.asmx</LA_URL>
<LUI_URL>https://test.playready.microsoft.com/service/getrights.html</LUI_URL>
</DATA>
</WRMHEADER>
</ContentHeader>
<CLIENTINFO>
<CLIENTVERSION>10.0.16384.10011</CLIENTVERSION>
</CLIENTINFO>
<RevocationLists>
<RevListInfo>
<ListID>ioydTlK2p0WXkWklprR5Hw==</ListID>
<Version>11</Version>
</RevListInfo>
<!-- Additional revocation lists... -->
</RevocationLists>
<LicenseNonce>YCBas7tAUmkjOcabdD4DuQ==</LicenseNonce>
<ClientTime>1488568844</ClientTime>
<EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#"
Type="http://www.w3.org/2001/04/xmlenc#Element">
<!-- Encrypted client data... -->
</EncryptedData>
</LA>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<!-- Digital signature... -->
</Signature>
</Challenge>
</challenge>
</AcquireLicense>
</soap:Body>
</soap:Envelope>
Voorbeeldantwoord: Windows 10 Edge Browser
Voor een uitdaging die is uitgegeven door Microsoft Edge in Windows 10:
Client Info:
Client Version: 10.0.16384.10011
Client Time: 10/01/2017 2:00:00 PM
Supported Features:
Receiver
AntiRollbackClock
RevocationLists
PlayReady3Features
Device Certificate Info (Cert 0):
Platform: WindowsOnX86
Type: Device
SecurityLevel: 2000
RobustnessVersion: 100925543
DigestValue: 04+2aK5sjv+m5/EUY9BIMFqe0ResBkL9wfuFepWDU9E=
IssuerKey: h/k8EU71zsgAqa0niR1TnpKDC6dyOEgUGjybc3+s/EnUJWpkMtOwygoyCPp1nuRCFDvfoaaI78kb2fqGBI0tWg==
Binding Key Type: 3
Certificate Chain:
↳ Cert 1:
ManufacturerName: Microsoft
ModelName: Windows
ModelNumber: 6.4.0.103
DigestValue: LLp1fynIs9tgDxDDU+8jFveBoQp+0x8fXnqyV9tk1Zc=
Platform: WindowsOnX86
↳ Cert 2:
ManufacturerName: Microsoft
ModelName: PlayReady SL2000 Device Port- Windows Lib Codebase Version CA
ModelNumber: 1.0.0.4
DigestValue: Y3C0kjOxz3h/njYBKeApsvfPscwLcV1qAiTfAXXSLw4=
↳ Cert 3:
ManufacturerName: Microsoft
ModelName: PlayReady SL2000 Device Port - Windows Platform CA for x86/amd64
ModelNumber: 1.0.0.3
DigestValue: L62pDo9+gkd6LoLDbQwgxwtYldcuhSEog7GcJwtJ3CE=
↳ Cert 4:
ManufacturerName: Microsoft
ModelName: PlayReady SL2000 Device Port + Link CA
ModelNumber: 1.0.0.1
DigestValue: 7Q8z1rSr8I3AGkcf0BNoDgwS46nO0wD5m0WvYfFoTWQ=
Voorbeeldantwoord: PlayReady 3.2 SL3000-client
Voor een uitdaging die is uitgegeven door een Op PlayReady 3.2 gebaseerde SL3000-client:
Client Info:
Client Version: 3.2.0.4242
Client Time: 10/01/2017 2:00:00 PM
Supported Features:
SecureClock
RevocationLists
Receiver
Transmitter
PlayReady3Features
Device Certificate Info (Cert 0):
Platform: OEM
Type: Device
SecurityLevel: 3000
RobustnessVersion: 0
ManufacturerName: Contoso
ModelName: Cool Device Name
ModelNumber: Cool Device Name
DigestValue: IOSxDmGiRlX+dUf62sohHj/IB0qRKSkV7wz7sbZ3HSo=
IssuerKey: UlT6XXcgAMzaVAJN9JLJVomCFwppjoqgMMcT748yX27D053iiEP69pjEBnTxWiSEVXj76/e2wDImTgQDtbLTVg==
Binding Key Type: 3
Certificate Chain:
↳ Cert 1:
ManufacturerName: Contoso
ModelName: Cool Device Name
ModelNumber: ABC-XYZ-123
DigestValue: rmnxSlpuh9WTlXa6ACLcSJDnPVtoS5/2P1wa/kEgs1M=
↳ Cert 2:
ManufacturerName: Contoso
DigestValue: 5H3YVzR9EhHVnsseOJmO/ZCrX10Z8bOx9PDhKOhrxe4=
↳ Cert 3:
ManufacturerName: Microsoft
ModelName: PlayReady SL3000 Device Port + Link CA
ModelNumber: 1.0.0.1
DigestValue: bk7YOJRioSgnzjpZgLasowaL96LFIBHDx6B0z+JoDPE=
Elementen van clientgegevens
Basisclientgegevens
| Veld | Beschrijving | Voorbeeldwaarden |
|---|---|---|
| Clientversie | PlayReady-clientversie |
10.0.16384.10011, 3.2.0.4242 |
| Clienttijd | Clientsysteemtijd | 10/01/2017 2:00:00 PM |
| Perron | Clientplatform-id |
WindowsOnX86, OEM |
Ondersteunde functies
| Eigenschap | Beschrijving |
|---|---|
| ontvanger | Client kan inhoud ontvangen en ontsleutelen |
| Zender | Client kan inhoud verzenden naar andere apparaten |
| AntiRollbackClock | Client biedt ondersteuning voor anti-terugdraaiklokfunctionaliteit |
| Intrekkingslijsten | Client ondersteunt verwerking van intrekkingslijsten |
| PlayReady3Features | Client biedt ondersteuning voor PlayReady 3.0+ functies |
| SecureClock | Client biedt ondersteuning voor beveiligde klokfunctionaliteit |
Informatie op beveiligingsniveau
| Beveiligingsniveau | Beschrijving | Gebruiksvoorbeelden |
|---|---|---|
| SL150 | Beveiliging op basis van software | Basisinhoudsbeveiliging |
| SL2000 | Beveiliging op basis van hardware | Standard Premium-inhoud |
| SL3000 | Hardwarebeveiligingsmodule | Ultra premium-inhoud |
Informatie over certificaatketen
Elk certificaat in de keten biedt:
- ManufacturerName - Apparaatfabrikant
- ModelName - Apparaatmodel-id
- ModelNumber - Specifieke modelversie
- DigestValue - Vingerafdruk van certificaat
- Platform - Hardwareplatformtype
Testscenario's
Detectie van clientfunctionaliteit
async function detectClientCapabilities() {
const clientInfoUrl = 'http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(msg:clientinfo)';
try {
const response = await sendLicenseRequest(clientInfoUrl);
const clientInfo = parseClientInfoResponse(response);
return {
version: clientInfo.clientVersion,
securityLevel: clientInfo.deviceCert.securityLevel,
features: clientInfo.supportedFeatures,
platform: clientInfo.deviceCert.platform,
manufacturer: clientInfo.certificateChain[0].manufacturerName
};
} catch (error) {
console.error('Failed to detect client capabilities:', error);
return null;
}
}
Validatie op beveiligingsniveau
async function validateSecurityLevel(requiredLevel) {
const clientInfo = await detectClientCapabilities();
if (!clientInfo) {
return { valid: false, reason: 'Could not detect client capabilities' };
}
const clientLevel = parseInt(clientInfo.securityLevel);
const required = parseInt(requiredLevel);
return {
valid: clientLevel >= required,
clientLevel: clientLevel,
requiredLevel: required,
reason: clientLevel >= required ? 'Security level sufficient' : 'Security level insufficient'
};
}
Compatibiliteitstests voor functies
async function testFeatureCompatibility(requiredFeatures) {
const clientInfo = await detectClientCapabilities();
if (!clientInfo) {
return { compatible: false, reason: 'Could not detect client features' };
}
const missingFeatures = requiredFeatures.filter(
feature => !clientInfo.features.includes(feature)
);
return {
compatible: missingFeatures.length === 0,
supportedFeatures: clientInfo.features,
missingFeatures: missingFeatures,
requiredFeatures: requiredFeatures
};
}
Implementatie van licentieserver
Clientgegevens gebruiken voor licentiebeslissingen
public class ClientInfoBasedLicenseHandler
{
public LicenseResponse GenerateLicense(LicenseRequest request)
{
var clientInfo = ExtractClientInfo(request.Challenge);
// Determine security level
var securityLevel = GetSecurityLevel(clientInfo);
// Check feature support
var supportedFeatures = GetSupportedFeatures(clientInfo);
// Build license based on client capabilities
var license = new LicenseBuilder()
.WithSecurityLevel(securityLevel)
.WithFeatures(supportedFeatures)
.WithOutputProtections(GetOutputProtections(securityLevel))
.Build();
return new LicenseResponse(license);
}
private SecurityLevel GetSecurityLevel(ClientInfo clientInfo)
{
switch (clientInfo.DeviceCertificate.SecurityLevel)
{
case 3000:
return SecurityLevel.SL3000;
case 2000:
return SecurityLevel.SL2000;
default:
return SecurityLevel.SL150;
}
}
private List<string> GetSupportedFeatures(ClientInfo clientInfo)
{
var features = new List<string>();
if (clientInfo.SupportedFeatures.Contains("PlayReady3Features"))
{
features.Add("AdvancedOutputProtection");
features.Add("SecureStop");
}
if (clientInfo.SupportedFeatures.Contains("SecureClock"))
{
features.Add("AntiRollback");
}
return features;
}
}
licentielogica voor Platform-Specific
public OutputProtectionLevels DetermineOutputProtections(ClientInfo clientInfo)
{
var protections = new OutputProtectionLevels();
// Adjust based on platform
switch (clientInfo.Platform.ToLower())
{
case "windowsonx86":
case "windowsonx64":
protections.CompressedDigitalVideo = 270;
protections.UncompressedDigitalVideo = 270;
break;
case "oem":
// Custom OEM device - check manufacturer
if (IsHighSecurityOEM(clientInfo.ManufacturerName))
{
protections.CompressedDigitalVideo = 270;
protections.UncompressedDigitalVideo = 270;
}
else
{
protections.CompressedDigitalVideo = 200;
protections.UncompressedDigitalVideo = 200;
}
break;
default:
// Conservative defaults for unknown platforms
protections.CompressedDigitalVideo = 150;
protections.UncompressedDigitalVideo = 150;
break;
}
return protections;
}
Analyse van clientgegevens
Analyse van Windows-platform
Kenmerken van Windows 10 Edge-client:
- Perron:
WindowsOnX86 - Beveiligingsniveau:
2000(SL2000) - Robuustheidsversie: Hardwarespecifieke waarde
- Certificaatketen: door Microsoft uitgegeven certificaten
- Functies: Standard PlayReady 3.0-functieset
OEM-apparaatanalyse
Aangepaste OEM-clientkenmerken:
- Perron:
OEM - Beveiligingsniveau:
3000(SL3000) - Fabrikant: Aangepaste OEM-naam
- Certificaatketen: OEM + Microsoft-certificaten
- Functies: Geavanceerde PlayReady 3.0+ functies
Beste praktijken
Gebruik van clientgegevens
- Validatie op beveiligingsniveau : controleren of de client voldoet aan de vereisten voor inhoudsbeveiliging
- Functiedetectie : licentie aanpassen op basis van ondersteunde functies
- Platformoptimalisatie - Instellingen optimaliseren voor specifieke platforms
- Certificaatvalidatie - Integriteit van certificaatketen controleren
- Mogelijkheidskoppeling : inhoudsvereisten vergelijken met clientmogelijkheden
Strategie voor het genereren van licenties
- Conservatieve standaardinstellingen - Veilige standaardinstellingen gebruiken voor onbekende clients
- Progressive Enhancement - Functies toevoegen op basis van clientmogelijkheden
- Beveiliging eerst : prioriteit geven aan beveiliging boven functionaliteit
- Platformbewustzijn : platformspecifieke beperkingen overwegen
- Toekomstige compatibiliteit : ontwerp voor compatibiliteit met doorstuur
Verwante documentatie
- PlayReady Test Server-service - Belangrijkste testserverfunctionaliteit
- Syntaxis van queryreeks - Verwijzing naar parametersyntaxis
- Uitvoerbeveiliging testen - Uitvoerbeveiliging testen
- PlayReady-testservers - Volledige serverdocumentatie