DRMAuthenticateEvent クラスの使用

Adobe AIR 1.0 およびそれ以降

再生前に認証のためのユーザー資格情報を必要とする、保護されたコンテンツを NetStream オブジェクトが再生しようとしたときに、DRMAuthenticationEvent オブジェクトが送出されます。

DRMAuthenticateEvent ハンドラーは、必要な情報(ユーザー名、パスワード、タイプ)を収集し、その値を検証のために NetStream.setDRMAuthenticationCredentials() メソッドに渡す必要があります。各 AIR アプリケーションは、ユーザー情報を取得するためのメカニズムを提供する必要があります。例えば、アプリケーションは、ユーザー名とパスワードの値を入力するための簡単なユーザーインターフェイスをユーザーに提供できます。また、ユーザーが認証の試行を繰り返したときに、それを処理し、制限するメカニズムも提供できます。

DRMAuthenticateEvent プロパティ

DRMAuthenticateEvent クラスには、次のプロパティが含まれます。

プロパティ

説明

authenticationType

提供された情報が Adobe Access(「drm」)に対する認証のためのものか、プロキシサーバー(「proxy」)に対する認証のためのものかを示します。例えば、「proxy」オプションでは、アプリケーションが必要に応じてプロキシサーバーに対して認証を行ってからユーザーがインターネットにアクセスできるように指定できます。匿名認証が使用される場合を除き、プロキシ認証の後、証明書を取得してコンテンツを再生するためにユーザーは引き続き Adobe Access に対する認証を行う必要があります。2 回目に setDRMAuthenticationcredentials() を使用するときに「drm」オプションを指定すると、Adobe Access に対して認証することができます。

header

サーバーによって提供される暗号化されたコンテンツファイルヘッダー。暗号化されたコンテンツのコンテキストに関する情報が含まれます。

アプリケーションでユーザー名とパスワードのダイアログボックスを構成するために、このヘッダーストリングを Flash アプリケーションに渡すことができます。ヘッダーストリングはダイアログボックスの説明として使用できます。例えば、「ユーザー名とパスワードを入力してください」というヘッダーにすることができます。

netstream

このイベントを開始した NetStream オブジェクト。

passwordPrompt

サーバーによって提供される、パスワード情報に対するプロンプト。このストリングには、必要なパスワードの種類についての説明を含めることができます。

urlPrompt

サーバーによって提供される、URL ストリングに対するプロンプト。このストリングは、ユーザー名とパスワードが送信される場所を指定できます。

usernamePrompt

サーバーによって提供される、ユーザー名情報に対するプロンプト。このストリングには、必要なユーザー名の種類についての説明を含めることができます。例えば、コンテンツプロバイダーがユーザー名を電子メールアドレスにするよう要求することができます。

前述のストリングは FMRMS サーバーのみで提示されます。Adobe Access サーバーではこれらのストリングは使用されません。

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 でのユーザー情報を取得するための単純なユーザーインターフェイスの例を示します。これは、2 つの TextInput オブジェクト(ユーザー名情報用のオブジェクトとパスワード情報用のオブジェクト)を含んでいる 1 つのパネルオブジェクトで構成されています。パネルには、 credentials() メソッドを起動するボタンも 1 つ含まれています。

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

この種の簡単なインターフェイスを実装する方法の 1 つに、パネルを新しい状態の一部に含める方法があります。この新しい状態は、DRMAuthenticateEvent オブジェクトがスローされるときのベースとなる状態から作成されます。次の例には、保護された FLV ファイルをポイントする source 属性を持つ VideoDisplay オブジェクトが含まれます。この例では、 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>