Uso de la clase DRMAuthenticateEvent

Adobe AIR 1.0 y posterior

El objeto DRMAuthenticateEvent se distribuye cuando un objeto NetStream intenta reproducir contenido protegido que requiera credenciales de usuario para autenticación antes de la reproducción.

El controlador del evento DRMAuthenticateEvent es responsable de obtener las credenciales exigidas (nombre de usuario, contraseña y tipo) y de pasar los valores al método NetStream.setDRMAuthenticationCredentials() para su validación. Cada aplicación de AIR debe proveer un mecanismo para obtener las credenciales de usuario. Por ejemplo, la aplicación proporcionaría al usuario una interfaz sencilla para introducir los valores de nombre de usuario y contraseña. Asimismo, ofrece un mecanismo para gestionar y limitar los intentos repetidos de autenticación.

Propiedades de DRMAuthenticateEvent

La clase DRMAuthenticateEvent incluye las siguientes propiedades:

Propiedad

Descripción

authenticationType

Indica si las credenciales facilitadas son para autenticación con Adobe Access (“drm”) o un servidor proxy (“proxy”). Por ejemplo: la opción "proxy" permite a la aplicación realizar la autenticación ante un servidor proxy si se necesita antes de que el usuario pueda acceder a Internet. A menos que se utilice la autenticación anónima, después de la autenticación proxy el usuario aún necesita autenticarse con Adobe Access para obtener la licencia y poder reproducir el contenido. Se puede utilizar setDRMAuthenticationcredentials() una segunda vez, con la opción “drm”, para realizar la autenticación con Adobe Access.

header

El encabezado del archivo de contenido cifrado suministrado por el servidor. Contiene información acerca del contexto del contenido cifrado.

Esta cadena de encabezado se puede pasar a la aplicación Flash para permitir que construya un cuadro de diálogo de introducción de nombre de usuario y contraseña. La cadena de encabezado se puede aprovechar como instrucciones del cuadro de diálogo. Por ejemplo, el encabezado puede ser del tipo “Escriba su nombre de usuario y contraseña”.

netstream

El objeto NetStream que inició este evento.

passwordPrompt

Una solicitud de la credencial de contraseña, proporcionada por el servidor. La cadena puede incluir una instrucción sobre el tipo de contraseña que se requiere.

urlPrompt

Una solicitud de una cadena de URL, proporcionada por el servidor. La cadena puede indicar el lugar donde se envían el nombre de usuario y la contraseña.

usernamePrompt

Una solicitud de la credencial de nombre de usuario, proporcionada por el servidor. La cadena puede incluir una instrucción sobre el tipo de nombre de usuario que se requiere. Por ejemplo: un proveedor de contenido puede exigir que el nombre de usuario sea una dirección de correo electrónico.

Las cadenas mencionadas anteriormente las suministra solo el servidor FMRMS. El servidor Adobe Access no utiliza estas cadenas.

Creación de un controlador para el evento DRMAuthenticateEvent

En el siguiente ejemplo se crea un controlador de eventos que pasa una serie de credenciales de autenticación programadas al objeto NetStream que originó el evento. (No se incluye aquí el código para reproducir el vídeo y verificar que se haya realizado una conexión satisfactoria al flujo de vídeo).

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

Creación de una interfaz para recuperar las credenciales de usuario

Si el contenido protegido requiere autenticación del usuario, la aplicación de AIR normalmente tiene que recuperar las credenciales de autenticación del usuario a través de una interfaz de usuario.

Lo siguiente es un ejemplo en Flex de una interfaz de usuario sencilla para recuperar credenciales de usuario. Consta de un objeto de panel que contiene dos objetos TextInput, uno para cada una de las credenciales de nombre de usuario y contraseña. El panel también contiene un botón que inicia el 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>

El método credentials() es un método definido por el usuario que pasa al método setDRMAuthenticationCredentials() los valores de nombre de usuario y contraseña. Una vez pasados estos valores, el método credentials() restaura los valores de los objetos TextInput.

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

Una forma de implementar este tipo de interfaz sencilla es incluir el panel como parte de un nuevo estado. El nuevo estado se origina del estado base cuando se emite el objeto DRMAuthenticateEvent. El siguiente ejemplo contiene un objeto VideoDisplay con un atributo de origen que apunta a un archivo FLV protegido. En ese caso, el método credentials() se modifica para que también devuelva la aplicación a su estado base. Este método lo hace tras pasar las credenciales del usuario y restaurar los valores del 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>