2010-03-04 22 views
7

Sto utilizzando VSTS 2008 + C# + .Net 3.5 + Silverlight 3.0 + ASP.Net per sviluppare un'applicazione Silverlight (un lettore multimediale video) nel browser e la funzione è semplice, basta utilizzare MediaElement per riprodurre un file video remoto.file video download issue

Il server remoto è il controllo di limitazione della velocità in bit di Windows Media Server 2008 + IIS 7.0 + IIS.

Poiché l'URL del supporto della richiesta può essere rilevato (ad esempio dallo sniffer del traffico) e desidero sapere come impedire il download direttamente dall'URL? Voglio che l'utente finale utilizzi la mia applicazione Silverlight media player nel browser per riprodurre il file, impedendo loro di scaricarlo direttamente in locale. Qualunque soluzione facile e veloce o codice/documenti di riferimento?

+0

Come si forma l'URL del supporto? È un URL che punta direttamente al file multimediale in una cartella? O stai usando un qualche tipo di gestore HTTP per servire i file multimediali? –

+0

Non so se questo ti sarà d'aiuto o meno, ma Microsoft ha open source il framework multimediale usato per le Olimpiadi: http://smf.codeplex.com/ –

risposta

1

Qui potrei stare aggrappato a cannucce ma per quanto riguarda l'utilizzo di un gestore HTTP per intercettare le richieste all'URL multimediale: quando il gestore HTTP rileva una richiesta, controlla un'intestazione HTTP univoca nella richiesta, potrebbe essere codificata nell'applicazione del lettore multimediale in modo che la richiesta URL sia accompagnata dall'intestazione di sicurezza appropriata e, a meno che non sia presente l'intestazione HTTP, tutte le risposte vengono bloccate. So che non ci sono specifiche del codice qui ma è comunque un'idea.

1
  1. Utilizzare la ASP.NET Authentication Service per autenticare/autorizzare l'utente
  2. mettere il video in una cartella in cui il web.config impedisce l'accesso non autenticato ai contenuti

Se non mi sbaglio (e per essere sincero, c'è una possibilità come non ho mai provato questo particolare scenario) ... che proteggerà i tuoi contenuti video, consentendo al tempo stesso all'utente autorizzato di accedervi tramite silverlight.

+0

Penso che non sia interessato ad autenticare l'utente fornendo un nome utente-pasword. La sua domanda è molto semplice.Una normale pagina Web ha un'applicazione Silverlight. L'applicazione richiede una risorsa video da qualche posizione xyz. Potrebbe essere una sottocartella sotto la sua radice. Vuole che l'utente impedisca di accedervi direttamente. Poiché l'applicazione Silverlight lo richiede dal client, non è possibile inserirlo in alcune cartelle app_data o bin. – Manjoor

+0

ciò che gli interessa è l'autorizzazione delle richieste che provengono dall'applicazione Silverlight. Dal momento che è solo un client come qualsiasi altro, potrebbe farlo accedere utilizzando il servizio di autenticazione con un nome utente e una password noti che tutti gli utenti dell'applicazione Silverlight condividono. In questo modo, se un utente tenta di accedervi direttamente tramite l'URL, gli verrà negato –

0

Ciò che Joel ha suggerito potrebbe avere senso. Soprattutto se l'applicazione web di hosting di Silverlight era in esecuzione in un pool di app che funzionava con una particolare identità (ad esempio "svcMyVideoApp"). Quindi potresti farlo dove solo questa identità potrebbe accedere alla cartella dei contenuti. Imposta tutte le altre richieste per il contenuto da negare (tranne forse il tuo :))

0

Se non sbaglio ... se impostato correttamente, i servizi di supporto di IIS 7 non dovrebbero nemmeno servire i file non più di quello dovrebbe servire una pagina grezza "aspx" non elaborata.

Ho giocato solo un po 'con alcuni mesi indietro, ma quando ho installato il plugin Media per IIS 7, non serviva i file multimediali grezzi e potevo accedervi solo tramite un'interfaccia Silverlight. Ho usato Expression Studio per creare la mia pagina di Silverlight Viewer e l'ho codificata per "smooth streaming".

0

Un modo semplice sarebbe aggiungere un gestore per catturare la richiesta come @pb detto. Non so se inviare intestazioni sia la cosa giusta o meno. Un modo semplice sarebbe per controllare solo se la richiesta ha un referrer ..

String.IsNullOrEmpty (context.Request.ServerVariables [ "HTTP_REFERER"])

o avrete bisogno di autenticazione e di inviare il cookie di autenticazione con la richiesta.