Korzystanie z klasy DRMAuthenticateEvent

Adobe AIR 1.0 i starsze wersje

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 wartości nazwy użytkownika i 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 Adobe 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 Adobe 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 Adobe Access.

header

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

Ten ciąg nagłówka można przekazać do aplikacji Flash, aby umożliwić jej utworzenie okna dialogowego wprowadzania nazwy i hasła użytkownika. Ciąg nagłówka może zostać użyty jako instrukcje w oknie dialogowym. Nagłówek może na przykład mieć postać „Wpisz nazwę użytkownika i hasło”.

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.

Wymienione wyżej ciągi są dostarczane tylko przez program Flash Media Rights Management Server. Program Adobe Access Server nie używa tych ciągów.

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 obiektu panelu zawierającego dwa obiekty TextInput, odpowiednio dla poświadczeń 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>