2016-12-16 5 views
0

Une idée pour injecter des en-têtes OAuth dans PlayReadyLicenseAcquisitionServiceRequest afin qu'ils soient inclus dans BeginServiceRequest()? Je ne peux pas tirer parti de la chaîne de requête de l'URL de la licence, ou incorporer le jeton OAuth dans le corps; il doit être dans l'en-tête de la requête http de la récupération de licence.OAuth dans la récupération de licence PlayReady dans UWP

+0

Pouvez-vous me dire quelle version de OAuth vous utilisent? –

+0

@MikeMa. C'est OAuth 1.0, et j'ai l'en-tête déjà préparé mais je n'arrive pas à comprendre comment l'injecter dans la demande de licence. À moins qu'il y ait une approche complètement différente de OAuth, il me manque .. – Sean

Répondre

0

Je trouve un code grand exemple ici:

https://www.eyecatch.no/blog/using-playready-and-smooth-streaming-in-a-windows-10-uwp-app/

mais c'était la sauce magique ci-dessous (avec mon plus d'en-tête):

public static async Task<bool> RequestLicenseManual(PlayReadyLicenseAcquisitionServiceRequest request, params KeyValuePair<string, object>[] headers) 
    { 
     Debug.WriteLine("ProtectionManager PlayReady Manual License Request in progress"); 

     try 
     { 
      var r = request.GenerateManualEnablingChallenge(); 

      var content = new ByteArrayContent(r.GetMessageBody()); 

      foreach (var header in r.MessageHeaders.Where(x => x.Value != null)) 
      { 
       if (header.Key.Equals("Content-Type", StringComparison.OrdinalIgnoreCase)) 
       { 
        content.Headers.ContentType = MediaTypeHeaderValue.Parse(header.Value.ToString()); 
       } 
       else 
       { 
        content.Headers.Add(header.Key, header.Value.ToString()); 
       } 
      } 

      var msg = new HttpRequestMessage(HttpMethod.Post, r.Uri) { Content = content }; 

      foreach (var header in headers) 
      { 
       msg.Headers.Add(header.Key, header.Value.ToString()); 
      } 

      Debug.WriteLine("Requesting license from {0} with custom data {1}", msg.RequestUri, await msg.Content.ReadAsStringAsync()); 

      var client = new HttpClient(); 
      var response = await client.SendAsync(msg); 

      if (response.IsSuccessStatusCode) 
      { 
       request.ProcessManualEnablingResponse(await response.Content.ReadAsByteArrayAsync()); 
      } 
      else 
      { 
       Debug.WriteLine("ProtectionManager PlayReady License Request failed: " + await response.Content.ReadAsStringAsync()); 

       return false; 
      } 
     } 
     catch (Exception ex) 
     { 
      Debug.WriteLine("ProtectionManager PlayReady License Request failed: " + ex.Message); 

      return false; 
     } 

     Debug.WriteLine("ProtectionManager PlayReady License Request successfull"); 

     return true; 
    }