Partilhar via


Testando informações do cliente

Visão geral

O PlayReady Test Server inclui um recurso especial clientinfo que reflete as informações disponíveis para o servidor de licenças a partir 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ças e criem uma lógica de geração de licença apropriada com base nos recursos do cliente.

Recurso de 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 amostra

O recurso de informações do cliente processa solicitações padrão de aquisição de licença 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>

Exemplo de resposta: Windows 10 Edge Browser

Para um desafio lançado 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=

Exemplo de resposta: Cliente PlayReady 3.2 SL3000

Para um desafio lançado por um cliente SL3000 baseado em 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ção do cliente

Informação Básica 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
Tempo do Cliente Hora do sistema do cliente 10/01/2017 2:00:00 PM
Plataforma Identificador da plataforma do cliente WindowsOnX86, OEM

Funcionalidades Suportadas

Característica Descrição
Recetor O cliente pode receber e desencriptar conteúdo
Transmissor Cliente pode transmitir conteúdo para outros dispositivos
AntiRollbackClock O cliente suporta a funcionalidade de relógio anti-reversão
RevogaçõesListas O cliente suporta o processamento da lista de revogação
PlayReady3Features O cliente suporta recursos PlayReady 3.0+
Relógio Seguro O cliente suporta a funcionalidade de relógio seguro

Informações sobre o 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 do dispositivo
  • ModelName - Identificador do modelo do dispositivo
  • ModelNumber - Versão específica do modelo
  • DigestValue - Impressão digital do certificado
  • Plataforma - Tipo de plataforma de hardware

Cenários de teste

Deteçã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 do 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'
    };
}

Testes 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ças

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

Platform-Specific Lógica de Licença

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ção do Cliente

Análise da plataforma Windows

Características do cliente de borda do Windows 10:

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

Análise de dispositivos OEM

Características personalizadas do cliente OEM:

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

Melhores práticas

Uso das informações do cliente

  1. Validação de nível de segurança - Verifique se o cliente atende aos requisitos de segurança de conteúdo
  2. Deteção de recursos - Ajuste a licença com base nos recursos suportados
  3. Otimização de plataforma - Otimize as configurações para plataformas específicas
  4. Validação de certificado - Verificar a integridade da cadeia de certificados
  5. Correspondência de recursos - Adequar os requisitos de conteúdo aos recursos do cliente

Estratégia de Geração de Licenças

  1. Padrões conservadores - Use padrões seguros para clientes desconhecidos
  2. Aprimoramento progressivo - Adicione recursos com base nos recursos do cliente
  3. Segurança em primeiro lugar - Priorize a segurança sobre a funcionalidade
  4. Reconhecimento da plataforma - Considere as limitações específicas da plataforma
  5. Compatibilidade futura - Design para compatibilidade futura

Recursos de suporte

Consultas de negócios

Consultas de operações

Suporte Técnico

Informação de Formação


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