BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ アーティクル FlexおよびJavaアプリケーションのアーキテクチャ(page3)

FlexおよびJavaアプリケーションのアーキテクチャ(page3)

ブックマーク

セキュリティ

多くのアプリケーションでは、サーバーサイドの一部またはすべてのリソースへのアクセスを特定のユーザーに制限する必要があります。多くのJave EEアプリケーションでは、コンテナで管理されたセキュリティが用いられます。この場合、ユーザー認証(ユーザーの本人確認)とユーザー承認(ユーザーが何にアクセスできるかの決定-多くはロールに基づく)は、レルム(ユーザー名、パスワード、ユーザーロールの記録)に基づいて行われます。レルムは、Java EEサーバー上で、リレーショナルデータベース、LDAPディレクトリサーバー、XML文書として構成されるか、特定の認証および承認フレームワークを使用するように構成されます。

FlexアプリケーションをJava EEセキュリティフレームワークに統合して、サーバーサイドリソースへのアクセスを適切に制限するには、BlazeDSまたはLiveCycle Data Servicesの構成ファイルにセキュリティ情報を追加します(詳細はこの後で説明します)。その後、ユーザーからログイン資格情報を受け取って認証のためにサーバーに送るフォームを、通常はFlexアプリケーションで作成します。ユーザー資格情報は、その後のすべての要求と一緒に自動的にサーバーに渡されます。

services-config.xmlの変更

BlazeDSまたはLiveCycle Data Servicesのservices-config.xmlファイルで、アプリケーションサーバーの「ログインコマンド」を<security>タグに指定する必要があります。BlazeDSおよびLiveCycle Data Servicesが提供するログインコマンドは、TomcatLoginCommand(TomcatおよびJBoss用)、JRunLoginCommand、WeblogicLoginCommand、WebSphereLoginCommand、OracleLoginCommandです。これらはすべてXMLファイルに定義されており、必要なもののコメントを外すだけです。

この他に、基本認証とカスタム認証のどちらを使用するかを指定するセキュリティ制約と、必要な場合は1つ以上のロールを定義します。TomatまたはJBossでカスタム認証を行うには、Jave EEアプリケーションサーバーが使用するセキュリティフレームワークとの統合のためのクラスをいくつかWebアプリケーションに追加するとともに、いくつかの構成ファイルを変更する必要もあります。詳しくはこちら*を参照してください。

<services-config>    
   <security> 
   <login-command class="flex.messaging.security.TomcatLoginCommand"
      server="Tomcat">             
      <per-client-authentication>false</per-client-authentication>        
   </login-command> 
   <security-constraint id="trusted">         
      <auth-method>Custom</auth-method>         
      <roles>             
         <role>employees</role>             
         <role>managers</role>         
      </roles>     
      </security-constraint> 
   </security>  
   ... 
</services-config>

remoting-config.xmlの変更

次に、宛先定義でセキュリティ制約を参照する必要があります。

<destination id="employeeService">
    <properties>
       <source>services.EmployeeService</source>
    </properties>
    <security>
       <security-constraint ref="trusted"/>
    </security> 
</destination>

すべての宛先に対するデフォルトのセキュリティ制約を定義することも、異なるセキュリティ制約を使用する特定のメソッドだけにアクセスを制限することもできます。

デフォルトのチャネルmy-amfはHTTPを使用します。HTTPSを使用するmy-secure-amfチャネルを使用するように、1つまたは複数の宛先を変更することもできます。

<destination id="employeeService">     
   <channels>         
      <channel ref="my-secure-amf"/>     
   </channels> 
    ... 
</destination> 

ここで、my-secure-amfは、services-config.xmlファイルに定義されています。

<!-- Non-polling secure AMF --> 
<channel-definition id="my-secure-amf"
    class="mx.messaging.channels.SecureAMFChannel">    

 <endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure"
    class="flex.messaging.endpoints.SecureAMFEndpoint"/> 
</channel-definition> 

Flexアプリケーションへのコードの追加

以上で、サーバーサイドの設定は終わりです。次に、カスタム認証を使用する場合、Flexアプリケーションでフォームを作成する必要があります。このフォームは、ユーザーからユーザー名とパスワードを取得し、ChannelSet.login()メソッドを呼び出してこれらの資格情報をサーバーに渡し、resultおよびfaultイベントをリッスンします。resultイベントはログイン(認証)が成功したことを、faultイベントはログインが失敗したことを示します。資格情報は、同じChannelSet上で接続されているすべてのサービスに適用されます。 基本認証の場合、Flexアプリケーションには何も追加する必要はありません。アプリケーションが最初に宛先に接続しようとしたときに、ブラウザーがログインダイアログボックスを開きます。

その後、アプリケーションは前と同様にサーバーの宛先に対してFlash Remoting要求を実行できますが、それぞれの要求とともにユーザー資格情報が自動的に送信されるようになります(カスタム認証と基本認証のどちらの場合でも)。宛先または宛先のメソッドに指定されている承認ロールを、ログインするユーザーが満たさない場合、呼び出しはfaultイベントを返します。資格情報を削除してユーザーをログアウトするには、ChannelSet.logout()メソッドを使用します。

 

ページ3/4

 

この記事に星をつける

おすすめ度
スタイル

BT