Udostępnij przez


Testowanie informacji o kliencie

Przegląd

Serwer Test PlayReady zawiera specjalną clientinfo funkcję, która odzwierciedla informacje dostępne dla serwera licencji z żądania licencji wygenerowanego przez klienta. Ta funkcja umożliwia deweloperom łatwe badanie informacji o klientach przesyłanych do serwerów licencji i tworzenie odpowiedniej logiki generowania licencji na podstawie możliwości klienta.

Funkcja informacji o kliencie

Użyj parametru , clientinfo aby sprawdzić informacje o kliencie wysyłane w żądaniach licencji:

Adres URL serwera testowego:

http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(msg:clientinfo)

Akcja protokołu SOAP:

http://schemas.microsoft.com/DRM/2007/03/protocols/AcquireLicense

Przykładowa struktura żądań

Funkcja informacji o kliencie przetwarza standardowe żądania pozyskiwania licencji PlayReady i zwraca szczegółowe informacje o kliencie zamiast licencji. Oto struktura typowego żądania:

<?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>http://test.playready.microsoft.com/service/rightsmanager.asmx</LA_URL>
                                    <LUI_URL>http://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>

Przykładowa odpowiedź: Przeglądarka Windows 10 Edge

W przypadku wyzwania wydanego przez przeglądarkę Microsoft Edge w systemie 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=

Przykładowa odpowiedź: Klient PlayReady 3.2 SL3000

W przypadku wyzwania wydanego przez klienta SL3000 opartego na technologii PlayReady 3.2:

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=

Elementy informacji o kliencie

Podstawowe informacje o kliencie

(No changes needed) Opis Przykładowe wartości
Wersja klienta Wersja klienta PlayReady 10.0.16384.10011, 3.2.0.4242
Czas klienta Czas systemu klienta 10/01/2017 2:00:00 PM
Platforma Identyfikator platformy klienta WindowsOnX86, OEM

Obsługiwane funkcje

Funkcja Opis
odbiornik Klient może odbierać i odszyfrowywać zawartość
Nadajnik Klient może przesyłać zawartość do innych urządzeń
AntiRollbackClock Klient obsługuje funkcję zegara wycofywania
Listy odwołania Klient obsługuje przetwarzanie listy odwołania
PlayReady3Features Klient obsługuje funkcje PlayReady 3.0+
SecureClock Klient obsługuje funkcję bezpiecznego zegara

Informacje o poziomie zabezpieczeń

Poziom zabezpieczeń Opis Przypadki użycia
SL150 Ochrona oparta na oprogramowaniu Podstawowa ochrona zawartości
SL2000 Ochrona sprzętowa Zawartość w warstwie Standardowa Premium
SL3000 Sprzętowy moduł zabezpieczeń Zawartość w warstwie Ultra-Premium

Informacje o łańcuchu certyfikatów

Każdy certyfikat w łańcuchu zapewnia:

  • ManufacturerName — producent urządzenia
  • ModelName — identyfikator modelu urządzenia
  • ModelNumber — określona wersja modelu
  • DigestValue — odcisk palca certyfikatu
  • Platforma — typ platformy sprzętowej

Scenariusze testowania

Wykrywanie możliwości klienta

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;
    }
}

Walidacja poziomu zabezpieczeń

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'
    };
}

Testowanie zgodności funkcji

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
    };
}

Implementacja serwera licencji

Używanie informacji o kliencie do podejmowania decyzji dotyczących licencji

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;
    }
}

logika licencji 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;
}

Analiza informacji o kliencie

Analiza platformy systemu Windows

Właściwości klienta przeglądarki Windows 10 Edge:

  • Podest: WindowsOnX86
  • Poziom zabezpieczeń: 2000 (SL2000)
  • Wersja niezawodności: wartość specyficzna dla sprzętu
  • Łańcuch certyfikatów: certyfikaty wystawione przez firmę Microsoft
  • Funkcje: standardowy zestaw funkcji PlayReady 3.0

Analiza urządzenia OEM

Niestandardowe cechy klienta OEM:

  • Podest: OEM
  • Poziom zabezpieczeń: 3000 (SL3000)
  • Producent: niestandardowa nazwa producenta OEM
  • Łańcuch certyfikatów: OEM + certyfikaty firmy Microsoft
  • Funkcje: zaawansowane funkcje PlayReady 3.0+

Najlepsze praktyki

Użycie informacji o kliencie

  1. Weryfikacja poziomu zabezpieczeń — sprawdzanie, czy klient spełnia wymagania dotyczące zabezpieczeń zawartości
  2. Wykrywanie funkcji — dostosowywanie licencji na podstawie obsługiwanych funkcji
  3. Optymalizacja platformy — optymalizowanie ustawień dla określonych platform
  4. Weryfikacja certyfikatu — weryfikowanie integralności łańcucha certyfikatów
  5. Dopasowywanie możliwości — dopasowywanie wymagań dotyczących zawartości do możliwości klienta

Strategia generowania licencji

  1. Domyślne konserwatystów — używaj bezpiecznych wartości domyślnych dla nieznanych klientów
  2. Ulepszenia progresywne — dodawanie funkcji opartych na możliwościach klienta
  3. Najpierw zabezpieczenia — określanie priorytetów zabezpieczeń za pośrednictwem funkcji
  4. Świadomość platformy — rozważ ograniczenia specyficzne dla platformy
  5. Zgodność w przyszłości — projektowanie pod kątem zgodności z usługą Forward

Zasoby pomocy technicznej

Zapytania biznesowe

Zapytania operacji

Pomocy technicznej

Informacje o szkoleniu


© Microsoft Corporation. Wszelkie prawa zastrzeżone. Znakami towarowymi | Prywatność