ADOBE®   MEDIA SERVER 5.0.3

デベロッパーズガイド


翻訳:株式会社サムライズ

 

注意

Adobe Media Server® バージョン 5についての本ドキュメントは第三者によって翻訳されたものであり、Adobe Systems Incorporated(アドビ システムズ社)は本翻訳物の正確性や完全性を査閲していません。

 

クライアントの認証

 

 

 

 

Clientオブジェクトのプロパティの使用

クライアントがアプリケーションに接続すると、サーバーは、クライアントの情報が含まれた Client オブジェクトを作成しそれをサーバーサイド ActionScript 内の application.onConnect() ハンドラーに渡しますClient オブジェクトのプロパティにアクセスするサーバーサイドコードを記述し、その値を使用して、接続を試みているクライアントの有効性を検証することができます。

 

application.onConnect = function( pClient ) {

for (var i in pClient) {

trace( "key: " + i + ", value: " + pClient[i] );

}

}

 

クライアントの IP アドレスの確認

main.asc の中で client.ip の値を確認し、必要に応じてアプリケーションに対するクライアントの接続を拒否します。

 

if (client.ip.indexOf("60.120") !=0) {

application.rejectConnection(client, {"Access Denied"} );

}

 

参照元の URL の確認

main.asc の中でclient.referrer の値を、アクセスを拒否する URL のリストに照らし合わせて確認します。アプリケーションに接続しようとしている SWF ファイルが、予期した場所からのものであるかどうかを確認します。リストに一致するものがある場合は、クライアントからの接続を拒否します。

 

referrerList = {};

referrerList["http://www.example.com"] = true;

referrerList["http://www.abc.com"] = true;

 

if (!referrerList[client.referrer]) {

application.rejectConnection(client, {"Access Denied"} );

}

 

 

固有キーの使用

 クライアントサイド ActionScript で、次のコードで示すように、ローカルコンピューターの時刻と乱数を連結して固有キーを作成します。

 

var keyDate = String(new Date().getTime());

var keyNum = String(Math.random());

var uniqueKey = keyDate + keyNum;

 このキーを、接続要求と共にサーバーに送信します。

 

nc.connect("rtmp://www.example.com/someApplication", uniqueKey);

 

 main.ascファイル内の次のコードは、接続要求の中の固有キーを探します。固有キーが存在しない場合または既に使用されている固有キーの場合、接続は拒否されます。この方法によって、偽証者によるリプレイ接続の試みは失敗します。

 

clientKeyList = new Object();       // holds the list of clients by key

 

application.onConnect = function( pClient, uniqueKey ) {

if ( uniqueKey != undefined ) {        // require a unique key with connection request

if ( clientKeyList[uniqueKey] == undefined ) {         // first time -- allow connection

pClient.uniqueKey = uniqueKey;

clientKeyList[uniqueKey] = pClient;

this.acceptConnection(pClient);

} else {

trace( "Connection rejected" );

this.rejectConnection(pClient);

}

}

}

 

application.onDisconnect = function( pClient ) {

delete clientKeyList[pClient.uniqueKey];

}

 

 

Accessプラグインの使用

Accessプラグインは、外部からの要求がアプリケーションに渡される前に、その要求をインターセプトします。Accessプラグインのプログラムを作成することによって、あらゆる認証形式を使用することができます。

 

 

関連項目

Access プラグインの開発

 

Flash Player のバージョンの使用

接続時に受信するユーザーエージェントの文字列に基づいて、Flash Playerを実行していないクライアントからコンテンツを保護することができます。ユーザーエージェントの文字列によって、プラットフォームと Flash Playerのバージョンが識別されます。以下にその例を示します。

 

WIN 8,0,0,0

MAC 9,0,45,0

この文字列にアクセスするには、次の 2 つの方法があります。

仮想キー  Flash Player クライアントに基づいてストリームを再マッピングするようにサーバーを設定します。

Client.agent  サーバーサイドActionScript を使用して、接続のチャレンジを行います。

 

application.onConnect = function( pClient ) {

var platform       = pClient.agent.split(" ");

var versionMajor = platform[1].split(",")[0];

var versionMinor = platform[1].split(",")[1];

var versionBuild = platform[1].split(",")[2];

}

 

// output example

// Client.agent: WIN 9,0,45,0

// platform[0]:     "WIN"

// versionMajor: 9

// versionMinor: 0

// versionBuild: 45

 

 

接続する SWFファイルの検証

アプリケーションへの接続を許可する前に、クライアントの SWFファイルが信頼できることを検証するよう、サーバーを設定することができますSWFファイルを検証することによって第三者が独自の SWFファイルを作成してリソースをストリーミングすることを防止できます。SWF検証は、Flash Player 9アップデート 3以降でサポートされます。

 

特定のドメインからの接続の許可または拒否

有効なクライアントの接続元のドメインがわかっている場合は、それらのドメインをホワイトリストで管理することができます。逆に、既知の無効なドメインをブラックリストで管理することもできます。

Adaptor.xmlファイルにドメイン名の静的なリストを入力することができます。また、独自のサーバーサイドコードやファイルを使用して、これらのリストを管理することもできます。次の例では、bannedIPList.txt という名前のファイルに除外対象の IPアドレスのリストを格納しています。このファイルは随時に編集することができます。

// bannedIPList.txt file contents:

// 192.168.0.1

// 128.493.33.0

 

function getBannedIPList() {

var bannedIPFile = new File ("bannedIPList.txt");

bannedIPFile.open("text","read");

 

application.bannedIPList = bannedIPFile.readAll();

 

bannedIPFile.close();

delete bannedIPFile;

}

 

application.onConnect = function(pClient) {

var isIPOK = true;

getBannedIPList();

for (var index=0; index<this.bannedIPList.length; index++) {

var currentIP = this.bannedIPList[index];

if (pClient.ip == currentIP) {

isIPOK = false

trace("ip was rejected");

break;

}

}

 

if (isIPOK) {

this.acceptConnection(pClient);

} else {

this.rejectConnection(pClient);

}

}

 

また、特定のドメインから短時間の間に要求が来ていないかを確認するためのサーバーサイドコードを作成することもできます。

 

 

application.VERIFY_TIMEOUT_VALUE = 2000;

 

Client.prototype.verifyTimeOut = function() {

trace (">>>> Closing Connection")

clearInterval(this.$verifyTimeOut);

application.disconnect(this);

}

 

function VerifyClientHandler(pClient) {

this.onResult = function (pClientRet) {

// if the client returns the correct key, then clear timer

if (pClientRet.key == pClient.verifyKey.key) {

trace("Connection Passed");

clearInterval(pClient.$verifyTimeOut);

}

}

}

 

application.onConnect = function(pClient) {

this.acceptConnection(pClient);

 

// create a random key and package within an Object

pClient.verifyKey = ({key: Math.random()});

 

// send the key to the client

pClient.call("verifyClient",

new VerifyClientHandler(pClient),

pClient.verifyKey);

 

// set a wait timer

pClient.$verifyTimeOut = setInterval(pClient,

$verifyTimeOut,

this.VERIFY_TIMEOUT_VALUE,

pClient);

}

 

application.onDisconnect = function(pClient) {

clearInterval(pClient.$verifyTimeOut);

}

 

 

 

最終更新日 2013/9/30