Использование класса DRMAuthenticateEvent

Adobe AIR 1.0 и более поздних версий

Объект DRMAuthenticateEvent отправляется, когда объект NetStream пытается воспроизвести защищенное содержимое, для которого требуются учетные данные для проверки подлинности перед воспроизведением.

Обработчик DRMAuthenticateEvent отвечает за сбор нужных учетных данных (имя пользователя, пароль, тип) и передачу значений методу NetStream.setDRMAuthenticationCredentials() для валидации. Любое приложение AIR должно содержать некий механизм для получения учетных данных пользователя. Например, в приложении пользователю может быть доступен простой пользовательский интерфейс для ввода значений имени пользователя и пароля. Также обеспечьте механизм обработки и ограничения повторяющихся попыток проверки подлинности.

Свойства DRMAuthenticateEvent

Класс DRMAuthenticateEvent содержит ряд свойств:

Свойство

Описание

authenticationType

Указывает, с чем должны сравниваться предоставленные учетные данные при проверки подлинности: данные Adobe Access (drm) или прокси-сервера (proxy). Например, параметр proxy позволяет приложению выполнять проверку подлинности на прокси-сервере, если она требуется перед предоставлением пользователю доступа в Интернет. Если проверка подлинности не анонимная, то после проверки подлинности на прокси-сервере пользователю все равно нужно пройти проверку подлинности в среде Adobe Access, чтобы получить ваучер и воспроизвести содержимое. Можно во второй раз использовать метод setDRMAuthenticationCredentials() с параметром "drm" для выполнения проверки подлинности в среде Adobe Access.

header

Файл с зашифрованным содержимым, предоставляемый сервером. В нем содержится информация о контексте зашифрованного содержимого.

Эта строка заголовка может передаваться приложению Flash, чтобы оно могла создать диалоговое окно для ввода имени пользователя и пароля. Строку заголовка можно использовать в качестве инструкций для диалогового окна. Например, в качестве заголовка можно использовать строку «Введите свои имя пользователя и пароль».

netstream

Объект NetStream, являющийся инициатором события.

passwordPrompt

Запрос пароля, инициируемый сервером. В строке может содержаться указание о типе требуемого пароля.

urlPrompt

Запрос URL, инициируемый сервером. Строка может содержать указание, куда отправляются имя пользователя и пароль.

usernamePrompt

Запрос имени пользователя, инициируемый сервером. В строке может содержаться указание на тип требуемого имени пользователя. Например, поставщик содержимого может потребовать в качестве имени пользователя адрес электронной почты.

Приведенные выше строки предоставляются только сервером FMRMS. Сервер Adobe Access Server их не использует.

Создание обработчика DRMAuthenticateEvent

В примере ниже создается обработчик события, который передает набор жестко заданных учетных данных объекту NetStream, являющемуся инициатором события. (Сюда не включен код для воспроизведения видео и проверки успешности соединения с потоком видео.)

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

Создание интерфейса для получения учетных данных

В случае, когда для доступа к защищенному содержимому требуется проверка подлинности, приложение AIR обычно получает учетные данные для проверки подлинности через пользовательский интерфейс.

Ниже приведен пример простого пользовательского интерфейса запроса учетных данных для Flex. Он состоит из объекта panel с двумя объектами TextInput: один для имени пользователя и один для пароля. На панели также есть кнопка, вызывающая метод 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>

Метод credentials() — это определяемый пользователем метод, передающий значения имени пользователя и пароля методу setDRMAuthenticationCredentials() . После передачи значений метод credentials() сбрасывает значения в объектах TextInput.

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

Для реализации этого простого интерфейса можно сделать панель частью нового состояния. Новое состояние создается на основе исходного с помощью объекта DRMAuthenticateEvent. В примере ниже содержится объект VideoDisplay с атрибутом source, который указывает на защищенный FLV-файл. В данном случае метод credentials() изменен таким образом, чтобы возвращать программу в исходное состояние. Это происходит после передачи учетных данных пользователя и сброса значений объекта 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>