Uso della classe DRMAuthenticateEvent

Adobe AIR 1.0 e versioni successive

L'oggetto DRMAuthenticateEvent è inviato quando un oggetto NetStream tenta di riprodurre contenuto protetto che richiede credenziali utente per l'autenticazione prima della riproduzione.

Il gestore DRMAuthenticateEvent è responsabile della raccolta delle credenziali necessarie (nome utente, password e tipo) e di passare i valori al metodo NetStream.setDRMAuthenticationCredentials() per la convalida. Ogni applicazione AIR deve offrire un meccanismo per il recupero delle credenziali utente. Ad esempio, l'applicazione potrebbe fornire a un utente una semplice interfaccia utente per immettere i valori corrispondenti a nome utente e password, nonché un meccanismo di gestione e limitazione dei tentativi di autenticazione ripetuti.

Proprietà DRMAuthenticateEvent

La classe DRMAuthenticateEvent comprende le seguenti proprietà:

Proprietà

Descrizione

authenticationType

Indica se le credenziali fornite sono per l'autenticazione tramite Adobe Access (“drm”) o un proxy server (“proxy”). Ad esempio, l'opzione "proxy" consente all'applicazione di autenticarsi tramite un server proxy se richiesto per consentire agli utenti di accedere a Internet. A meno che non si utilizzi l'autenticazione anonima, dopo l'autenticazione tramite proxy, l'utente deve ancora autenticarsi tramite Adobe Access al fine di ottenere il voucher e riprodurre il contenuto. Potete utilizzare setDRMAuthenticationcredentials() una seconda volta, insieme all'opzione "drm", al fine di eseguire l'autenticazione tramite Adobe Access.

header

L'intestazione del file del contenuto crittografato fornito dal server. Contiene informazioni sul contesto del contenuto crittografato.

Questa stringa di intestazione può essere trasmessa all'applicazione Flash per consentire all'applicazione di costruire una finestra di dialogo per l'inserimento di nome utente e password. La stringa di intestazione può essere utilizzata come testo di istruzioni della finestra di dialogo. Ad esempio, l'intestazione potrebbe essere "Inserite il nome utente e la password".

netstream

L'oggetto NetStream che ha iniziato questo evento.

passwordPrompt

Una richiesta di una credenziale password, fornita dal server. La stringa può comprende l'istruzione per il tipo di password necessaria.

urlPrompt

Una richiesta di una stringa URL, fornita dal server. La stringa che fornisce il percorso in cui vengono inviati il nome utente e password.

usernamePrompt

Una richiesta di una credenziale nome utente, fornita dal server. La stringa può comprende l'istruzione per il tipo di nome utente necessario. Ad esempio, un fornitore di contenuti può richiedere un indirizzo e-mail per il nome utente.

Le stringhe precedentemente citate vengono fornite solo dai server FMRMS. Adobe Access Server non usa tali stringhe.

Creazione di un gestore DRMAuthenticateEvent

L'esempio seguente crea un gestore eventi che passa una serie di credenziali di autenticazione codificate per l'oggetto NetStream che ha originato l'evento (non è compreso il codice che riproduce il video e assicura l'avvenuta connessione allo streaming video).

var connection:NetConnection = new NetConnection(); 
connection.connect(null); 
 
var videoStream:NetStream = new NetStream(connection); 
 
videoStream.addEventListener(DRMAuthenticateEvent.DRM_AUTHENTICATE, 
                            drmAuthenticateEventHandler) 
 
private function drmAuthenticateEventHandler(event:DRMAuthenticateEvent):void  
{ 
    videoStream.setDRMAuthenticationCredentials("administrator", "password", "drm"); 
} 

Creazione di un'interfaccia per il recupero di credenziali utente

Nel caso in cui il contenuto protetto richieda l'autenticazione utente, l'applicazione AIR deve in genere recuperare le credenziali di autenticazione dell'utente tramite un'interfaccia utente.

Di seguito è riportato un esempio Flex di un'interfaccia utente semplice per il recupero di credenziali utente. È composta da un oggetto panello contenente due oggetti TextInput, uno per ciascuna delle credenziali nome utente e password. Il pannello contiene inoltre un pulsante che esegue il metodo credentials().

<mx:Panel x="236.5" y="113" width="325" height="204" layout="absolute" title="Login"> 
    <mx:TextInput x="110" y="46" id="uName"/> 
    <mx:TextInput x="110" y="76" id="pWord" displayAsPassword="true"/> 
    <mx:Text x="35" y="48" text="Username:"/> 
    <mx:Text x="35" y="78" text="Password:"/> 
    <mx:Button x="120" y="115" label="Login" click="credentials()"/> 
</mx:Panel>

Il metodo credentials() è un metodo definito dall'utente che passa i valori di nome utente e password al metodo setDRMAuthenticationCredentials(). Una volta passati i valori, il metodo credentials() reimposta i valori degli oggetti TextInput.

<mx:Script> 
    <![CDATA[ 
        public function credentials():void  
        { 
            videoStream.setDRMAuthenticationCredentials(uName, pWord, "drm"); 
            uName.text = ""; 
            pWord.text = ""; 
        } 
    ]]> 
</mx:Script>

Un modo per implementare questo tipo di semplice interfaccia è includere il pannello come parte di un nuovo stato. Il nuovo stato ha origine dallo stato base quando l'oggetto DRMAuthenticateEvent viene generato. L'esempio seguente contiene un oggetto VideoDisplay con un attributo di origine che fa riferimento a un FLV protetto. In questo caso, il metodo credentials() viene modificato in modo da ripristinare lo stato di base dell'applicazione. Questa operazione viene eseguita dopo aver passato le credenziali utente e ripristinato i valori oggetto TextInput.

<?xml version="1.0" encoding="utf-8"?> 
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" 
    layout="absolute" 
    width="800" 
    height="500" 
    title="DRM FLV Player" 
    creationComplete="initApp()" > 
 
    <mx:states> 
        <mx:State name="LOGIN"> 
            <mx:AddChild position="lastChild"> 
                    <mx:Panel x="236.5" y="113" width="325" height="204" layout="absolute"  
                            title="Login"> 
                    <mx:TextInput x="110" y="46" id="uName"/> 
                    <mx:TextInput x="110" y="76" id="pWord" displayAsPassword="true"/> 
                    <mx:Text x="35" y="48" text="Username:"/> 
                    <mx:Text x="35" y="78" text="Password:"/> 
                    <mx:Button x="120" y="115" label="Login" click="credentials()"/> 
                    <mx:Button x="193" y="115" label="Reset" click="uName.text='';  
                            pWord.text='';"/> 
                </mx:Panel> 
            </mx:AddChild> 
        </mx:State> 
    </mx:states> 
 
    <mx:Script> 
        <![CDATA[ 
                import flash.events.DRMAuthenticateEvent; 
            private function initApp():void  
            { 
                videoStream.addEventListener(DRMAuthenticateEvent.DRM_AUTHENTICATE, 
                                        drmAuthenticateEventHandler); 
            } 
 
            public function credentials():void  
            { 
                videoStream.setDRMAuthenticationCredentials(uName, pWord, "drm"); 
                uName.text = ""; 
                pWord.text = ""; 
                currentState=''; 
            } 
 
            private function drmAuthenticateEventHandler(event:DRMAuthenticateEvent):void  
            { 
                currentState='LOGIN'; 
            } 
        ]]> 
    </mx:Script> 
     
    <mx:VideoDisplay id="video" x="50" y="25" width="700" height="350" 
        autoPlay="true" 
        bufferTime="10.0" 
        source="http://www.example.com/flv/Video.flv" /> 
</mx:WindowedApplication>