Delen via


Secure Stop Server for PlayReady Test Environment

Overzicht

De PlayReady Secure Stop Server biedt een testeindpunt voor het valideren van de secure stop-functionaliteit in PlayReady-implementaties. Secure Stop zorgt ervoor dat traceringsgegevens van mediaverbruik veilig worden verzonden van clients naar inhoudsproviders, waardoor nauwkeurige gebruiksbewaking en nalevingsrapportage mogelijk zijn.

Service-eindpunt

De Secure Stop-testserver is beschikbaar op:

https://playready.directtaps.net/pr/svc/securestop.asmx

Secure Stop Protocol

Protocoloverzicht

Met Secure Stop kunnen clients gegevens over sessie-einden veilig rapporteren:

  1. De afspeelsessie van de client wordt gestart
  2. Licentie specificeert vereisten voor veilige stop
  3. Client genereert beveiligde stopgegevens tijdens het afspelen
  4. Aan het sessie-einde verzendt de client een beveiligd stoprapport naar de server
  5. Server valideert en bevestigt ontvangstbevestiging

Berichtenstroom

Client                    License Server           Secure Stop Server
  |                            |                           |
  |-- License Request -------->|                           |
  |<-- License Response -------|                           |
  |    (with SecureStop URL)   |                           |
  |                            |                           |
  |    [Playback Session]      |                           |
  |                            |                           |
  |-- Secure Stop Report ------|-------------------------->|
  |<-- Acknowledgment ---------|---------------------------|

Serverconfiguratie

Vereisten voor veilige stop

Veilige stop configureren in licentieantwoorden:

{
  "licenseType": "persistent",
  "keyId": "key-id-guid",
  "secureStop": {
    "required": true,
    "serverUrl": "https://playready.directtaps.net/pr/svc/securestop.asmx",
    "reportingFrequency": "session-end",
    "customData": {
      "sessionId": "unique-session-identifier",
      "contentId": "content-identifier"
    }
  }
}

Configuratie van serverreactie

De server ondersteunt verschillende antwoordmodi voor het testen:

{
  "responseMode": "success|failure|timeout|partial",
  "acknowledgmentDelay": 0,
  "customData": {
    "testScenario": "normal-operation"
  }
}

API-eindpunten

Secure Stop-rapport verzenden

Eindpunt:POST /pr/svc/securestop.asmx/SubmitReport

Aanvraagindeling:

POST /pr/svc/securestop.asmx/SubmitReport HTTP/1.1
Host: playready.directtaps.net
Content-Type: application/octet-stream

[Secure Stop Report Data - Binary Format]

Antwoordindeling:

HTTP/1.1 200 OK
Content-Type: application/octet-stream

[Secure Stop Acknowledgment - Binary Format]

Status van queryrapport

Eindpunt:GET /pr/svc/securestop.asmx/QueryStatus

Aanvraagindeling:

GET /pr/svc/securestop.asmx/QueryStatus?sessionId=SESSION_ID HTTP/1.1
Host: playready.directtaps.net

Antwoordindeling:

{
  "sessionId": "session-identifier",
  "status": "pending|received|processed|error",
  "timestamp": "2024-01-15T10:30:00Z",
  "reportSize": 1024,
  "processingTime": 50
}

Testscenario's

Eenvoudige veilige stop testen

Test de normale veilige stopstroom:

async function testBasicSecureStop() {
    // 1. Acquire license with secure stop requirement
    const license = await acquireLicense({
        keyId: 'test-key-id',
        secureStopRequired: true,
        secureStopUrl: 'https://playready.directtaps.net/pr/svc/securestop.asmx'
    });
    
    // 2. Simulate playback session
    const session = await startPlaybackSession(license);
    
    // 3. End session and generate secure stop report
    const secureStopReport = await endSessionWithSecureStop(session);
    
    // 4. Submit secure stop report
    const response = await submitSecureStopReport(secureStopReport);
    
    return response.acknowledged;
}

Foutafhandeling testen

Testfoutscenario's:

async function testSecureStopErrorHandling() {
    const testCases = [
        {
            name: 'Invalid Report Format',
            data: generateInvalidReport(),
            expectedError: 'INVALID_FORMAT'
        },
        {
            name: 'Expired Session',
            data: generateExpiredSessionReport(),
            expectedError: 'SESSION_EXPIRED'
        },
        {
            name: 'Duplicate Report',
            data: generateDuplicateReport(),
            expectedError: 'DUPLICATE_REPORT'
        }
    ];
    
    const results = [];
    for (const testCase of testCases) {
        try {
            await submitSecureStopReport(testCase.data);
            results.push({ test: testCase.name, result: 'UNEXPECTED_SUCCESS' });
        } catch (error) {
            results.push({ 
                test: testCase.name, 
                result: error.code === testCase.expectedError ? 'PASS' : 'FAIL' 
            });
        }
    }
    
    return results;
}

Prestatietests

Prestaties van beveiligde stop testen:

async function testSecureStopPerformance() {
    const concurrentReports = 10;
    const reports = [];
    
    // Generate multiple secure stop reports
    for (let i = 0; i < concurrentReports; i++) {
        reports.push(generateSecureStopReport(`session-${i}`));
    }
    
    // Submit reports concurrently
    const startTime = Date.now();
    const promises = reports.map(report => submitSecureStopReport(report));
    const results = await Promise.allSettled(promises);
    const endTime = Date.now();
    
    return {
        totalTime: endTime - startTime,
        averageTime: (endTime - startTime) / concurrentReports,
        successCount: results.filter(r => r.status === 'fulfilled').length,
        errorCount: results.filter(r => r.status === 'rejected').length
    };
}

Clientintegratie

JavaScript-implementatie

class SecureStopClient {
    constructor(serverUrl) {
        this.serverUrl = serverUrl;
    }
    
    async submitReport(secureStopData) {
        const response = await fetch(`${this.serverUrl}/SubmitReport`, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/octet-stream'
            },
            body: secureStopData
        });
        
        if (!response.ok) {
            throw new Error(`Secure stop submission failed: ${response.status}`);
        }
        
        return await response.arrayBuffer();
    }
    
    async queryStatus(sessionId) {
        const response = await fetch(`${this.serverUrl}/QueryStatus?sessionId=${sessionId}`);
        
        if (!response.ok) {
            throw new Error(`Status query failed: ${response.status}`);
        }
        
        return await response.json();
    }
}

// Usage
const secureStopClient = new SecureStopClient('https://playready.directtaps.net/pr/svc/securestop.asmx');

C#-implementatie

public class SecureStopClient
{
    private readonly HttpClient httpClient;
    private readonly string serverUrl;
    
    public SecureStopClient(string serverUrl)
    {
        this.serverUrl = serverUrl;
        this.httpClient = new HttpClient();
    }
    
    public async Task<byte[]> SubmitReportAsync(byte[] secureStopData)
    {
        var content = new ByteArrayContent(secureStopData);
        content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
        
        var response = await httpClient.PostAsync($"{serverUrl}/SubmitReport", content);
        response.EnsureSuccessStatusCode();
        
        return await response.Content.ReadAsByteArrayAsync();
    }
    
    public async Task<SecureStopStatus> QueryStatusAsync(string sessionId)
    {
        var response = await httpClient.GetAsync($"{serverUrl}/QueryStatus?sessionId={sessionId}");
        response.EnsureSuccessStatusCode();
        
        var json = await response.Content.ReadAsStringAsync();
        return JsonConvert.DeserializeObject<SecureStopStatus>(json);
    }
}

Gegevensindeling

Secure Stop-rapportstructuur

Het rapport Secure Stop bevat:

  • Sessie-id: unieke sessie-id
  • Inhouds-id: inhoud die wordt gebruikt
  • Gebruiksgegevens: Afspeelduur, kwaliteit, enzovoort.
  • Apparaatgegevens: Details van clientapparaat
  • Tijdstempelinformatie: begin-/eindtijden van sessie
  • Digitale handtekening: cryptografisch bewijs van echtheid

Rapportvalidatie

De server valideert rapporten voor:

  • Opmaakintegriteit: binaire structuur corrigeren
  • Digitale handtekening: cryptografische authenticiteit
  • Geldigheid van sessie: Geldige sessieparameters
  • Nauwkeurigheid van tijdstempel: Redelijke tijdwaarden
  • Dubbele detectie: preventie van dubbele inzendingen

Geavanceerde functies

Ondersteuning voor aangepaste gegevens

Aangepaste gegevens opnemen in veilige stoprapporten:

{
  "customData": {
    "contentProvider": "test-provider",
    "userAgent": "PlayReady-Client/4.0",
    "playbackQuality": "HD",
    "geolocation": "US-WEST"
  }
}

Batchrapportage

Verzend meerdere beveiligde stoprapporten in één aanvraag:

async function submitBatchReports(reports) {
    const batchData = {
        reports: reports,
        batchId: generateBatchId(),
        timestamp: new Date().toISOString()
    };
    
    const response = await fetch(`${serverUrl}/SubmitBatch`, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify(batchData)
    });
    
    return await response.json();
}

Bewaking en analyse

Rapportanalyse

De testserver biedt analyse-eindpunten:

GET /pr/svc/securestop.asmx/Analytics?period=24h

Het antwoord bevat:

  • Totaal aantal ontvangen rapporten
  • Gemiddelde verwerkingstijd
  • Foutpercentages per type
  • Geografische distributie
  • Statistieken van clientversie

Gezondheidsmonitoring

Serverstatus bewaken:

async function checkSecureStopServerHealth() {
    const response = await fetch('https://playready.directtaps.net/pr/svc/securestop.asmx/Health');
    return await response.json();
}

Beste praktijken

Client-implementatie

  1. Betrouwbare levering: logica voor opnieuw proberen implementeren voor mislukte verzendingen
  2. Offlineondersteuning: Wachtrijrapporten wanneer het netwerk niet beschikbaar is
  3. Gegevensvalidatie: Rapportgegevens valideren voordat ze worden verzonden
  4. Foutafhandeling: serverfouten probleemloos verwerken
  5. Privacy: Gevoelige gegevens in rapporten beveiligen

Aanbevelingen testen

  1. Uitgebreide scenario's: normale en foutvoorwaarden testen
  2. Prestatietests: valideren onder belastingsomstandigheden
  3. Netwerkvoorwaarden: Testen met verschillende netwerkscenario's
  4. Gegevensintegriteit: de nauwkeurigheid van rapportgegevens controleren
  5. Beveiligingstests: cryptografische onderdelen valideren

Ondersteuning en probleemoplossing

Voor problemen met secure stop-functionaliteit:

  1. Controleren of secure stop is ingeschakeld in licentie
  2. Rapportindeling en -structuur controleren
  3. Netwerkconnectiviteit met server valideren
  4. Serverreactie controleren op foutdetails
  5. Test eerst met vereenvoudigde scenario's

Algemene problemen:

  • Fouten in rapportindeling: ongeldige binaire indeling of structuur
  • Handtekeningvalidatie: problemen met cryptografische handtekeningen
  • Netwerktime-outs: problemen met serverconnectiviteit
  • Verloop van sessie: rapporten zijn te laat verzonden

Raadpleeg de belangrijkste documentatie voor PlayReady-testservers voor aanvullende ondersteuning.