Uso da classe DRMAuthenticateEvent

Adobe AIR 1.0 e posterior

O objeto DRMAuthenticateEvent é enviado quando um objeto NetStream tenta reproduzir conteúdo protegido que requer uma credencial de usuário para autenticação antes da reprodução.

O manipulador DRMAuthenticateEvent é responsável pela coleta das credenciais necessárias (nome de usuário, senha e tipo) e pela transmissão dos valores ao método NetStream.setDRMAuthenticationCredentials() para validação. Cada aplicativo do AIR deve fornecer algum mecanismo para obter credenciais do usuário. Por exemplo, o aplicativo pode fornecer ao usuário uma interface simples para inserir os valores de nome de usuário e senha. Pode também, fornecer um mecanismo para manipular e limitar tentativas repetidas de autenticação.

Propriedades DRMAuthenticateEvent

A classe DRMAuthenticateEvent inclui as seguintes propriedades:

Propriedade

Descrição

authenticationType

Indica se as credenciais fornecidas são para autenticação em comparação ao Adobe Access ("drm") ou um servidor proxy ("proxy"). Por exemplo, a opção "proxy" permite que o aplicativo autentique em um servidor proxy caso seja necessário antes de o usuário acessar a Internet. A menos que seja usada a autenticação anônima, depois da autenticação proxy, o usuário ainda precisará ser autenticado comparando ao Adobe Access para obter o voucher e reproduzir o conteúdo. É possível reutilizar setDRMAuthenticationcredentials(), com a opção "drm" para autenticar durante o Adobe Access.

header

O cabeçalho do arquivo de conteúdo criptografado fornecido pelo servidor. Ele contém informações sobre o contexto do conteúdo criptografado.

Esta sequência de caracteres de cabeçalho pode ser enviada ao aplicativo Flash para permitir que o aplicativo crie uma caixa de diálogo com nome de usuário e senha. A sequência de caracteres de cabeçalho pode ser usada como instruções da caixa de diálogo. Por exemplo, o cabeçalho pode ser "Digite o nome de usuário e a senha".

netstream

O objeto NetStream que iniciou esse evento.

passwordPrompt

Um prompt para uma credencial de senha, fornecida pelo servidor. A sequência de caracteres pode incluir instruções para o tipo de senha necessária.

urlPrompt

Um prompt para uma sequência de caracteres de URL, fornecida pelo servidor. A sequência de caracteres pode fornecer o local para onde o nome de usuário e a senha são enviados.

usernamePrompt

Um prompt para uma credencial de nome de usuário, fornecida pelo servidor. A sequência de caracteres pode incluir instruções para o tipo de nome de usuário necessário. Por exemplo, um provedor de conteúdo pode requerer um endereço de email como nome de usuário.

As sequências mencionadas anteriormente são fornecidas somente pelo servidor FMRMS. O servidor do Adobe Access não utiliza essas sequências de caracteres.

Criação de um manipulador DRMAuthenticateEvent

O exemplo a seguir cria um manipulador de eventos que transmite um conjunto de credenciais de autenticação codificadas ao objeto NetStream que originou o evento. (O código para reproduzir o vídeo e certificar-se de que foi feita uma conexão bem-sucedida ao streaming de vídeo não está incluída aqui.)

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

Criação de uma interface para recuperar credenciais do usuário

No caso em que o conteúdo protegido requer autenticação do usuário, o aplicativo do AIR normalmente deve obter as credenciais de autenticação do usuário por meio de uma interface de usuário.

A seguir, um exemplo do Flex de uma interface de usuário simples para recuperar credenciais do usuário. Ele consiste de um objeto de painel contendo dois objetos TextInput, um para cada uma das credenciais de nome de usuário e senha. O painel também contém um botão que inicia o método 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>

O método credentials() é um método definido pelo usuário que transmite os valores de nome de usuário e senha para o método setDRMAuthenticationCredentials() . Depois que os valores são passados, o método credentials() redefine os valores dos objetos TextInput.

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

Uma forma de implementar este tipo de interface simples é incluir o painel como parte de um estado novo. O novo estado tem origem em um estado base onde o objeto DRMAuthenticateEvent é lançado. O exemplo a seguir contém um objeto VideoDisplay com um atributo de origem que aponta para um arquivo FLV protegido. Neste caso, o método credentials() é modificado para também retornar o aplicativo ao estado base. Este método faz isto, enviando as credenciais do usuário e reiniciando os valores de objeto 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>