Compartir a través de


Prueba de la información del cliente

Información general

El servidor de pruebas de PlayReady incluye una característica especial clientinfo que refleja la información disponible para el servidor de licencias del desafío de solicitud de licencia generado por el cliente. Esta característica permite a los desarrolladores examinar fácilmente qué información de cliente se transmite a los servidores de licencias y crear la lógica de generación de licencias adecuada en función de las funcionalidades del cliente.

Característica de información de cliente

Use el parámetro para inspeccionar la clientinfo información de cliente enviada en las solicitudes de licencia:

Dirección URL del servidor de prueba:

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

Acción SOAP:

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

Estructura de solicitud de ejemplo

La característica de información de cliente procesa solicitudes estándar de adquisición de licencias de PlayReady y devuelve información detallada sobre el cliente en lugar de una licencia. Esta es la estructura de una solicitud 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>

Respuesta de ejemplo: Explorador Windows 10 Edge

Para un desafío emitido por Microsoft Edge en 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=

Respuesta de ejemplo: Cliente de PlayReady 3.2 SL3000

Para un desafío emitido por un cliente SL3000 basado en 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 información de cliente

Información básica del cliente

Campo Descripción Valores de ejemplo
Versión del cliente Versión del cliente de PlayReady 10.0.16384.10011, 3.2.0.4242
Hora del cliente Hora del sistema cliente 10/01/2017 2:00:00 PM
Plataforma Identificador de la plataforma cliente WindowsOnX86, OEM

Características admitidas

Característica Descripción
receptor de El cliente puede recibir y descifrar contenido
Transmisor El cliente puede transmitir contenido a otros dispositivos
AntiRollbackClock El cliente admite la funcionalidad anti-reversión del reloj
Lista de revocación El cliente admite el procesamiento de listas de revocación
PlayReady3Features El cliente admite características de PlayReady 3.0+
SecureClock El cliente admite la funcionalidad de reloj segura

Información de nivel de seguridad

Nivel de seguridad Descripción Casos de uso
SL150 Protección basada en software Protección básica del contenido
SL2000 Protección basada en hardware Contenido Premium estándar
SL3000 Módulo de seguridad de hardware Contenido Ultra-Premium

Información de la cadena de certificados

Cada certificado de la cadena proporciona:

  • ManufacturerName : fabricante del dispositivo
  • ModelName : identificador del modelo de dispositivo
  • ModelNumber : versión específica del modelo
  • DigestValue : huella digital del certificado
  • Plataforma : tipo de plataforma de hardware

Escenarios de prueba

Detección de funcionalidades de 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;
    }
}

Validación de nivel de seguridad

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

Pruebas de compatibilidad de características

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

Implementación del servidor de licencias

Uso de la información de cliente para las decisiones de licencia

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 licencia de 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álisis de información de cliente

Análisis de la plataforma Windows

Características del cliente de Windows 10 Edge:

  • Plataforma: WindowsOnX86
  • Nivel de seguridad: 2000 (SL2000)
  • Versión de solidez: valor específico del hardware
  • Cadena de certificados: certificados emitidos por Microsoft
  • Características: Conjunto de características de PlayReady 3.0 estándar

Análisis de dispositivos OEM

Características de cliente OEM personalizadas:

  • Plataforma: OEM
  • Nivel de seguridad: 3000 (SL3000)
  • Fabricante: nombre de OEM personalizado
  • Cadena de certificados: OEM + certificados de Microsoft
  • Características: Características avanzadas de PlayReady 3.0+

Procedimientos recomendados

Uso de información de cliente

  1. Validación de nivel de seguridad: compruebe que el cliente cumple los requisitos de seguridad de contenido
  2. Detección de características: ajuste la licencia en función de las características admitidas
  3. Optimización de la plataforma: optimización de la configuración para plataformas específicas
  4. Validación de certificados: comprobación de la integridad de la cadena de certificados
  5. Coincidencia de funcionalidades : coincidencia de los requisitos de contenido con las funcionalidades del cliente

Estrategia de generación de licencias

  1. Valores predeterminados conservadores : uso de valores predeterminados seguros para clientes desconocidos
  2. Mejora progresiva : adición de características basadas en las funcionalidades de cliente
  3. Seguridad en primer lugar : priorizar la seguridad sobre la funcionalidad
  4. Reconocimiento de la plataforma : considere las limitaciones específicas de la plataforma
  5. Compatibilidad futura : diseño para la compatibilidad con reenvíos

Recursos de soporte técnico

Consultas empresariales

Consultas de operaciones

Soporte técnico

Información de entrenamiento


© Microsoft Corporation. Todos los derechos reservados. Marcas | Privacidad