CORBAサーバー・アプリケーションの作成

     前  次    新規ウィンドウで目次を開く  新規ウィンドウで索引を開く  PDFとして表示 - 新規ウィンドウ  Adobe Readerを取得 - 新規ウィンドウ
コンテンツはここから始まります

セキュリティとCORBAサーバー・アプリケーション

この章では、セキュリティとCORBAサーバー・アプリケーションについて、Security Universityサンプル・アプリケーションを例にして説明します。このSecurityサンプル・アプリケーションで実装するセキュリティ・モデルでは、Universityサンプル・アプリケーションの学生ユーザーはそのアプリケーションへのログイン・プロセスの一部として認証を受ける必要があります。

ここでは、以下の内容について説明します。

 


セキュリティとCORBAサーバー・アプリケーションの概要

一般に、CORBAサーバー・アプリケーションはセキュリティにほとんど関係しません。Oracle Tuxedoドメインでのセキュリティはシステム管理者によってUBBCONFIGファイルで指定され、ドメインへのログインや認証はクライアント・アプリケーションによって処理されます。Oracle Tuxedoシステムでサポートされているセキュリティ・モデルのいずれにも、Oracle Tuxedoドメインで稼働するサーバー・アプリケーションに関する要件はありません。

しかし、使用するCORBAアプリケーションのセキュリティ・モデルを実装または改善する際に、オブジェクトを追加したり、既存のオブジェクトにオペレーションを追加したりすることになり、そうして追加されたオブジェクトやオペレーションがサーバー・アプリケーションの管理対象である場合もあります。

この章では、Universityサーバー・アプリケーションを拡張して学生という概念を追加する方法を説明します。この拡張はクライアント・アプリケーションに組み込まれて、クライアント・アプリケーションのユーザーの識別、およびログインの手段となります。

クライアント・アプリケーションでOracle Tuxedoドメインへの認証を受ける方法の詳細は、『CORBAクライアント・アプリケーションの作成』を参照してください。Oracle Tuxedoドメインにセキュリティ・モデルを実装する方法の詳細は、『Oracle Tuxedoアプリケーションの設定』を参照してください。

 


Universityサーバー・アプリケーションの設計上の考慮事項

Security Universityサンプル・アプリケーションの設計の要点は、クライアント・アプリケーションのユーザーに対してログオンを求め、ログオンしないと何もできないようにすることです。このため、Securityサンプル・アプリケーションでは、ユーザーの概念を定義する必要があります。

アプリケーションにログオンするために、クライアント・アプリケーションはOracle Tuxedoドメインのセキュリティ・サービスに以下の情報を提供する必要があります(このアプリケーションの学生ユーザーは、ユーザー名とアプリケーション・パスワードのみを提供します)。

Securityサンプル・アプリケーションは、Registrarオブジェクトにget_student_details()オペレーションを追加します。このオペレーションによって、クライアント・アプリケーションは、Oracle Tuxedoドメインにログオンした後でUniversityデータベースから学生の情報を取得することができます。

注意: get_student_details()オペレーションは、Oracle Tuxedoドメインのセキュリティ・モデルを実装することとは無関係です。このオペレーションを追加しても、Securityサンプル・アプリケーションに補足機能を追加するのみです。Securityサンプル・アプリケーションに追加されるセキュリティ・モデルの詳細、およびクライアント・アプリケーションがSecurityサーバー・アプリケーションにログオンする方法の詳細は、『CORBAクライアント・アプリケーションの作成』を参照してください。

ここでは、次の内容について説明します。

Security Universityサンプル・アプリケーションのしくみ

Securityサンプル・アプリケーションを実装するために、クライアント・アプリケーションではログオンについて学生エンド・ユーザーとのやり取りが追加されます。このやり取りではクライアント・マシン上のローカルなSecurityCurrentオブジェクトを使用してPrincipalAuthenticatorオブジェクトのオペレーションが呼び出され、Oracle Tuxedoドメインにアクセスするためのログイン手順の一部となります。ユーザー認証のプロセスの後、クライアント・アプリケーションはRegistrarオブジェクトのget_student_details()オペレーションを呼び出して、各学生ユーザーについての情報を取得します。

Securityサンプル・アプリケーションで使用されるUniversityデータベースは、コース情報に加えて学生の情報も含むように更新されて、図5-1のようになります。

図5-1 Universityデータ
Securityサンプル・アプリケーションに関連する主要オブジェクト
base

get_student_details()オペレーションはデータベースで学生情報の部分にアクセスして、クライアントのログオン・オペレーションに必要な学生情報を取得します。図5-2は、Securityサンプル・アプリケーションに関係する主要なオブジェクトを示します。

図5-2 Securityサンプル・アプリケーションに関連する主要オブジェクト

Securityサンプル・アプリケーションに関連する主要オブジェクト

Securityサンプル・アプリケーションの一般的な使用のシナリオには、以下のようなイベントのシーケンスが含まれることがあります。

  1. クライアント・アプリケーションは、SecurityCurrentオブジェクトの参照をBootstrapオブジェクトから取得します。
  2. クライアント・アプリケーションはSecurityCurrentオブジェクトを呼び出して、Oracle Tuxedoドメインで要求されるセキュリティのレベルを判別します。
  3. クライアント・アプリケーションは学生ユーザーについて学生IDおよび必要なパスワードを問い合せます。
  4. クライアント・アプリケーションは、学生についての情報を認証サービスから取得して、学生の認証を行います。
  5. 認証の処理が正常に終了したら、クライアント・アプリケーションはOracle Tuxedoドメインにログオンします。
  6. クライアント・アプリケーションはRegistrarオブジェクトのget_student_details()オペレーションを呼び出し、学生IDを渡して、学生についての情報を取得します。
  7. Registrarオブジェクトはデータベースをスキャンして、クライアント・リクエストにある学生IDと一致する学生情報を探します。
  8. クライアント・アプリケーションのリクエストで指定されている学生IDと、データベースにある学生情報の間に一致があれば、Registrarオブジェクトはクライアント・アプリケーションにstruct StudentDetailsを戻します。(学生によって入力されたIDがデータベースにある情報と一致しない場合、Registrarオブジェクトはクライアント・アプリケーションにCORBA例外を戻します。)
  9. Registrarオブジェクトがクライアント・アプリケーションにStudentDetailsを返した場合、クライアント・アプリケーションは学生ユーザー個人用の許可メッセージを表示します。

クライアント・アプリケーションに学生の詳細情報を返す機能を設計する際の考慮事項

クライアント・アプリケーションは、ユーザーがUniversityアプリケーションの使用を継続できるように、Oracle Tuxedoシステムにユーザーを記録する方法を提供する必要があります。このためには、クライアント・アプリケーションでユーザーを識別する手段が必要です。Securityサンプル・アプリケーションでは、学生IDで識別を行います。

Universityサーバー・アプリケーションに要求される機能は、クライアント・アプリケーションがユーザー認証プロセスを完了できるように、サーバー・アプリケーションは学生IDに基づいて学生のデータを返すことに尽きます。そのため、Securityサンプル・アプリケーションのOMG IDLは、get_student_details()オペレーションの定義をRegistrarオブジェクトに追加します。Universityサーバー・アプリケーションを設計する際の最優先考慮事項は、前述のオペレーション・シナリオに基づいています。つまり、1人の学生が一度に1つのクライアント・アプリケーションと相互通信を行うため、サーバー・アプリケーションはget_student_details()オペレーションを実装するためのかなり大容量のデータ・バッチを処理する必要がないということです。

get_student_details()オペレーションのOMG IDL定義は次のとおりです。

struct StudentDetails
{
StudentId student_id;
string name;
CourseDetailsList registered_courses;
};

  先頭に戻る       前  次