Korzystanie z klasy DRMAuthenticateEvent

Adobe AIR 1.0 i wersje późniejsze

Obiekt DRMAuthenticateEvent jest wywoływany, gdy obiekt NetStream podejmuje próbę odtworzenia chronionych treści, które wymagają uwierzytelnienia za pomocą poświadczeń użytkownika przed odtworzeniem.

Funkcja obsługi zdarzenia DRMAuthenticateEvent jest odpowiedzialna za uzyskanie od użytkownika wymaganych poświadczeń (nazwy, hasła i typu) oraz przekazanie ich wartości do metody NetStream.setDRMAuthenticationCredentials() w celu sprawdzenia poprawności. Każda aplikacja AIR musi udostępniać mechanizm uzyskiwania poświadczeń od użytkownika. Na przykład, aplikacja może udostępnić użytkownikowi prosty interfejs użytkownika do wprowadzania nazwy użytkownika i wartości hasła. Ponadto dostępny może być mechanizm do obsługi i ograniczania powtarzanych prób uwierzytelniania.

Właściwości klasy DRMAuthenticateEvent

Klasa DRMAuthenticateEvent zawiera następujące właściwości:

Właściwość

Opis

authenticationType

Określa, czy podane poświadczenia są przeznaczone do uwierzytelniania w module Flash Access („drm”), czy na serwerze proxy („proxy”). Opcja „proxy” umożliwia aplikacji uwierzytelnianie użytkownika na serwerze proxy, jeśli takie uwierzytelnienie jest obowiązkowe, aby użytkownik mógł uzyskać dostęp do Internetu. O ile nie jest używane uwierzytelnianie anonimowe, po uwierzytelnieniu na serwerze proxy użytkownik wciąż musi uwierzytelnić się w module Flash Access, aby uzyskać kupon i odtworzyć treść. Aplikacja może po raz drugi wywołać metodę setDRMAuthenticationcredentials() z opcją „drm” aby uwierzytelnić użytkownika w module Flash Access.

header

Nagłówek zaszyfrowanego pliku treści udostępniony przez serwer. Zawiera informacje o kontekście zaszyfrowanej treści.

netstream

Obiekt NetStream, który zainicjował to zdarzenie.

passwordPrompt

Monit o hasło udostępniony przez serwer. Jest to ciąg znaków, który może zawierać instrukcję dotyczącą wymaganego hasła.

urlPrompt

Udostępniony przez serwer monit o adres URL. Ciąg może zawierać lokalizację, do której wysyłana jest nazwa użytkownika i hasło.

usernamePrompt

Monit o nazwę użytkownika udostępniony przez serwer. Jest to ciąg znaków, który może zawierać instrukcję dotyczącą wymaganej nazwy użytkownika. Na przykład dostawca treści może wymagać nazwy użytkownika w postaci adresu e-mail.

Tworzenie funkcji obsługi zdarzenia DRMAuthenticateEvent

W poniższym przykładzie tworzona jest funkcja obsługi zdarzenia, która przekazuje zestaw zakodowanych na stałe poświadczeń uwierzytelniających do obiektu NetStream, z którego pochodzi zdarzenia. (W przykładzie pominięto kod odtwarzający wideo i weryfikujący połączenie ze strumieniem wideo).

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

Tworzenie interfejsu służącego do uzyskiwania poświadczeń od użytkownika

Jeśli treść chroniona wymaga uwierzytelnienia użytkownika, aplikacja AIR zazwyczaj musi uzyskać poświadczenia uwierzytelniające użytkownika za pośrednictwem interaktywnego interfejsu użytkownika.

Poniżej przedstawiono przykładowy prosty interfejs użytkownika napisany w języku Flex, służący do uzyskiwania poświadczeń użytkownika. Składa się z panelu zawierającego dwa obiektu TextInput, odpowiednio dla nazwy użytkownika i hasła. Panel zawiera także przycisk uruchamiający metodę 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>

Metoda credentials() jest metodą zdefiniowaną przez użytkownika, która przekazuje nazwę użytkownika i hasło do metody setDRMAuthenticationCredentials(). Po przekazaniu wartości metoda credentials() przywraca pierwotne wartości w obiektach TextInput.

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

Jednym ze sposobów zaimplementowania tego rodzaju prostego interfejsu jest uwzględnienie panelu jako elementu nowego stanu. Nowy stan jest pochodną stanu bazowego i powstaje w wyniku wywołania obiektu zdarzenia DRMAuthenticateEvent. Poniższy przykład zawiera obiekt VideoDisplay z atrybutem source, który wskazuje na plik chroniony FLV. W tym przypadku metoda credentials() została zmodyfikowana, tak aby przywracała aplikację do stanu bazowego. Zadanie to jest realizowane po przekazaniu poświadczeń użytkownika i wyzerowaniu wartości obiektu 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>