Compartilhar via


Testando informações do cliente

Visão geral

O Servidor de Teste do PlayReady inclui um recurso especial clientinfo que reflete as informações disponíveis para o servidor de licença do desafio de solicitação de licença gerado pelo cliente. Esse recurso permite que os desenvolvedores examinem facilmente quais informações do cliente são transmitidas aos servidores de licença e criem a lógica de geração de licença apropriada com base nos recursos do cliente.

Recurso informações do cliente

Use o parâmetro para inspecionar as clientinfo informações do cliente enviadas em solicitações de licença:

URL do Servidor de Teste:

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

Ação SOAP:

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

Estrutura de solicitação de exemplo

O recurso de informações do cliente processa solicitações padrão de aquisição de licença do PlayReady e retorna informações detalhadas sobre o cliente em vez de uma licença. Aqui está a estrutura de uma solicitação típica:

<?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>

Resposta de exemplo: Navegador do Windows 10 Edge

Para um desafio emitido pelo Microsoft Edge no 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=

Resposta de exemplo: PlayReady 3.2 SL3000 Client

Para um desafio emitido por um cliente SL3000 baseado no 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=

Elementos de informações do cliente

Informações básicas do cliente

Campo Descrição Valores de exemplo
Versão do cliente Versão do cliente PlayReady 10.0.16384.10011, 3.2.0.4242
Hora do cliente Hora do sistema cliente 10/01/2017 2:00:00 PM
Plataforma Identificador da plataforma do cliente WindowsOnX86, OEM

Funcionalidades Suportadas

Característica Descrição
do Receptor O cliente pode receber e descriptografar conteúdo
Transmissor O cliente pode transmitir conteúdo para outros dispositivos
AntiRollbackClock O cliente dá suporte à funcionalidade de relógio anti-reversão
RevocationLists O cliente dá suporte ao processamento de lista de revogação
PlayReady3Features O cliente dá suporte a recursos do PlayReady 3.0+
SecureClock O cliente dá suporte à funcionalidade de relógio seguro

Informações de nível de segurança

Nível de segurança Descrição Casos de uso
SL150 Proteção baseada em software Proteção básica de conteúdo
SL2000 Proteção baseada em hardware Conteúdo premium padrão
SL3000 Módulo de segurança de hardware Conteúdo ultra premium

Informações da cadeia de certificados

Cada certificado na cadeia fornece:

  • ManufacturerName – Fabricante de dispositivos
  • ModelName – Identificador de modelo de dispositivo
  • ModelNumber – Versão específica do modelo
  • DigestValue – Impressão digital do certificado
  • Plataforma – Tipo de plataforma de hardware

Cenários de teste

Detecção de capacidade do cliente

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

Validação em nível de segurança

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

Teste de compatibilidade de recursos

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

Implementação do servidor de licença

Usando informações do cliente para decisões de licença

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

Lógica de licença do 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;
}

Análise de informações do cliente

Análise da Plataforma Windows

Características do cliente do Windows 10 Edge:

  • Plataforma: WindowsOnX86
  • Nível de segurança: 2000 (SL2000)
  • Versão de robustez: valor específico do hardware
  • Cadeia de certificados: certificados emitidos pela Microsoft
  • Recursos: Conjunto de recursos do Standard PlayReady 3.0

Análise de dispositivo OEM

Características personalizadas do cliente OEM:

  • Plataforma: OEM
  • Nível de segurança: 3000 (SL3000)
  • Fabricante: nome OEM personalizado
  • Cadeia de certificados: certificados OEM + Microsoft
  • Recursos: Recursos avançados do PlayReady 3.0+

Práticas recomendadas

Uso de informações do cliente

  1. Validação em nível de segurança – Verificar se o cliente atende aos requisitos de segurança de conteúdo
  2. Detecção de Recursos – Ajustar a licença com base nos recursos com suporte
  3. Otimização da Plataforma – Otimizar configurações para plataformas específicas
  4. Validação de certificado – Verificar a integridade da cadeia de certificados
  5. Correspondência de recursos – corresponder aos requisitos de conteúdo com os recursos do cliente

Estratégia de geração de licença

  1. Padrões conservadores – Usar padrões seguros para clientes desconhecidos
  2. Aprimoramento Progressivo – Adicionar recursos com base nos recursos do cliente
  3. Segurança Primeiro – Priorizar a segurança sobre a funcionalidade
  4. Reconhecimento de plataforma – Considere limitações específicas da plataforma
  5. Compatibilidade futura – Design para compatibilidade futura

Recursos de suporte

Consultas comerciais

Consultas de operações

Suporte técnico

Informações de treinamento


© Microsoft Corporation. Todos os direitos reservados. Marcas comerciais | Privacidade