Utilisation de la classe DRMAuthenticateEvent

Adobe AIR 1.0 et les versions ultérieures

L’objet DRMAuthenticateEvent est distribué lorsqu’un objet NetStream essaie de lire un contenu protégé qui requiert la saisie des informations d’identification de l’utilisateur avant la lecture.

Le gestionnaire DRMAuthenticateEvent est chargé de collecter les informations d’identification requises (nom d’utilisateur, mot de passe et type) et de les transmettre à la méthode NetStream.setDRMAuthenticationCredentials() pour qu’elles soient validées. Chaque application AIR doit intégrer un mécanisme de collecte des informations d’identification des utilisateurs. L’application pourrait par exemple proposer à l’utilisateur une interface simple permettant de saisir son nom d’utilisateur et son mot de passe. Veillez également à intégrer un mécanisme de gestion et de restriction des tentatives d’authentification successives.

Propriétés DRMAuthenticateEvent

La classe DRMAuthenticateEvent comprend les propriétés suivantes :

Propriété

Description

authenticationType

Indique si les informations d’identification fournies sont destinées à une authentification auprès d’Adobe Access (« drm ») ou d’un serveur proxy (« proxy »). Par exemple, l’option "proxy" permet à l’application de s’authentifier auprès d’un serveur proxy, s’il y a lieu, avant que l’utilisateur puisse accéder à Internet. A moins que l’authentification anonyme ne soit utilisée, au terme de l’authentification proxy, l’utilisateur doit néanmoins s’authentifier auprès d’Adobe Access pour obtenir le voucher et lire le contenu. Vous pouvez utiliser setDRMAuthenticationcredentials() une deuxième fois, avec l’option « drm », pour l’authentification auprès d’Adobe Access.

header

En-tête du fichier de contenu chiffré fourni par le serveur. Il contient des informations relatives au contexte du contenu chiffré.

Il est possible de transmettre cette chaîne d’en-tête à l’application Flash pour autoriser cette dernière à créer une boîte de dialogue nom d’utilisateur/mot de passe. La chaîne d’en-tête peut être utilisée comme instructions de la boîte de dialogue. Par exemple, l’en-tête peut indiquer « Saisissez votre nom d’utilisateur et votre mot de passe ».

netstream

Objet NetStream à l’origine de cet événement.

passwordPrompt

Invite associée au mot de passe, fournie par le serveur. La chaîne peut comporter des instructions relatives au type de mot de passe requis.

urlPrompt

Invite associée à une chaîne URL, fournie par le serveur. La chaîne peut fournir l’emplacement auquel le nom d’utilisateur et le mot de passe sont envoyés.

usernamePrompt

Invite associée au nom d’utilisateur, fournie par le serveur. La chaîne peut comporter des instructions relatives au type de nom d’utilisateur requis. Par exemple, un fournisseur de contenu peut exiger une adresse électronique comme nom d’utilisateur.

Les chaînes mentionnées précédemment sont fournies par le serveur FMRMS uniquement. Adobe Access Server n’utilise pas ces chaînes.

Création d’un gestionnaire DRMAuthenticateEvent

L’exemple suivant crée un gestionnaire d’événement qui transmet un jeu d’informations d’authentification codées en dur à l’objet NetStream à l’origine de l’événement. (Ce chapitre ne contient pas le code permettant de lire la vidéo et de s’assurer qu’une connexion au flux vidéo a abouti.)

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

Création d’une interface de collecte des informations d’identification des utilisateurs

Si un contenu protégé requiert l’authentification de l’utilisateur, l’application AIR doit généralement extraire les informations d’identification de l’utilisateur au moyen d’une interface utilisateur.

Le code suivant est un exemple Flex d’interface utilisateur simple permettant de collecter les informations d’identification des utilisateurs. Il se compose d’un objet Panel contenant deux objets TextInput (le premier étant réservé aux noms d’utilisateur et le second aux mots de passe). L’objet Panel comporte également un bouton permettant de démarrer la méthode 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>

La méthode credentials() est une méthode définie par l’utilisateur qui transmet les valeurs de nom d’utilisateur et de mot de passe à la méthode setDRMAuthenticationCredentials(). Une fois ces valeurs transmises, la méthode credentials() réinitialise les valeurs des objets TextInput.

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

Pour implémenter ce type d’interface simple, il est possible d’inclure l’objet Panel au sein d’un nouvel état. Le nouvel état provient de l’état de base lorsque l’objet DRMAuthenticateEvent est envoyé. L’exemple suivant contient un objet VideoDisplay doté d’un attribut source qui pointe vers un fichier FLV protégé. Dans ce cas, la méthode credentials() est modifiée de façon à ce qu’elle renvoie également l’application à son état de base. Pour cela, les informations d’identification de l’utilisateur doivent être transmises et les valeurs de l’objet TextInput réinitialisées.

<?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>