ヘッダーをスキップ
Oracle Access Manager開発者ガイド
10g(10.1.4.2.0)
E05808-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

5 ポリシー・マネージャAPI

ポリシー・マネージャAPIでは、ポリシー・マネージャのユーザー・インタフェースのほとんどの機能にプログラムによってアクセスできます。ポリシー・マネージャAPIを使用すると、ポリシー・ドメインとその内容を作成および管理できます。たとえば、GUIではなくこのAPIを使用してポリシー・ドメインとその内容の作成、変更、削除および取得を行うアプリケーションを作成できます。

この章では、ポリシー・マネージャAPIを使用するアプリケーションを作成する方法について説明します。内容は次のとおりです。

この章は、次の項から構成されます。

5.1 ポリシー・マネージャAPIの概要

ポリシー・マネージャAPIは、カスタム・アプリケーションからアクセス・サーバーの認証、認可および監査サービスへのアクセスを可能にするインタフェースです。これにより、アクセス・システムのポリシー・ドメインとその内容の作成および変更が可能になります。ポリシー・マネージャAPIを使用する前に、『Oracle Access Managerアクセス管理ガイド』を参照してください。ポリシー・マネージャAPIの機能の理解を深めるには、ポリシー・マネージャGUIを使用してみてください。

ポリシー・マネージャAPIでは、次のオブジェクトのインスタンス化に使用できるように、各クラスに対してJava、Cおよびマネージ・コードのバインディングが用意されています。

アクセス・ポリシー・オブジェクト: これらのオブジェクトは、アクセス管理者が通常ポリシー・マネージャを使用して構成するポリシー・ドメイン、ポリシー、アクセス条件、監査ルールおよびその他のポリシー・ドメインの内容の一部であるデータとして使用されます。

システム構成オブジェクト: これらのオブジェクトは、アクセス・システム管理者が通常、「アクセス・システム・コンソール」Access System Managerを使用して指定する認証プラグイン、認証および認可スキームおよびその他のポリシー・ドメインの内容の一部であるデータとして使用されます。

認証および認可スキーム、マスター監査ルール、ホスト識別子など一部のシステム構成オブジェクトは、読取り専用オブジェクトとしてAPIで公開されます。これらのオブジェクトはプログラム内で使用できますが、使用方法はそれに対応するアクセス・システムのコンポーネントと同様です。たとえば、認証スキームがポリシー・マネージャから変更できないのと同様に、認証スキーム・オブジェクトはポリシー・マネージャAPIでは変更できません。

アクセス・サーバーの接続: ObAccessManagerクラスは、ポリシー・マネージャ・サービスをホスティングするアクセス・サーバーへの1つ以上の接続を表します。アプリケーションでは、リクエストの送信、ポリシー・オブジェクトの取得と設定、および構成オブジェクトの取得にObAccessManagerメソッドを使用します(構成オブジェクトの設定はこのリリースではサポートされていません)。

次の2つのダイアグラムには、ポリシー・マネージャAPIのJavaおよびCバインディングの構造が示されています。

どちらの構造でも、Access Clientとアクセス・サーバー間の通信はトランスポート・プロトコルにより提供されます。

ポリシー・マネージャAPIのJavaおよびCバインディング。
ポリシー・マネージャAPIのJavaおよびCバインディング。

5.1.1 マネージ・コードに関する注意

次の各項では、マネージ・コードの例はManaged C++として示されています。ただし、マネージ・コードは、Microsoft .NETのマネージ・コードのフレームワークでサポートされている任意の言語で記述できます。

マネージ・コードのAPIは、CおよびJavaのAPIによく似ています。クラスおよびメソッド名がAPI間でよく似ています。主な相違点は次のとおりです。

  • 各種条件の指定に使用するC列挙子は、管理クラスでラップされます。

  • 一部のメソッド名は、プロパティのネーミング規則に基づいて変更されました。プロパティは、ユーザーによるオブジェクトの値の読取りと書込みを可能にするという点で、メンバー変数に似ています。ただし、プロパティはgetおよびsetメソッドを使用して実装されます。

すべての管理クラス名には末尾にMgdタグが追加されます。管理ヘルパー・クラスは、付録F「管理ヘルパー・クラス」で説明されています。

5.2 開発環境

ポリシー・マネージャAPIはAccess Manager Software Developer's Kit(SDK)のサブセットです。このSDKにより、Access Manager APIもサポートされます。この項では、インストールされたAccess Manager SDKディレクトリおよびサブディレクトリの構造と、ビルド・プロセスの初期の手順について説明します。インストール・プロセスの詳細は、付録D「Access Manager SDKのインストール」を参照してください。

5.2.1 インストール場所

Access Manager SDKは、アクセス・サーバーとは別の製品としてパッケージされており、別の手順でインストールする必要があります。SDKは、APIを使用してビルドするアプリケーションを実行するシステムにインストールすることをお薦めします。SDKを実際にインストールする場所に留意してください。インストール場所は、後で設定する各種のパス定義に含める必要があり、この章の残りの部分ではsdk_install_dirと記載されます。たとえば、Windowsのプログラミング環境では、インストール・ディレクトリとして次のパスを指定できます。

C:\COREid\AccessServerSDK


注意:

アクセス・サーバーはAccess Manager SDKとは別の製品であり、デフォルトで別のロケーションにインストールされます。カスタム認証および認可プラグインの作成に使用できるAPIの詳細は、第6章「認証プラグインAPI」および第7章「認可プラグインAPI」を参照してください。

5.2.2 インストール内容

インストール・ディレクトリ内には、次のディレクトリと内容が含まれています。

apidoc: JavaバージョンのAPIのオンライン・ドキュメントがHTML形式で含まれています。このドキュメントでは、2つの異なるパッケージについて説明しています。1つ目のパッケージはcom.oblix.accessであり、ポリシー・マネージャAPIとAccess Manager APIの両方で使用されます(第4章「Access Manager SDKを使用したアクセス・ゲートのビルド」を参照)。2つ目のパッケージはcom.oblix.accessmgrであり、ポリシー・マネージャAPIでのみ使用されます。

examples: サンプルのビルド・ファイルとmakeスクリプト、およびサンプル・アプリケーションがサブディレクトリに含まれています。サブディレクトリobaccessには、サンプル・サーブレットと、サーバー・アプリケーションのstartupおよびshutdownクラスの拡張に使用できる、クラスのプロトタイプが含まれています。

include: obaccessライブラリ用のC++およびCクラスを構成するクラス、メソッドおよび関数を定義するヘッダー・ファイルが含まれています。obaccessmgr_api.hファイルには、ポリシー・マネージャAPIのC関数の説明が含まれています。

oblix: 次の5つのサブディレクトリとその内容が含まれています。

apps: エラーが発生した場合にアクセス・ゲートで使用されるメッセージからなるnetlibmsg.lstファイルが含まれています。これは、パスcommon/binにあります。アクセス・ゲートの構成により、これらのメッセージはローカルに記録されるか(アクセス・ゲートがログを保持するように構成されている場合)、ローカルに表示されるか、無視されます。

config: インストール直後は何も含まれていません。構成ツールを実行してアクセス・ゲートを簡易モードまたは証明書モードで実行するように設定すると、アクセス・ゲートの構成データがこのディレクトリに格納されます。構成データには、暗号化されたパスワード・ファイルや、暗号化に使用する鍵のランダム・シードが含まれます。アクセス・サーバーへの接続を保護すると、公開鍵の証明書データもこのディレクトリに格納されます。

lib: アプリケーションに組み込まれるAccess Manager SDKライブラリおよびJavaアーカイブ・ファイルが含まれています。

  • 各種ライブラリ・ファイル: APIに必要なライブラリが含まれています(NTおよびWindows 2000ではobaccess.dll、SolarisおよびAIXではobaccessmgr.so、HP-UXではobaccessmgr.sl)。これらの各ライブラリには、ポリシー・オブジェクト、構成オブジェクトおよびObAccessManagerの完全な実装が含まれています。ObAccessManagerでは、各プラットフォームに適したaaa_clientライブラリのメソッドを使用して、ポリシー・マネージャ・エンジンをホスティングする1つ以上のアクセス・サーバーと通信します。

    obaccessライブラリには、ポリシー・オブジェクト、一部の構成オブジェクト用のget関数、およびObAccessManager関数のサブセットも含まれています。このライブラリには、Javaバインディングで使用されるネイティブ側のJNIインタフェースもあります。

  • jobaccess.jar: API用のJavaアーカイブ・ファイル。com.oblix.accessとcom.oblix.accessmgrの2つのパッケージが含まれています。com.oblix.accessにある複数のメソッドはポリシー・マネージャAPIによりアクセス・サーバーとの通信に使用されます。com.oblix.accessmgrパッケージにはその他すべてのポリシー・マネージャAPIメソッドが含まれています。

  • ObAccessGate.msg: アクセス・ゲートで必要に応じて表示されるメッセージのテキストが含まれています。

  • ObAccessClient.xmlファイル: アクセス・ゲートで使用される構成ファイルの例。このファイルの内容とアクセス・ゲートの変更方法の詳細は、『Oracle Access Managerアクセス管理ガイド』を参照してください。

orig: SDKのインストール中に作成された情報が含まれています。このディレクトリは無視できます。

tools: 次の3つの重要なディレクトリが含まれています。

  • configureAccessGateディレクトリ: アクセス・ゲートおよびアクセス・ゲートで必要なメッセージを構成するためのツールが含まれています。

  • migrationtoolsディレクトリ: 旧バージョンのAPIを移行するために役立つ情報が含まれています。

  • opensslディレクトリ: アクセス・ゲートを簡易モードまたは証明書モードでの操作用に構成するためのツールおよび証明書ファイルが含まれています。

samples: Java、CおよびC++の各バージョンのスタンドアロンのアクセス・テスト・アプリケーションと、ポリシー・マネージャAPIアプリケーションの例が含まれています。これらのアプリケーションを使用すると、複雑なアプリケーションを作成するための準備ステップとしてSDKのビルド・プロセスを把握することが可能になります。


注意:

SDKのインストール後は、SDK内のサブディレクトリとファイルの相対位置を変更しないでください。変更すると、APIが正しくビルドおよび操作できなくなります。

5.2.3 アクセス・ゲートのビルドの概要

ポリシー・マネージャAPIを使用してアクセス・ゲートを実装するアプリケーションをビルドする前に、特定の環境変数の設定または変更が必要です。

5.2.3.1 環境変数

APIコンポーネントが正しくロケーティングされるようにするには、APIを使用するアプリケーションをコンパイルする前に、いくつかの環境変数を設定する必要があります。詳細は、「環境変数の設定」を参照してください。

5.2.3.2 ビルド・プロセス

サーブレットを作成してJARファイルをビルドするためのサンプル・ファイルは、examplesディレクトリ内の複数のサブディレクトリに含まれています。「インストール内容」を参照してください。

5.2.4 構成ファイル

APIを使用してビルドするアクセス・ゲートは、適切に構成する必要があります。構成が適切でない場合は、アクセス・ゲートはアクセス・サーバーと対話できなくなります。アクセス・ゲートを構成するには、アクセス・ゲートが実行されているシステムにある構成ファイルの内容を設定します。このファイルの内容と使用方法、およびアクセス・ゲートの変更方法の詳細は、『Oracle Access Managerアクセス管理ガイド』を参照してください。

5.3 ポリシー・マネージャAPIによるコーディング

ポリシー・マネージャAPIには、アクセス・システムの標準のポリシー・マネージャ・ユーザー・インタフェースと同等の機能があります。このAPIには、これらのユーザー・インタフェースで管理されるデータ・オブジェクトを表現および管理できるクラスが含まれています。

アクセス・システム構成オブジェクト: 認証および認可スキーム、ホスト識別子、リソース・タイプ、マスター監査ルールなど、アクセス・システム・コンソールで管理されるデータを表します。これらのオブジェクトの説明は「アクセス・システム構成オブジェクト」にあります。

アクセス・ポリシー・オブジェクト: ポリシー・ドメインおよびそのすべての下位情報(ポリシー、認証、認可、監査および管理のルール、認可条件式)など、ポリシー・マネージャGUIで管理されるデータを表します。これらのオブジェクトの説明は「アクセス・ポリシー・オブジェクト」にあります。

ObAccessManagerクラス: アクセス・サーバーへの接続、アクセス・ポリシー・オブジェクトの作成、取得、変更および削除、アクセス・システム構成オブジェクトの取得を可能にします。このクラスには、アクセス・ポリシーをテストするメソッドもあります。このクラスの説明は「ObAccessManagerクラス」にあります。

例外クラス: 発生する可能性のあるエラーを捕捉および表示するためのメソッドが含まれています。説明は「ObAMExceptionクラス」にあります。

5.3.1 APIの表記規則

ポリシー・マネージャAPIはオブジェクト指向プログラミングの概念に基づいています。この概念では、クラスにオブジェクトとメソッドを定義し、クラス内のメソッドがオブジェクトの内容を操作します。

ポリシー・マネージャAPIのクラスは、Javaプログラミング言語でマネージ・コード・クラスとして実装されています。ポリシー・マネージャAPIには、これと同等のCプログラミング言語の実装も含まれています。サポートされている言語用のクラスおよび関数の定義は、付録B「ポリシー・マネージャAPIの定義」にあります。


注意:

この章の例では、マネージ・コードはManaged C++で示されています。ただし、マネージ・コードは、Microsoft .NET Frameworkによってマネージ・コード用にサポートされている任意の言語(Visual Basic、C#、C++を含む)で記述できます。

5.3.1.1 プログラムおよび実装のための表記規則

Javaでは、メソッドは参照によりコールされます。アプリケーションでは、オブジェクトがどのクラスに作成され、どのメソッドを使用するかを認識します。たとえば、myauthruleという名前の認証ルールを作成してからこのルールの説明を設定するには、Javaで次のコードを記述します。

  ObAMAuthenticationRule myauthnrule = new ObAMAuthenticatonRule[];
  myauthnrule.setDescription(ÒThe description textÓ);

マネージ・コードでは、メソッドの使用方法は実装言語によって異なります。たとえば、認証ルールとその説明を作成するには、次のコードを記述します。

  ObAMAuthenticationRuleMgd *myauthnrule = new
  new ObAMAuthenticatonRule();
  myauthnrule->Description=ÒThe description textÓ;

C実装は、基礎となる構造セットへの隠されたポインタを頻繁に使用して、Javaでの動作を模倣します(ただし、構造セットの中の最上位レイヤーを参照するのみで済みます)。

クラスおよびオブジェクトは、その構造へのポインタにより参照されます。オブジェクトを作成すると、そのオブジェクトを定義した構造へのポインタが戻されます。ポインタ型は、常にオブジェクトのクラス名の末尾にテキスト_tが追加されたものになります。C関数を使用してオブジェクトの構造のメンバーを変更する場合は、参照先のオブジェクトを示すため、ポインタを引数として指定します。変更に使用する擬似メソッド名の定義は、構造を変更するオブジェクトのクラス名を前に追加しただけのものです。Cでは、myauthruleという名前の認証ルールを作成してそのルールの説明を設定するには、次のコードを記述します。

  ObAMAuthenticationRule_t myauthnrule;
  myauthnrule = ObAMAuthenticationRule_new();
  ObAmAuthenticationRule_setDescription(myauthnrule, ÒThe description textÓ)

5.3.1.2 ネーミング規則

クラス、オブジェクトおよびメソッドにはすべて、その内容または機能を最大限に示す名前が付けられています。たとえば、ObAMAuthenticationRuleクラスには、認証ルール・オブジェクトを操作するためのメソッドがあります。このクラスでは、メソッドsetDescriptionは認証ルール・オブジェクトの説明を追加するために使用されます。ObAMAuthenticationRuleクラスには、認証プロセスの結果に応じて実行されるアクションを関連付けることができます。

ObAMAuthenticationRuleクラスは抽象クラスObAMObjectWithActionsを自動的に継承し、この抽象クラスから継承して自分のものとなったメソッドを使用してアクションを処理します。ほとんどのクラスのメソッドと同様に、ObAMObjectWithActionsクラスのメソッドにもわかりやすい名前が付いています。アクションを使用するクラスはすべてObAMObjectWithActionsクラスを継承します。このため、ObAMObjectWithActionsクラスのメソッドの名前は一般的です。たとえば、このクラスにはaddActionofTypeという名前のメソッドが含まれています。

5.3.2 新規オブジェクトの作成

各クラスには、そのクラスの空のオブジェクトをビルドするためのコンストラクタとして機能するメソッドがあります。Javaでは組込みメソッドであるnew()を使用してこれを行い、その空の新規オブジェクトが参照により操作されます。C版のコンストラクタは、作成するオブジェクトの末尾にテキスト_newが追加された名前になります。このコンストラクタによりポインタが戻されます。このポインタの型は、オブジェクトのクラス名の末尾に_tが追加されたものになります。

たとえば、新規ポリシー・オブジェクトをJavaで作成するには、次のコードを記述します。

  ObAMPolicy mypolicy = new ObAMPolicy();

マネージ・コードでは、新規ポリシー・オブジェクトをManaged C++で作成するには、次のコードを記述します。

  ObAMPolicyMgd * mypolicy = new ObAMPolicyMgd();

Cでは、次のようなコードを記述します。

  ObAMPolicy_t mypolicy;
  mypolicy = ObAMPolicy_new();

5.3.3 既存オブジェクトのコピー

各クラスには、そのすべてのメンバーなど、同じクラスの既存オブジェクトをコピーするコピー・コンストラクタに相当するものがあります。Javaでは、clone()メソッドを使用してオブジェクトをコピーします。コピーされた新規オブジェクトは参照により操作されます。クローニングされたオブジェクトは正しいクラスにキャストしてください。

これに相当するC関数は、クラスの末尾にテキスト_copyが追加された名前になります。この関数により、新規オブジェクトへのポインタが戻されます。この関数は、コピー元のオブジェクトの名前を引数として取ります。

たとえば、Javaでaction1という既存のアクション・オブジェクトをコピーして新規オブジェクトaction2をコールするには、次のコードを記述します。

  ObAMAction action2 = (ObAMAction) action1.clone();

Managed C++では、次のようなコードを記述します。

  ObAMActionMgd *action2=(ObAMActionMgd *) action1->Clone();

Cでは、次のようなコードを記述します。

  ObAMAction_t action2;
  action2 = ObAmAction_copy(action1);

5.3.3.1 オブジェクトの明示的なクローニングの概要

オブジェクトをクローニングするには、それを明示的にコピーする必要があります。たとえば、既存オブジェクトに新規の値を設定し、そのオブジェクトのクローニング先のポリシー・ドメインにそのオブジェクトを追加しても、クローニングを行うことはできません。次のコードの抜粋では、resource1というリソース・オブジェクトの暗黙的なクローニングを試みます。

  ObAMResource resource = new ObAMResource();
  resource.setResourceType(ÒhttpÓ);
  resource.setHostID(Òhost1Ó);
  resource.setURLPrefix(Ò/myresource1Ó);
  domain.addResoure(resource);
  resource.setURLPrefix(Ò/myresource2Ó);
  domain.addResource(resource);

アクセス・サーバーではこのコードを、最初のリソースのURLを/myresource1から/myresource2に変更する試みとして解釈します。resourceというリソース・オブジェクトはポリシー・ドメインにすでに追加されています。アクセス・サーバーでは次のコード行を、そのリソースをクローニングするのでなく、単にリソースのURLを変更するだけの命令として解釈します。

  resource.setURLPrefix("/myresource2");

コードの最終行で同じリソースをドメインに再度追加しようとすると、アクセス・サーバーではこのリソースがすでに存在することを報告します。

目的のタスクを正しく実行するには、オブジェクトのコピーを作成し、そのプロパティのいずれかの現在の値を必要に応じて変更します。オブジェクトをクローニングする方法の例を次に示します。このコード抜粋では、ポリシー・ドメインへの2つのリソースの追加を試みます。追加する2番目のリソースは、タイプおよびホストIDが最初のリソースと同じです。

  ObAMResource resource1 = new ObAMResource();
  resource1.setResourceType(ÒhttpÓ);
  resource1.setHostID(Òhost1Ó);
  resource1.setURLPrefix(Ò/myresource1Ó);
  domain.addResource(resource1);
  ObAMResource resource2 = (ObAMResource) resource1.clone();
  resource2.setURLPrefix(Ò/myresource2Ó);
  domain.addResource(resource2);

ここでの目的は、タイプがhttp、ホストIDがhost1、URLが/myresource1のリソースをdomainというポリシー・ドメインに追加することです。このコードでは、タイプがObAMResourceのresource1というオブジェクトが作成され、その値が設定されます。次に、resource1がポリシー・ドメイン(domain)に追加されます。

最初のリソースがドメインに追加されたら、次の目的は、同じタイプ(http)の別のリソースを同じホスト(host1)に追加することです。このリソースのURLは/myresource2です。

この目的のために、resource1をクローニングしてresource2というオブジェクトを作成します。resource2はresource1のすべてのプロパティを継承します。変更するプロパティはURLのみです。resource2のURLを/myresource2に設定します。

5.3.4 オブジェクトの削除

各クラスには、メンバー・オブジェクトなどのオブジェクトに使用されるメモリーを割当て解除するデストラクタに相当するものがあります。


注意:

メンバー・オブジェクトとは、プライマリ・オブジェクトに含まれるオブジェクトのことです。たとえば、AdminRuleオブジェクトに含まれるIdentityオブジェクトのことです。

Javaでは、実際にはデストラクタは使用せず、参照されなくなったオブジェクトのガベージ・コレクションを行います。

マネージ・コードは、ガベージ・コレクタの使用方法がJavaに似ています。スコープ外になって参照されなくなったオブジェクトが、自動的に削除されます。

Cでは、特別な関数が使用されます。この関数は、オブジェクトが属するクラスの末尾に_deleteが追加された名前になります。この関数は、削除するオブジェクトのポインタのポインタを唯一の引数として取ります。この入れ子のポインタは、この関数で、最初にオブジェクトのメモリーを割当て解除するために使用され、次に、オブジェクトの削除後にオブジェクト・ポインタをNULLにリセットするために使用されます。

たとえば、CでObAMPolicyクラスからactionnameという既存のアクションを割当て解除するには、次のコードを記述します。

ObAMPolicy_delete(&actionname);

5.3.5 単一値のオブジェクト・メンバーのデータの管理

オブジェクトには、単一値のデータ・メンバーを持つメンバーを含めることや、データまたはオブジェクトの配列を含めることができます。たとえば、ポリシー・ドメインには、ポリシーの各リソース・タイプに対して複数のリソース(オブジェクトの配列)と複数の操作(文字列の配列)を持つ配列を含めることができます。

この項では、単一値のデータ・メンバーを含むオブジェクトの管理方法について説明します。

5.3.5.1 単一値のオブジェクト・メンバーに対するデータの設定

各クラスの最初にあるメソッドは、クラス内のオブジェクトの単一値メンバーに対して内容を設定するメソッドです。この場合、データは文字列、整数、ブール型フラグまたはオブジェクトへの参照になります。メソッド名は常にset<widget>です(widgetは設定する情報のタイプ)。Javaでは、メンバーの新規データは参照により設定され、メンバーの古いデータはガベージ・コレクションの対象になる場合があります。

マネージ・コードAPIでは、1つの値のみを取るsetメソッドが、データ・メンバーに直接アクセスしているかのように、使用されます。たとえば、ObAMAuthenticationRuleMgdクラスに説明を設定する場合、setメソッドはデータ・メンバーであるかのように処理されます。

  myauthnrule->Description = "The description text";

Cはこれより多少複雑です。最初に使用されるsetメソッドにより、ソース・オブジェクトへの参照が格納されます。同じソース・オブジェクトに対して次に使用されるsetにより、ソースから受取り側オブジェクト・メンバーへのコピーが行われます。Cのset関数は常に引数を2つ取ります。最初の引数は常に、データを設定するオブジェクトの名前です。set関数で値を挿入する場合は、2番目の引数はその値になります。setでオブジェクトへの参照を挿入する場合は、2番目の引数はその参照になります。

たとえば、リソース・タイプ(文字列)の値を設定してmyauthrule1という認証ルール(オブジェクト)をmypolicyという既存のポリシーに追加するコードは、Javaでは次のようになります。

  mypolicy.setResourceType("http"); mypolicy.setAuthenticationRule(myauthrule);

Managed C++では次のようになります。

  mypolicy->ResourceType="http";
  mypolicy->AuthenticationRule=myauthrule;

Cでは次のようになります。

  ObAMPolicy_setResourceType(mypolicy, "http");
  ObAMPolicy_setAuthenticationRule(mypolicy, myauthrule);

5.3.5.2 単一値のオブジェクト・メンバーのデータの取得

各クラスには、単一値のデータ・メンバーの内容の取得に使用されるgetメソッドがあります。JavaとCでは、値が設定されていない場合、このメソッドによりNULLが戻されます。関数名は常にgetwidgetです(widgetは取得する情報のタイプ)。Javaでは、オブジェクトは参照により指定されます。Cでは、オブジェクト名は関数への引数として指定されます。

たとえば、ポリシー名の値を取得するメソッドと、mypolicyというポリシー・オブジェクト内の認証ルール・オブジェクトへのポインタを取得するメソッドは、Javaでは次のように表現されます。

  namevar = mypolicy.getName();
  rule1 = mypolicy.getAuthenticationRule();

Managed C++では次のようになります。

  namevar = mypolicy->Name;
rule1 = mypolicy->getAuthenticationRule;

Cでは次のようになります。

  const char *namevar;
  amevar = ObAMPolicy_getName(mypolicy);
  ObAMAuthenticationRule_t rule1;
          rule1 = ObAMPolicy_getAuthenticationRule(mypolicy);

5.3.6 配列の管理

それぞれが独自の値を持つ複数の要素を含んでいるオブジェクト・メンバーは、0から始まるインデックスが付けられる配列として編成されます。配列の要素の情報を取得するには、インデックスとして指定されている配列内の位置に基づいてその情報を要求する必要があります。

オブジェクトには、値または別のオブジェクトの配列を含めることができます。この項では、オブジェクトの配列メンバーに対して実行できる関数の種類について説明します。内容は次のとおりです。

5.3.6.1 キーの概要

多くのオブジェクトにはキー・メンバーが含まれています。キー・メンバーは、オブジェクトにメンバー・オブジェクトからなる配列が含まれている場合に便利です。キーにより、リクエストされた操作を実行する前に、メソッドで配列内のメンバー・オブジェクトを検索できます。


注意:

配列を構成するオブジェクト・メンバーに対するsetメソッドは用意されていません。かわりに、古い値を新規の値と置換する必要があります。たとえば、(ポリシー・クラスの)ポリシー・オブジェクトに対する操作からなる配列に含まれる操作の値を変更するには、古い値の削除と新規の値の追加という2つの手順を実行する必要があります。

5.3.6.2 配列へのデータの追加

配列を含むオブジェクトには、配列への新規メンバーの追加を可能にするメソッドがあります。値の配列の場合は、その値が配列に追加され、配列内の要素の数が1つ増えます。オブジェクトの配列の場合は、新規オブジェクトへの参照が追加され、配列内の要素の数が1つ増えます。メソッド名は常にadd<widget>です(widgetは追加する情報のタイプ)。Java、マネージ・コードおよびCでは、メソッドは追加する値または追加するオブジェクトの名前を引数として取ります。

たとえば、mypolicyというポリシー・オブジェクトに別の操作(文字列)または別のリソース(オブジェクト)を追加する場合、Javaコードは次のようになります。

  mypolicy.addOperation("GET");
  mypolicy.addResource(myresource);

Managed C++コードは次のようになります。

  mypolicy->AddOperation="GET";
  mypolicy->AddResource=myresource;

これに相当するCコードでは、追加の引数(値またはオブジェクトの追加先のオブジェクト)が必要であり、このコードは次のようになります。

  ObAMPolicy_addOperation(mypolicy, "GET");
  ObAMPolicy_addResource( mypolicy, myresource);

5.3.6.3 配列内のオブジェクトのデータの変更

オブジェクトに含めることができるメンバー・オブジェクトの配列では、メンバー・オブジェクトの値を変更することができます。このためには、メンバーをオブジェクトから取得してそのデータを変更してから、メンバーをオブジェクトに再度格納します。これをより簡単に行うには、空のメンバー・オブジェクトを作成し、変更が必要なデータをこのオブジェクトに入力してから、オブジェクトの配列内のメンバー・オブジェクトの既存のバージョンをmodifyメソッドで上書きします。

配列内のオブジェクトのデータを変更する手順

  1. (オブジェクトの配列の)空のメンバー・オブジェクトを作成します。デフォルトでは、このすべてのメンバーにNULLが入力されます。

  2. 空のメンバー・オブジェクト内のキー・メンバーの値を、上書きするメンバー・オブジェクト内のキー・メンバーの値と一致するように設定します。


    注意:

    キー・メンバーがどれかを調べるには、オブジェクト・タイプごとの表を参照してください。

  3. 変更するメンバー・オブジェクトのメンバーに値を設定します。変更しないメンバーの値はNULLに設定されたままにします。

  4. modifyメソッドを使用して古いメンバー・オブジェクトを上書きします。関数名は常にmodify<widget>です(widgetは変更するオブジェクトのタイプ)。modifyは、ソース・メンバー・オブジェクトの名前を唯一の引数として取ります。キー・メンバーの値に基づいて、modifyでは一致するメンバー・オブジェクトを検索します。ソース・メンバー・オブジェクトのメンバーがNULLに設定されている場合、受取り側メンバー・オブジェクト内の値は変更されません。メンバーに対する値が指定されている場合、受取り側メンバー・オブジェクトでその値への変更が行われます。

たとえば、リソース・タイプであるメンバーがEJBであるリソースの説明を変更する場合に、そのリソースがポリシー・オブジェクトmypolicyのリソース・オブジェクトにおける配列のリソース・メンバーの1つであるとします。

この変更をJavaで行うには、次のコードを記述します。

  ObAMResource exmplResr = new ObAMResource();
  exmplResr.setResourceType("EJB");
  exmplResr.setDescription(ÒThe New DescriptionÓ);
  mypolicy.modifyResourceType(exmplResr);

この変更をManaged C++で行うには、次のコードを記述します。

  ObAMResource *exmplResr
            exmplResr = new ObAMResource();
  exmplResr->ResourceType="EJB";
  exmplResr->Description=ÒThe New DescriptionÓ;
  mypolicy->ModifyResourceType=exmplResr;

同じ操作をCで行うには、次のコードを記述します。

  ObAMResource_t exmplResr;
          exmplResr = ObAMResource_new();
  ObAMResource_setResourceType(exmplResr, "EJB");
  ObAMResource_setDescription (exmplResr,"The New Description");
  ObAMPolicy_modifyResourceType(exmplResr, exmplResr);

5.3.6.4 配列内のメンバーの数の取得

それぞれが独自の値を持つ複数の要素を含んでいるメンバーは、0から始まるインデックスが付けられる配列として編成されます。アプリケーションでは、配列の任意の要素の値を取得できます。このためには、リクエストされた要素の値を戻すgetメソッドを使用します。ただし、配列の要素の情報を取得する際には、配列内での位置を指定してその情報を要求する必要があります。

アプリケーションでgetメソッドをコールして配列の要素の値を取得する前に、配列に含まれるメンバーの数を確認する必要があります。このためには、getnumberof<widget>メソッドを使用します(widgetは配列に含まれる情報のタイプ)。

このメソッドのJavaバージョンでは、オブジェクト名は参照で戻し、引数は取りません。Cバージョンでは、唯一の引数としてオブジェクトの名前を取ります。

次に、mypolicyという名前のポリシー・ドメインに対するポリシー・オブジェクト内のリソースの数または操作の数を取得するJavaコードの例を示します。

  mypolicy.getNumberOfResources();
  mypolicy.getNumberOfOperations();

これと同等のManaged C++コードは次のとおりです。

  int resNumber = mypolicy->NumberOfResources;
  int operNumber = mypolicy->NumberOfOperations;

これと同等のCコードは次のとおりです。

  ObAMPolicy_getNumberOfResources(mypolicy);
  ObAMPolicy_getNumberOfOperations(mypolicy);

5.3.6.5 配列の要素のデータの取得

アプリケーションでgetNumberOfwidgetsメソッドをコールして配列の要素の数を取得した後は、配列の要素の値を取得できます。取得する値を含む配列の要素のインデックスを、適切なgetメソッドに渡します。


注意:

このgetメソッドを、単一値データの値の抽出に使用するgetメソッドと混同しないでください。どちらを使用するかは、メンバー・タイプから判断できます。メンバー・タイプが配列の場合、getにより、配列内の要素の値が要求されます。これに応答して、メソッドに要素のインデックスを渡す必要があります。

Javaメソッドはインデックスを唯一の引数として取ります。C関数はインデックスを2番目の引数として取ります。C関数では、最初の引数は、データの取得元のメンバーを格納しているオブジェクトの名前です。

たとえば、mypolicyというポリシー・ドメインから、操作の配列内の1つの操作の値、またはポリシーの配列内の1つのポリシーの値を取得するJavaコードは、次のとおりです。

  mypolicy.getOperation(myindex);
  mypolicy.getPolicy(myindex);

Managed C++コードは次のとおりです。

  System::String *operation = mypolicy->getOperation(myindex);
  ObAMPolicyDomainMd *policy = mypolicy->getPolicy(myindex);

Cコードは次のようになります。

  ObAMPolicyDomain_getOperation(mypolicy, myindex);
  ObAMPolicyDomain_getPolicy(mypolicy, myindex);

5.3.6.6 配列からのデータ削除

値またはメンバー・オブジェクトの配列を含んでいるオブジェクトには、配列のメンバーを削除するためのメソッドが含まれています。削除を行うには、削除対象として一致させる値を指定します。値の配列の場合は、指定した値の1つで一致が行われます。メンバー・オブジェクトの配列の場合は、オブジェクトのキー・メンバーに格納されている値で一致が行われます。


注意:

キー・メンバーがどれかを調べるには、オブジェクト・タイプごとの表を参照してください。

JavaおよびCではともに、一致させる値を引数として取ります。Cでは、これは2番目の引数になります。1番目の引数は、値を削除するオブジェクトです。

たとえば、ポリシーmypolicyから操作GETを削除する場合のJavaコードは次のとおりです。

  mypolicy.removeOperation("GET");

Managed C++コードは次のとおりです。

  mypolicy->removeOperation="GET";

Cコードは次のとおりです。

  ObAMPolicy_removeOperation(mypolicy, "GET");

5.3.7 setIDFromの使用方法

アクセス・サーバーから受信されるすべてのオブジェクトの構造には、オブジェクト名などの重要情報に加えて一意のオブジェクト識別子が含まれています。同じタイプの別のオブジェクトのIDに同じ値を設定することができます。2番目のオブジェクトを一部変更し、modifyを使用して元のオブジェクトに対してこの変更を書き込むことができます。簡単な変更を行うには、コピーよりもこの方法のほうが優れています。変更されないデータのコピーにかかる処理時間が不要になるためです。

JavaおよびCではともに、コピーするIDを持つオブジェクトの名前を引数として取ります。Cでは、2番目の引数になります。1番目の引数は、IDの設定先とするオブジェクトです。

たとえば、workingpolicyというポリシーのIDを、既存のoldpolicyというポリシーのIDに設定する場合のJavaコードは次のとおりです。

  workingpolicy.setIDFrom(oldpolicy);

これと同等のManaged C++コードは次のとおりです。

  workingpolicy->IDFrom=oldpolicy;

これと同等のCコードは次のとおりです。

  ObAMPolicy_setIDFrom(workingpolicy, oldpolicy);

5.3.8 列挙の使用

特定のオブジェクト・メンバー向けに事前定義された有効な入力のセットを表す目的で、整定数の値が使用されます。これらの値は、この章ではオブジェクトの説明の一部としてリストされています。たとえば、ObAMActionクラスには、3つの値を持つ列挙があります。

  UNDEFINED = 0;
  FIXEDVALUE = 1;
  ATTRIBUTE = 2;

プログラマがポリシー・マネージャAPIを使用して不正な列挙値をオブジェクトに渡す可能性もあります。このようなエラーを捕捉するために、Javaバインドでは実行時に列挙値がチェックされ、不正な値が渡された場合には、ObAMExceptionがスローされます。

マネージ・コードでは、次のメソッドを持つObAmAction_ValueTypeMgdクラスが使用されます。

  isUndefined  isAttribute  isFixedValue  setUndefined

マネージ・コードでは、必要な列挙すべてがオブジェクトとしてラップされています。各列挙には、不可欠なgetterメソッドおよびsetterメソッドが備わっています。たとえば、ObAMAction_ValueTypeの列挙は、オブジェクトであるObAMAction_ValueTypeMgdクラスにラップされています。このクラスを作成し、値タイプをFixedValueに設定するには、次のようなコードを記述します。

  ObAMAction_ValueTypeMgd valueType = new
  ObAMAction_ValueTypeMgd();
  valueType->setFixedValue();
  if (valueType->isFixedValue == true) {
       <do something here>
  }

アクセス・サーバー内のポリシー・マネージャ・コードは、それに送信された入力の列挙値に対して、誤った書式のリクエストがないかのチェックも行います。エラーが存在する場合、リクエスト元のObAccessManagerメソッドがエラーを受信し、例外をスローします。

5.3.9 ObAccessManagerクラス

ObAccessManagerオブジェクトは、ポリシー・マネージャAPIによってアクセス・サーバーと対話するために使用されるメイン・オブジェクトです。各ObAccessManagerオブジェクトが、1つ以上のアクセス・サーバーへの接続を表します。これらのアクセス・サーバーには、ポリシーまたはシステム構成オブジェクトを取得または設定するためのリクエストを送信できます。ObAccessManagerオブジェクトでは、次の機能を実行するメソッドがサポートされています。

  • ポリシー・マネージャ・オブジェクトのビルド

  • アクセス・サーバーへの接続

  • 特別な種類のgetを使用した、既存のトップ・レベルのオブジェクトのリスト

  • 特別な種類のsetを使用した、新規ポリシー・ドメインの値設定、または既存ポリシー・ドメインの値変更

  • アクセス・サーバーへのアクセスのテスト

5.3.9.1 AccessManagerオブジェクトを処理するメソッド

名前付きのAccessManagerオブジェクトを作成し、ユーザーのログイン情報を定義するメソッドがあります。それらのメソッドとは次のとおりです。

  • AccessManagerオブジェクト用コンストラクタ

    これらには、説明済である標準のコンストラクタ構文が使用されます。「新規オブジェクトの作成」を参照してください。

    Javaを使用してAccessManagerの新規オブジェクトmyamを作成するには、次のコードを記述します。

      ObAccessManager myam = new ObAccessManager();
    
    

    Managed C++を使用してAccessManagerの新規オブジェクトmyamを作成するには、次のコードを記述します。

      ObAccessManagerMgd myam = new ObAccessManagerMgd();
    
    

    Cを使用してAccessManagerの新規オブジェクトmyamを作成するには、次のコードを記述します。

      ObAccessManager_t myam;
      myam = ObAccessManager_new();
    
    
  • AccessManagerオブジェクト用デストラクタ

    これらのプロセスには、説明済である標準のデストラクタ構文が使用されます。「オブジェクトの削除」を参照してください。Javaの場合、AccessManagerオブジェクトは参照されなくなると削除されます。

    Managed C++を使用してAccessManagerのオブジェクトmyamを削除するには、スコープから外します。ガベージ・コレクションにより、オブジェクトの削除が行われます。

    Cを使用してAccessManagerのオブジェクトmyamを削除するには、次のコードを記述します。

      ObAccessManager_delete(&myam);
    
    
  • setAdminメソッド

    このメソッドは、管理者のユーザーIDおよびパスワードを指定します。管理者のリクエストは必ず認可されます。管理者が存在しない、または、パスワードが正しくない場合は、ObAccessManagerによりコードADMIN_LOGIN_FAILEDの例外がスローされます。

    これをJavaで記述したコードの例は、次のとおりです。

      myam.setAdmin("A. Loomis", "ALoomisPassword");
    
    

    これをManaged C++で記述したコードの例は、次のとおりです。

      myam->setAdmin("A. Loomis", "ALoomisPassword");
    
    

    Cで記述したコードの例は、次のとおりです。

      ObAccessManager_setadmin_password(myam,ÒA. LoomisÓ,ÒALoomisPasswordÓ);
    
    
  • setCacheUpdatesメソッド

    このメソッドは、アクセス・サーバーのキャッシュをObAccessManagerのsetリクエストごとに更新するかどうかを指定するブール・フラグを設定します。

    これをJavaで記述したコードの例は、次のとおりです。

      myam.setCacheUpdates(true);
    
    

    これをManaged C++で記述したコードの例は、次のとおりです。

      myam->CacheUpdates=true;
    
    

    これをCで記述したコードの例は、次のとおりです。

      ObAccessManager_setCacheUpdates(myam, 1);
    

5.3.9.2 接続メソッド

ポリシー・マネージャAPIでは、ObConfigクラスに含まれるAccess Manager API接続メソッドが使用され、アクセス・サーバーとの1つ以上の接続が確立されます。次にあげる各メソッドの詳細は、「ObConfig」を参照してください。

  • 初期化メソッド

    初期化メソッドは、ポリシー・マネージャAPIがインストールされている(ローカル)ディレクトリ・パスを指定するオプションの引数を取ります。この引数を指定しない場合、ObAccessManagerはディレクトリ・パスを、ローカル環境変数OBACCESSMGR_INSTALL_DIRから取得します。

    初期化メソッドにより、インストール構成ファイルに指定されているアクセス・サーバーへの接続が確立されます。このファイルの説明および『Oracle Access Managerアクセス管理ガイド』のアクセス・ゲートの変更に関する項を参照してください。この接続は、次のいずれかの場合になるまで維持されます。

  • shutdownメソッドがコールされた場合。

  • 接続が無効になったため、同一または別の構成済アクセス・サーバーへの接続の再確立をObAccessManagerが試行する場合。

  • 構成済の(API)クライアント・セッション・タイムアウトが発生した場合。

    構成済のアクセス・サーバーへの接続が確立できない場合、ObAccessManagerはコードCANNOT_CONNECTを伴うObAMExceptionをスローします。

インストール・ディレクトリのロケーションを指定するためのローカル環境変数が設定されていることを前提に、Javaによるコールを次に示します。

  Obconfig.initialize();

Cでは次のとおりです。

  Obconfig_initialize(myam);

マネージ・コードでは、共通クラス用の名前空間は次のとおりです。

  Oblix::Access::Common

マネージ・コードでは、初期化メソッドはObConfigMgdクラスの静的メソッドです。

  ObConfigMgd.initialize();

  • shutdownメソッド

    shutdownメソッドは、すべての接続を閉じ、Access Clientが使用していたリソースを割当て解除します。

    これをJavaで記述したコーディング例は、次のとおりです。

      Obconfig.shutdown();
    
    

    Managed C++コードでは次のとおりです。

      ObConfigMgd.shutdown();
    
    

    Cでは次のとおりです。

      Obconfig_shutdown(myam);
    
    
  • getSDKVersionメソッド

    getSDKVersionメソッドは、ポリシー・マネージャAPIのビルドに使用されたAccess Manager SDKのバージョンを戻します。

    Javaでこのコールを行うには、次のコード行を記述します。

      theSDKv = Obconfig.getSDKVersion();
    
    

    Managed C++でこのコールを行うには、次のコード行を記述します。

      string theSDKv = ObConfigMgd.SDKVersion;
    
    

    Cでこのコールを行うには、次のようにします。

      char * theSDKv;
      theSDKv = Obconfig_getSDKVersion(myam);
    
    
  • getNAPVersionメソッド

    getNAPVersionメソッドは、アクセス・サーバーで定義されている方法でアクセス・サーバーと通信するために使用されるOracle Accessプロトコルのバージョンを戻します。

    Javaでこのコールを行うには、次のコード行を記述します。

      theNAPv = Obconfig.getNAPVersion();
    
    

    C++でこのコールを行うには、次のコード行を記述します。

      theNAPv = Obconfig.NAPVersion;
    
    

    Cで記述したコードの例は、次のとおりです。

      char * theNAPv;
      theNAPv = Obconfig_getNAPVersion(myam);
    

5.3.9.3 Getメソッド

ObAccessManagerのgetメソッドは、アクセス・サーバーを介してポリシー・ディレクトリから1つ以上のポリシー・ドメインまたは構成オブジェクトを戻します。開発者は、ObAccessManagerのgetメソッドを使用して、次のオブジェクトに関して複雑度の異なる様々な情報を取得できます。

  • AuthenticationScheme

  • AuthorizationScheme

  • HostIdentifier

  • MasterAuditRule

  • PolicyDomains

  • ResourceType

  • EscapeCharacter

getメソッドが戻すオブジェクトの配列は、次の引数に渡された値によって決まります。

  • matchName: オブジェクトを選択します。この値がNULLの場合、すべてのオブジェクトを戻します。

  • matchCriterium: matchNameによるオブジェクトの選択方法を指定します。

たとえば、ポリシー・ドメイン用のgetメソッドのプロトタイプをJavaおよびCの各プログラミング言語で記述すると次のようになります。

5.3.9.4 Java

public PolicyDomain[] ObAccessManager.getPolicyDomains( int responselength, String matchName, int matchCriterium)throws ObAMException;

5.3.9.5 C

ObAMArrayOfPolicyDomains_t ObAccessManager_getPolicyDomains(
        ObAccessManager_t am,
        ObAccessManager_ResponseLength responseLength,
        const char *matchName,
        ObAccessManager_MatchCriteria matchCriterium);

引数を使用すると、戻される各オブジェクト情報の詳細を開発者が制御できます。

  • am: Cプログラミング言語では、ObAccessManagerオブジェクトの名前はObAccessManager_new関数を使用して作成されます。

  • responseLength: 戻すオブジェクト情報の量を指定します。

    • レスポンスの詳細を調整するには、MIN、MID、およびMAXという3つのレベルがあります。responseLengthを省略すると、デフォルトでMINになります。

    • それぞれのgetメソッドでは、次の表で示すとおり、各レベルに対してどのデータ項目を戻すのかが暗黙的に認識されます。

    • プレースホルダは、オブジェクトを定義している構造内にあるすべてのデータに対して戻されます。MINおよびMIDは、戻す値がない項目に関しては、NULLポインタ/参照を戻します。

      responseLengthを指定する列挙値は次のとおりです。

      MIN = 0

      MID = 1

      MAX = 2

      オブジェクト・タイプ MIN MID MAX
      AuthenticationScheme -名前 -説明

      (事実上、すべての認証スキームをリスト)

      MINの値と同じ -レベル -チャレンジ・メソッド -チャレンジ・パラメータ -SSL必須 -チャレンジ・リダイレクト -プラグイン
      AuthorizationScheme -名前 -説明

      (事実上、すべての認可スキームをリスト)

      MINの値と同じ -共有ライブラリ

      -ユーザー・パラメータ

      -必須パラメータ

      -オプションのパラメータ

      EscapeCharacter (事実上、監査ルール内で使用されるUTF-8でエンコードされたすべてのエスケープ文字列を戻す) MINの値と同じ
      HostIdentifier -名前 -説明

      (事実上、すべてのホスト識別子をリスト)

      MINの値と同じ -ホスト名のバリエーション
      MasterAuditRule このオブジェクト・データのすべて。適用される基準なし MINと同じ MINと同じ
      PolicyDomain -名前 -説明 -リソース・タイプ -URL接頭辞 -有効/無効フラグ

      (事実上、ポリシー・ドメインを表示)

      -ドメイン名 -ポリシー名 -デフォルト・ルール名 -URL接頭辞

      (事実上、ポリシー・ドメインの検索結果を表示)

      -すべてのデフォルト・ルール -すべてのポリシー -すべての管理ルール
      ResourceType -名前 -表示名 MINの値と同じ -大/小文字を区別

      一致操作


  • matchName: matchCriteriumとともに、値を戻させる特定のオブジェクトを選択するために使用されます。matchNameの値は、各候補オブジェクトの「名前」メンバーの値と比較されます。matchNameを省略すると、クラス内のすべてのオブジェクトが取得されます。

  • matchCriterium: オブジェクト名をmatchNameと比較する方法を指定します。この比較は、matchNameが適用された後に適用されます。パラメータは、次の表に説明されているとおりです。matchCriteriumを省略した場合は、デフォルトでEQUALS = 0になります。

    matchCriteriumの列挙値は次のとおりです。

    EQUALS =0

    CONTAINS = 1

    CONTAINS_IN_ORDER = 2

    BEGINS_WITH =3

    ENDS_WITH =4

    パラメータ 意味
    EQUALS オブジェクト名を、指定された値と厳密に一致させます。
    CONTAINS オブジェクト名の中に、指定した文字列とまったく同じ文字列が含まれています。この文字列は他の文字の間に埋め込まれていてもかまいません。
    CONTAINS_IN_ORDER 指定した各文字を指定した順序で含む文字列を名前として持つオブジェクトと一致させます。ただし、連続する1つの文字列である必要はありません。

    たとえば、123を指定すると、01234および102030が一致として検出されます。

    BEGINS_WITH オブジェクト名が、指定した値で始まります。長さには制限がありません。
    ENDS_WITH オブジェクト名が、指定した値で終わります。長さには制限がありません。


    注意:

    セキュリティ関連の注意です。getPolicyDomainsメソッドは、ポリシー・マネージャ管理者が少なくとも基本管理権限を持つポリシー・ドメインおよびドメイン内のポリシーのみを戻します。これ以外のObAccessManager getメソッドでは、管理ユーザーがマスター・アクセス管理者である必要があります。

マネージ・コードの書式

マネージ・コードでは、getメソッドは、メソッドが属するクラス内のオブジェクトの配列を戻します。

ArrayList*ObAccessManagerMgd::getPolicyDomains(
       ObAccessManager_ResponseLengthMgd *responseLength,
       System::String *matchName,
       ObAccessManager_MatchCriteriaMgd *matchCriterium);

このAccessManagerMgd getメソッドにおける引数の設定には、ObAccessManager_ResponseLengthMgdおよびObAccessManager_MatchCriteriaMgdクラスが使用されています。

ObAccessManager_ResponseLengthMgdクラス

前述のAccessManagerMgd getメソッドにおけるresponseLength引数の設定には、ObAccessManager_ResponseLengthMgdクラスが使用されています。このクラスは、ObAccessManager_ResponseLength列挙に対するラッパーとなっています。

ObAccessManager_ResponseLengthMgdクラスには、getおよびsetメソッドがあります。値を設定するメソッドを次に示します。

ObAccessManager_ResponseLengthMgd();
__property void set_Value(ObAccessManager_ResponseLength value);
void setMin();
void setMid();
void setMax();

内容は次のとおりです。

setMin()は、列挙値MINと等価です。

setMid()は、列挙値MIDと等価です。

setMax()は、列挙値MAXと等価です。

ObAccessManager_MatchCriteriaMgdクラス

前述のAccessManagerMgd getメソッドにおけるMatchCriteria引数の設定には、ObAccessManager_MatchCriteriaMgdクラスが使用されています。このクラスは、ObAccessManager_MatchCriteria列挙に対するラッパーとなっています。

ObAccessManager_MatchCriteriaMgdクラスには、getおよびsetメソッドがあります。値を設定するメソッドを次に示します。

  ObAccessManager_MatchCriteriaMgd();
  __property void set_Value(ObAccessManager_MatchCriteria value);
  void setEquals();
  void setContains();
  void setContainsInOrder();
  void setBeginsWith();
  void setEndsWith();

内容は次のとおりです。

setEquals()は、列挙値EQUALSと等価です。

setContains()は、列挙値CONTAINSと等価です。

setContainsInOrder()は、列挙値CONTAIN_IN_ORDERと等価です。

setBeginsWith()は、列挙値BEGINS_WITHと等価です。

setEndsWith()は、列挙値ENDS_WITHと等価です。

5.3.9.6 getメソッドの例

oblixという文字列を含む名前を持つすべてのポリシー・ドメインの最低限の情報を取得するには、次のJavaコードを記述します。

  myam.getPolicyDomains(MIN, "oblix", CONTAINS);

Managed C++コードでは、次のようなコードを記述します。

  ObAccessManager_ResponseLengthMgd* len = new
  ObAccessManager_ResponseLengthMgd();
  ObAccessManager_MathCriteriaMgd *matchCriterium = new
  ObAccessManager_MatchCriteriaMgd();
  len->setMin();
  matchCriterium->setContains();
  policyDomains =  myam->getPolicyDomains(len, ÒOblixÓ,matchCriterium);

Cでは、次のようなコードを記述します。

ObAccessManager_getPolicyDomains(myam, ObAccessManager_MIN,
     ÒoblixÓ, ObAccessManager_CONTAINS);

5.3.9.7 setメソッド

APIにはObAccessManagerのsetメソッドが1つ用意されており、これはポリシー・ドメインのみを作成、変更および削除するプロセスで使用できます。Java、マネージ・コード、およびCの各プログラミング言語によるこのメソッドの定義を次の各項で示します。


注意:

他の、上位にあるオブジェクトに値を設定するには、そのコンテンツに特有のメソッドを使用します。これらのメソッドを次の各項に記載します。

Java

public void setPolicyDomain(ObAMPolicyDomain PDname, int setAction);
     throws ObAMException;

マネージ・コード

void setPolicyDomain(obAMPolicyDomainMgd
     *value, ObAccessManager_SetActionMgd *setAction);

Cの書式

void ObAccessManager_setPolicyDomain(
     ObAccessManager_t accessmanagerObjectName,
     ObAMPolicyDomain_t PDname,
     ObAccessManager_SetAction setAction);

Cによる定義におけるPDnameは、ポリシー・ドメインの名前を表します。setActionパラメータを使用して、指定のポリシー・ドメイン・オブジェクトに対して実行するアクションの種類を指定します。次に指定可能なアクションを示します。

  • CREATE: PolicyDomainオブジェクトを作成します。同名のオブジェクトがすでに存在する場合は、オブジェクトは作成されず、setメソッドは、既存のオブジェクトの名前とともにエラー・コードEXISTING_OBJECTを戻します。

  • MODIFY: 既存のPolicyDomainオブジェクトを変更します。オブジェクト内の指定データがすべて変更されます。指定しなかったデータは変更されません。指定したオブジェクトが存在しない場合は、setメソッドは、エラー・コードNO_OBJECTおよび存在しなかったオブジェクトの名前を戻します。

  • REMOVE: 既存のPolicyDomainオブジェクトを削除します。指定する必要があるのはオブジェクト名のみであり、オブジェクト以外の指定データはすべて無視されます。オブジェクトが存在しない場合は、setメソッドはエラー・コードNO_OBJECTおよび存在しなかったオブジェクトの名前を戻します。

    setActionの列挙値は次のとおりです。

    CREATE = 0

    MODIFY = 1

    REMOVE = 2


注意:

セキュリティ関連の注意です。ObAccessManagerの管理ユーザーは、setPolicyDomainをコールするには、対象となるポリシー・ドメインに対する基本管理権限を持っている必要があります。管理ユーザーは、setPolicyDomainでドメインの委任、付与または基本管理ルールを変更する場合、それを行うために必要な委任または付与権限を持っている必要があります。管理者が十分な権限を持っていない場合は、setメソッドはNOT_AUTHORIZEDエラー・コードを戻します。

たとえば、新規ポリシー・ドメインをJavaで作成するには、次のコードを記述します。

  myam.setPolicyDomain(mypolicy, CREATE);

Managed C++では、次のようなコードを記述します。

  public void setPolicyDomain(ObAmPolicyDomainMgd *pdName,
          ObAccessManager_SetActionMgd *setAction);

ここで、ObAccessManager_SetActionMgd setCreateメソッドを使用します。ObAccessManager_SetActionMgdクラスには、アクションを指定するための次のようなメソッドがあります。

  void setCreate() = CREATE enum
  void setModify() = MODIFY enum
  void setRemove() = REMOVE enum

Cでは、次のようなコードを記述します。

  AccessManager_setPolicyDomain(myam, mypolicy, ObAccessManager_CREATE);

5.3.9.8 アクセス・テスト・メソッド

ObAccessManagerには、アクセス・チェックを実行するメソッドがあり、入力値として、リソース、オプションのロケーション、日付と時間、および一連のユーザーを指定するObAMAccessTestオブジェクトを取ります。testAccessメソッドは、対象のポリシー・ドメイン、ポリシー、認可条件式および認可条件式の評価結果の決定的要因となる認可ルールが含まれた、ObAMAccessTestResultsオブジェクトを戻します。このオブジェクトには、各ユーザーがアクセスを認可されたかどうかを特定する情報も含まれます。


重要:

アクセス・チェック・テストの対象にするユーザーを明示的に指定しない場合、LDAPディレクトリにあるすべてのユーザーがテスト対象となります。ディレクトリ内のすべてのユーザーを指定してアクセス・チェック・テストを実施することもできます。ただし、ユーザーを指定し忘れたためにこの種のテストが意図せず行われる場合、LDAPディレクトリのサイズによってはオーバーヘッドが過大になり、処理サイクルを消費することがあります。

Cでは、戻されたObAMAccessTestResultsオブジェクトをコール元で削除する必要があります。

このアクセス・テストは、Access Manager APIのObUserSession.isAuthorizedメソッドに似ていますが同一ではないことに注意してください。「ObUserSession」を参照してください。差異は次のとおりです。

  • testAccessでは任意のユーザーのアクセスをテストできるのに対し、isAuthorizedは認可されたユーザーのみが使用できます。

  • testAccessでは任意の日付および時間におけるアクセスをテストできるのに対し、isAuthorizedでは常に現在の時刻が使用されます。

  • testAccessは情報をディレクトリから取得するので、結果は常に最新のものです。isAuthorizedは情報を、最新ではない可能性もあるアクセス・サーバー・キャッシュから取得します。

このメソッドの定義は次のとおりです(コード例ではありません)。

Java

public ObAMAccessTestManaResults testAccess(ObAMAccessTest testname);

Managed C++の書式

public ObAMAccessTestResultsMgd *getTestAccess(ObAMAccessTestMgd *test);

Cの書式

ObAMAccessTestResults_t ObAccessManager_testAccess(ObAMAccessTest_t testname);

たとえば、AccessTestオブジェクトがすでにビルドされている場合に、Javaでアクセス・テストを行うには、次のようなコードを記述します。

  myam.testAccess(myaccesstestobject);

Managed C++では、コードは次のとおりです。

  myam.gettestAccess(myaccesstestobject);

Cで記述したコードの例は、次のとおりです。

  ObAccessManager_TestAccess(myam, myaccesstestobject);

5.3.10 アクセス・システム構成オブジェクト

アクセス・システム構成オブジェクトは、アクセス・システム・コンソールのGUIを使用して情報を作成、変更、削除および表示できるいくつかの基本オブジェクト・タイプを表します。これらのオブジェクトは、アクセス・システムでサポートされているアクセス・セキュリティの大半の基礎となっているものであるため、ポリシー・マネージャAPIを使用して変更することはできません。ただし、これらのオブジェクトはポリシー・ドメインおよびポリシーを作成するためには使用されます。このグループに含まれている次の各オブジェクトに関しては、値を取得することはできますが、設定することはできません。ただし、マネージ・コードがサポートされるクラスのオブジェクトは例外です。

5.4 ポリシー・マネージャAPIクラス

この項では、Javaおよびマネージ・コードの各クラスを含む、ポリシー・マネージャAPIのクラスについて説明します。Javaのクラスのメソッドの後にCプログラミング言語のメソッドのリストも記載されているクラスもあります。

また、各Javaクラスでは、オブジェクトのデータ・メンバーが記載されている表があります。オブジェクトは、自身のメソッド、およびそのクラスが継承したクラスのメソッドによって操作されます。表の構成は次のとおりです。

メソッドおよび関数の中には、オブジェクトを一意に識別するためにキー・データ項目を使用するものもあります。キー・データ項目が1つしかない場合は、その項目には「(キー)」と記載されます。2つ以上のデータ項目をキーとして使用するために連結する必要がある場合は、それらの項目には連結の順序も含めて「(キー1)」、「(キー2)」などと記載されます。

5.4.1 ObAMHostIdentifierクラス

ObAMHostIdentifierクラスの各オブジェクトは、構成済のホスト識別子を表します。

ラベル 範囲 説明
Name

(キー)

文字(必須) 任意 ホスト識別子を識別する名前
Description 文字(オプション) 任意 説明(オプション)
HostName 文字列の配列

(オプション)

任意 ホスト名のバリエーションのセット

5.4.2 ObAMHostIdentifierMgdクラス

(マネージ・コード)。ObAMHostIdentifierクラスの各オブジェクトは、構成済のホスト識別子を表します。オブジェクトの各コンポーネントの詳細は、「ObAMHostIdentifierクラス」を参照してください。

マネージ・コードの書式

// getters
__property System::String *get_Name();
__property System::String *get_Description();
__property int get_NumberOfHostnames();
System::String *getHostname(int index);

5.4.3 ObAMResourceTypeクラス

ObAMResourceTypeクラスの各オブジェクトは、組込みまたはカスタムのリソース・タイプを表します。

ラベル 範囲 説明
Name

(キー)

文字(必須) 任意。 リソース・タイプの名前を識別し、リソース・タイプを再利用できるようにします。
DisplayName 文字(必須) 任意。 表示される名前。
Case-

Sensitive

Matching

ブール・フラグ(必須) 0は「いいえ」、他の値は「はい」を意味します。 リソース・タイプに一致させるURLが大文字/小文字を区別するかを指定するフラグ。
Operations 文字列の配列

(オプション)

任意。 リソース・タイプに対して定義された操作のセット。

Java

  public String getName();
  public String getDisplayName();
  public boolean getCaseSensitiveMatching();
  public int getNumberOfOperations();
  public String getOperation(int index);

5.4.4 ObAMResourceTypeMgdクラス

(マネージ・コード)。ObAMResourceTypeクラスの各オブジェクトは、組込みまたはカスタムのリソース・タイプを表します。

ラベル 範囲 説明
Name

(キー)

文字(必須) 任意 リソース・タイプの名前を識別し、リソース・タイプを再利用できるようにします。
DisplayName 文字(必須) 任意 表示される名前。
Case-

Sensitive

Matching

ブール・フラグ(必須) true、false リソース・タイプに一致させるURLが大文字/小文字を区別するかを指定するフラグ。
Operations 文字列の配列

(オプション)

任意 リソース・タイプに対して定義された操作のセット。

マネージ・コードの書式

// getters
__property System::String *get_Name();
__property System::String *get_DisplayName();
__property bool get_CaseSensitiveMatching();
__property int get_NumberOfOperations();
System::String *getOperation(int index);

5.4.5 ObAMAuthenticationSchemeクラス

ObAMAuthenticationSchemeクラスの各オブジェクトは、構成済の認証スキームを表します。この、既存の認証スキームの名前は、各認証ルールに含まれている必要があります。

ラベル 範囲 説明
Name

(キー)

文字(必須) 任意。 認証スキームを識別する名前
Description 文字(オプション) 任意。 説明(オプション)
Level 数値(必須) 任意。 スキームのセキュリティを他の構成済スキームと比較してランキング付けしたレベル
Challenge Method 列挙リストのメンバー(必須) 次の列挙リスト内の任意の項目。

UNDEFINED=0

NONE=1

BASIC=2

X509=3

FORM=4

EXTERNAL=5

ユーザーに資格証明を要求するメソッド
Challenge

Parameters

文字列の配列(必須) 任意。 Challenge Method内で使用するパラメータのセット
SSLrequired ブール・フラグ(必須) 0は「いいえ」、他の値は「はい」を意味します。 チャレンジにSSLセキュリティ接続が必要かどうかを指定するフラグ
Plugin 認証プラグイン・オブジェクトの配列(オプション) クラス定義を参照。 資格証明を処理してユーザーを認証するプラグインの配列
Enabled ブール・フラグ
認証スキームを有効化および無効化するフラグ

Java

  public String getName();
  public String getDescription();
  public int getLevel();
  public int getChallengeMethod();
  public boolean getSSLrequired();
  public int getNumberOfChallengeParameters();
  public String getChallengeParameter(int index);
  public int getNumberOfPlugins();
  public ObAMAuthenticationPlugin getPlugin(int index);
  public boolean getEnabled();

5.4.6 ObAMAuthenticationSchemeMgdクラス

(マネージ・コード)。ObAMAuthenticationSchemeMgdクラスの各オブジェクトは、構成済の認証スキームを表します。このオブジェクトのコンポーネントの詳細は、「ObAMAuthenticationSchemeクラス」を参照してください。

// getters
__property System::String *get_Name();
__property System::String *get_Description();

5.4.7 ObAMAuthenticationScheme_ChallengeMethodMgdクラス

(マネージ・コード)。これはマネージ・コードによる値タイプ用クラスで、ObAMAuthenticationSchemeMgdクラスで使用する値タイプを定義します。このクラスは、ObAMAuthenticationScheme_ChallengeMethod列挙に対するラッパーとなっています。setterメソッドを使用して値を設定するか、ObAMAuthenticationScheme_ChallengeMethod値を使用できます。

  __property int get_Level();
  __property ObAMAuthenticationScheme_ChallengeMethodMgd *get_ChallengeMethod();
  __property bool get_SSLrequired();
  __property bool get_Enabled();
  __property System::String *get_ChallengeRedirectURL();
  __property int get_NumberOfChallengeParameters();
  __property int get_NumberOfPlugins();
  System::String *getChallengeParameter(int index);
  ObAMAuthenticationPluginMgd *getPlugin(int index);

// Get and set values
__property bool get_isUndefined();
__property bool get_isNone();
__property bool get_isBasic();
__property bool get_isX509();
__property bool get_isForm();
__property bool get_isExt();
__property ObAMAuthenticationScheme_ChallengeMethod get_Value();
__property void
set_Value(ObAMAuthenticationScheme_ChallengeMethod value);
void setUndefined();
void setNone();
void setBasic();
void setX509();
void setForm();
void setExt();

マネージ・コードでは、列挙リスト(チャレンジ・メソッド)とマネージ・コード・クラスの間のマッピングは次のとおりです。

ObAMAuthenticationScheme_ChallengeMethod:
setUndefined() = UNDEFINED
setNone() = NONE
setBasic() = BASIC
setX509 = X509
setForm() = FORM
setExt() = EXT

5.4.8 ObAMAuthenticationPluginクラス

ObAMAuthenticationPluginクラスの各オブジェクトは、認証スキームに構成できる認証プラグインを表します。

ラベル 範囲 説明
Order 整数

(必須)

任意 認証スキームにおけるプラグインの実行順位。
Name

(キー)

文字(必須) 任意 プラグインの名前(ファイル拡張子なし)。組込みプラグイン名かまたはカスタム・プラグイン・ライブラリ名のいずれか。
Parameters 文字

(オプション)

任意 プラグインの各ユーザー定義パラメータからなる単一の文字列。

Java

  public int getOrder();
  public String getName();
  public String getParameter();

5.4.9 ObAMAuthenticationPluginMgdクラス

(マネージ・コード)。各ObAMAuthenticationPluginは、認証スキームに構成できる認証プラグインを表します。オブジェクトの各コンポーネントの詳細は、「ObAMAuthenticationPluginクラス」を参照してください。

マネージ・コードの書式

// getters
__property int get_Order();
__property System::String *get_Name();
__property System::String *get_Parameters();

5.4.10 ObAMAuthorizationSchemeクラス

ObAMAuthorizationSchemeクラスの各オブジェクトは、カスタム認可スキームを表します。

ラベル 範囲 説明
Name

(キー)

文字(必須) 任意 認可スキームを識別する名前
Description 文字(オプション) 任意 スキーム用に表示される説明
Library 文字

(必須)

任意 スキームを実装するライブラリ・ファイルの名前
User

Parameters

文字列の配列

(オプション)

任意 ユーザーによって定義されたパラメータ
Required Parameters パラメータ・オブジェクトの配列

(オプション)

クラス定義を参照 スキームに組み込むパラメータで、スキームがある場合はそれが正常に動作するために必須のもの
(オプション)

Parameters

パラメータ・オブジェクトの配列

(オプション)

クラス定義を参照 指定するとスキームの動作に使用されるパラメータ

Java

  public String getDescription();
  public String getLibrary();
  public int getNumberOfUserParameters();
  public int getNumberOfRequiredParameters();
  public int getNumberOfOptionalParameters();
  public String getUserParameter(int index);
  public ObAMParameter getRequiredParameter(int index);
  public ObAMParameter getOptionalParameter(int index);

5.4.11 ObAMAuthorizationSchemeMgdクラス

(マネージ・コード)。各ObAMAuthorizationSchemeMgdはカスタム認可スキームを表します。このオブジェクトのコンポーネントの詳細は、「ObAMAuthorizationSchemeクラス」を参照してください。

マネージ・コードの書式

// getters
__property System::String *get_Name();
__property System::String *get_Description();
__property System::String *get_Library();
__property int get_NumberOfUserParameters();
__property int get_NumberOfRequiredParameters();
__property int get_NumberOfOptionalParameters();
System::String *getUserParameter(int index);
ObAMParameterMgd *getRequiredParameter(int index);
ObAMParameterMgd *getOptionalParameter(int index);

Java

  public String getName();
  public String getDescription();
  public int getNumberOfHostnames();
  public String getHostname(int index);

5.4.12 ObAMMasterAuditRuleクラス

ObAMMasterAuditRuleクラスのオブジェクトは、マスター監査ルールを表します。マスター監査ルールは、あるポリシーに監査ルールが指定されていなかった場合に使用するグローバル監査パラメータおよびデフォルトを指定したものです。

10g(10.1.4.0.1)では次のようになっています。

  • C言語のAPIでは、ObAMMasterAuditRule_getEscapeCharacterが残っており、これを引き続き使用できます。ただし、監査エスケープ文字がASCII文字でないと、戻り値が不正になります。この場合、新しいAPIを使用するにはCのコードを変更する必要があります。

  • Javaクライアントでは、監査エスケープ文字がASCII文字でない場合でも、ObAMMasterAuditRule_getEscapeCharacterが正常に動作するため、これを現在でも使用できます。

  • C言語のAPIでは、UTF-8でエンコードされた監査エスケープ文字へのポインタを戻すObAMMasterAuditRule_getUTF8EscapeCharacterが新しく追加されました。

ラベル 範囲 説明
DateFormat 列挙

(必須)

次にあげる、利用可能な日付書式からなる列挙セット内のいずれかの整数

UNDEFINED=0

INTEGER = 1

MMDDYYYY=2

DDMMYYYY=3

ISO8601 = 4

YYYYMMDD=5

YYYYDDMM=6

各監査レコード内の日付に使用する書式
Escape

Character

文字

(必須)

任意 監査レコード内で使用するエスケープ文字

注意: 詳細は、この表の前に記載のリストにある動作の説明を参照

RecordFormat 文字

(必須)

任意 監査レコードの書式
EventMapping イベント・タイプに対応付ける文字列の配列 任意 監査レコード内で使用する文字列への監査イベントのマッピング

Java

  public int getDateFormat();
  public char getEscapeCharacter();
  public String getRecordFormat();
  public String getEventMapping(int eventType);

マスター監査ルール内のイベント・マッピングを操作するgetメソッドは、特別なものです。EventMapping文字列の配列は一連のデータ・ペアから構成されています。各ペアは、イベント・タイプと文字列を対応付けたものです。イベント・タイプは列挙引数としてgetEventMappingメソッドに渡され、このメソッドにより、このイベント・タイプに対応付けられた文字列が戻されます。

eventtypeの列挙値は次のとおりです。

  AUTHENTICATION_FAILURE = 0
  AUTHENTICATION_SUCCESS = 1
  AUTHORIZATION_FAILURE = 2
  AUTHORIZATION_SUCCESS= 3

5.4.13 ObAMMasterAuditRuleMgdクラス

(マネージ・コード)。ObAMMasterAuditRuleクラスのオブジェクトは、マスター監査ルールを表します。マスター監査ルールは、あるポリシーに監査ルールが指定されていなかった場合に使用するグローバル監査パラメータおよびデフォルトを指定したものです。

ラベル 範囲 説明
DateFormat 列挙

(必須)

次にあげる、利用可能な日付書式からなる列挙セット内のいずれかの整数

UNDEFINED=0

INTEGER = 1

MMDDYYYY=2

DDMMYYYY=3

ISO8601 = 4

YYYYMMDD=5

YYYYDDMM=6

各監査レコード内の日付に使用する書式
Escape

Character

文字

(必須)

任意 監査レコード内で使用するエスケープ文字
RecordFormat 文字

(必須)

任意 監査レコードの書式
EventMapping イベント・タイプに対応付ける文字列の配列 任意 監査レコード内で使用する文字列への監査イベントのマッピング

マネージ・コードの書式

  // getters
  System::String *getEventMapping(ObAMAuditRule_EventTypeMgd *eventType);
  __property ObAMMasterAuditRule_DateFormat get_DateFormat();
  __property const char get_EscapeCharacter();
  __property System::String *get_RecordFormat();

5.4.14 アクセス・ポリシー・オブジェクト

アクセス・ポリシー・オブジェクトは、ポリシー・マネージャのGUIを使用して情報を作成、変更、削除および読取りできるいくつかの基本オブジェクト・タイプを表します。

ポリシー・ドメインから見ると、上位オブジェクトに下位オブジェクトが含まれるという、オブジェクトの層がいくつかあるように見えます。この見え方は、ポリシー・ドメインに含まれるポリシーが独自のルールおよび条件式(内容はアクセス条件およびアクション)を持つことができるという点で、正確なものではありません。ただし、ポリシーを階層的に見ると、オブジェクトは次のように分類されます。

レベル1: ObAMPolicyDomainクラス

レベル2: ObAMAdminRuleクラス

レベル3: ObAMAuthorizationExprクラス

レベル4: ObAMAuthorizationRuleクラス

レベル5: ObAMAuthenticationRuleクラスおよびObAMAuthorizationRuleクラス

レベル6: ObAMAccessConditionsMgdクラスおよびObAMTimingConditionsクラス

レベル7: ObAMActionクラスObAMAuditRuleクラスObAMDateクラスObAMIdentityクラスObAMParameterクラスObAMTimeクラス

レベル8: ObAMPolicyクラス

これらのクラスに関する説明には、「アクセス・システム構成オブジェクト」と同じ書式が使用されます。

列挙値およびこれらのクラスのメソッドの定義は、付録B「ポリシー・マネージャAPIの定義」で説明されています。

5.4.14.1 文字型の名前の概要

多くのオブジェクトには、次のメソッド定義にあるように、文字列として値を指定するNameデータ・メンバー、およびその値を設定するメソッドが含まれています。

public void setName(String value);

オブジェクトをパラメータとして他のクラスのメソッドに渡すなど、オブジェクトを他の場所から参照するには、オブジェクトを作成した際にオブジェクト名に設定した文字列を正確に指定する必要があります。

たとえば、次のコードの抜粋に記述されているようにAuthz Rule 1という認可ルールを作成した後で、もう1つAuthz Rule 2という認可ルールを作成した場合、これらのルールを認可条件式の中で使用できます

  ObAMAuthorizationRule authzRule1 = new
  ObAMAuthorizationRule();
  authzRule1.setName("Authz Rule 1");
  authzRule1.setEnabled(true);

2つのルールを含む認可条件式を作成するには、次のコード行にあるように、ルールを参照する際、各ルールの名前として指定した文字列どおりに指定する必要があります。

p1_authzExpr.setExpression("Authz Rule 1 & Authz Rule 2");

このコンセプトは、Nameデータ・メンバーを持つすべてのオブジェクトに適用されます。

5.4.15 ObAMPolicyDomainクラス

ObAMPolicyDomainクラスのオブジェクトは、リソース・セットおよびそれらへのアクセスを制御する認証ルールと認可条件式が含まれている、アクセス・ポリシー・ドメインを表します。ポリシー・ドメインには、オプションで監査ルールを含めることもできます。ポリシー・ドメインには、そのドメインを管理する管理者も指定します。ポリシー・ドメインとポリシー・ドメインを使用したリソース保護の詳細は、『Oracle Access Managerアクセス管理ガイド』を参照してください。

ポリシー・ドメインには、独自のルールと認可条件式を持つことのできるポリシーを1つ以上含めることもできます。詳細は、「ObAMPolicyクラス」を参照してください。

ポリシー・ドメインへのオブジェクトの追加: 事前に作成した、Nameデータ・メンバーを含むオブジェクトをポリシー・ドメインに追加するには、オブジェクト作成時にオブジェクト名として設定した文字列を正確に指定する必要があります。詳細は、「文字型の名前の概要」を参照してください。

ラベル 範囲 説明
Name

(キー)

文字(必須) 任意。 一意の名前。
Description 文字(オプション) 任意。 ポリシー・ドメイン用に表示される説明。
Enabled ブール・フラグ(オプション) 0は「いいえ」、他の値は「はい」を意味します。 ポリシー・ドメインが有効かどうかを示すフラグ。
Resource リソース・オブジェクトの配列

(オプション)

クラス定義を参照。 リソースのセット。ポリシー・ドメインが適用される範囲を特定するリソース・タイプ、ホストIDおよびURL接頭辞が含まれます。
Default

Authentication

Rule

1つの認証

ルール・オブジェクト

(オプション)

クラス定義を参照。 認証ルール。認証ルールに指定するもので特筆されるものは、ユーザーから資格証明を取得するチャレンジ・メソッドです。
Default Authorization Expression ポリシー・ドメイン用の1つの認可条件式オブジェクト クラス定義を参照。 リクエストを行うユーザーがリソースにアクセスする権限を付与されているかどうかを判別する一括評価に使用される1つ以上の認証ルールを含む認可条件式。

条件式の認可ルールは、ルール作成時に付けられた名前に完全一致する文字列として指定する必要があります。詳細は、「ObAMAuthorizationRuleクラス」および「ObAMAuthorizationExprクラス」を参照してください。

認可条件式のルールは優先度に基づいて評価されます。条件式のルール評価の詳細は、『Oracle Access Managerアクセス管理ガイド』にある説明を参照してください。

Authorization

Rule

ポリシー・ドメイン用の1つ以上の認可ルール・オブジェクト クラス定義を参照。 保護されたリソースを使用できるユーザーと使用できないユーザー、およびその条件を指定するルール。

認可ルールは、認可条件式に含めます。認可条件式に認可ルールを指定するには、その名前に設定した文字列を正確に指定する必要があります。

ポリシー・ドメイン用に作成された認可ルールは、そのポリシー・ドメインおよびその中の任意のポリシーで使用できます。

Default

AuditRule

1つの監査ルール・オブジェクト

(オプション)

クラス定義を参照。 適用されるポリシー特有の監査ルールがない場合に使用される監査ルール。
Policy ポリシー・オブジェクトの配列

(オプション)

クラス定義を参照。 ポリシー。これが適用されるリソースのセットに対するアクセス要件をさらに限定します。
Delegate

AdminRule

1つの管理ルール・オブジェクト

(オプション)

クラス定義を参照。 このポリシー・ドメインの管理権限の委任先のユーザーを指定する管理ルール。この管理権限には、さらに権限を委任する権限も含まれます。
Grant

AdminRule

1つの管理ルール・オブジェクト

(オプション)

クラス定義を参照。 このポリシー・ドメインに対する基本権限を他のユーザーに付与できるユーザーを指定する管理ルール。
Basic

AdminRule

1つの監査ルール・

オブジェクト

(オプション)

クラス定義を参照。 このポリシー・ドメインを管理する基本権限を与えるユーザーを指定する管理ルール。

Java

  public String getName();
  public String getDescription();
  public boolean getEnabled();
  public int getEnabled();
  public int getNumberOfResources();
  public ObAMResource getResource(int index);
  public ObAMAuthenticationRule getDefaultAuthenticationRule(int index);
  public int getNumberOfPolicies();
  public OAMPolicy getPolicy(int index);
  public int getNumberOfAuthorizationRules();
  public ObAMAuthorizationRule getAuthorizationRule(int index);
  public ObAMAuthorizationExpr getDefaultAuthorizationExpr();
  public ObAMAuditRule getDefaultAuditRule();
  public ObAMAdminRule getDelegateAdminRule();
  public ObAMAdminRule getGrantAdminRule();
  public ObAMAdminRule getBasicAdminRule();
  public void modifyAuthorizationRule(ObAMAuthorizationRule value);
  public void modifyPolicy(ObAMPolicy value);
  public void modifyResource(ObAMResource value);
  public void setDescription(String value);
  public void setName(String value);
  public void setEnabled(boolean value);
  public void setDefaultAuthenticationRule(ObAMAuthenticationRule value);
  public void setDefaultAuthorizationExpr(ObAMAuthorizationExpr value);
  public void setDefaultAuditRule(ObAMAuditRule value);
  public void setDelegateAdminRule(ObAMAdminRule value);
  public void setGrantAdminRule(ObAMAdminRule value);
  public void setIDFrom(ObAMPolicyDomain other);
  public void setBasicAdminRule(ObAMAdminRule value);
  public void addResource(ObAMResource value);
  public void addAuthorizationRule(ObAMAuthorizationRule value);
  public void addPolicy(ObAMPolicy value);
  public void removeResource(ObAMResource value);
  public void removeAuthorizationRule(ObAMAuthorizationRule value);
  public void removePolicy(ObAMPolicy value);

ポリシー・ドメインの作成

例5-1は、特定のリソースを保護するMy Domainというポリシー・ドメインを作成、有効化するサンプル・プログラムからの抜粋です。

デフォルト認証ルールを設定するメソッド、ポリシー・ドメインに認可ルールを追加するメソッド、デフォルト認可条件式を設定するメソッドなど、ポリシー・ドメインを定義するために必要なその他のメソッドをコールするコードは、ここでは示してありません。ポリシー・ドメインへの各オブジェクトの追加は、ObAMPolicyDomainやその他のメソッドによって行われます。これらのメソッドをコールするのは、各オブジェクトを作成してからです。

例5-1の抜粋コードは、次のような機能を実行します。

  • ポリシー・ドメイン・オブジェクト(domain)を新規作成し、このポリシー・ドメインの名前をMy Domainに設定します。

      ObAMPolicyDomain domain = new ObAMPolicyDomain();
      domain.setName("My Domain");
    
    
  • ポリシー・ドメインに対する説明を設定します。

      domain.setDescription("This domain was created by the
               ObAM example program.");
    
  • ポリシー・ドメインを有効化します。(ポリシー・ドメインは有効化して初めて使用できます。)

      domain.setEnabled(true);
    
    
  • resourceという名前のObAMResourceオブジェクトを作成し、リソース・タイプをhttpに設定します。

      ObAMResource resource = new ObAMResource();
      resource.setResourceType("http");
    
    
  • この新規のresourceオブジェクトを使用して、ポリシー・ドメインに含めるリソースのロケーションを指定します。ホストIDおよびURL接頭辞を設定します。

    このホストIDとURLを使用して、ポリシー・ドメインによって保護されるリソースへのパスを定義します(http://host1/myresources)。

    ポリシー・ドメインに追加するすべてのリソースは、それが存在するホストのホストIDおよびURLによって指定します。

      resource.setHostID("host1");
      resource.setURLPrefix("/myresources");
    
    
  • ポリシー・ドメインにリソースを追加します。

      domain.addResource(resource);
    

例5-1 ポリシー・ドメインの作成

                  .
                  .
                  .
  ObAMPolicyDomain domain = new ObAMPolicyDomain();
  domain.setName("My Domain");
  domain.setDescription("This domain was created by the ObAM example program.");
  domain.setEnabled(true);
  ObAMResource resource = new ObAMResource();
  resource.setResourceType("http");
  resource.setHostID("host1");
  resource.setURLPrefix("/myresources");
  domain.addResource(resource);
                  .
                  .
                  .

5.4.16 ObAMPolicyDomainMgdクラス

(マネージ・コード)。ObAMPolicyDomainMgdクラスのオブジェクトは、特定の条件を満たすユーザーがリソース・セットへのアクセスを認可されることを決定するアクセス・ポリシー・ドメインを表します。ポリシー・ドメインにはデフォルト・ルールが含まれますが、リソースのサブセットへのアクセス要件をさらに制限するポリシーを含めることもできます。ポリシー・ドメインには、そのドメインを管理する管理者も指定します。このクラスのコンポーネントである各オブジェクトの詳細は、「ObAMPolicyDomainクラス」を参照してください。

マネージ・コードの書式

// Getters and setters
__property System::String *get_Name();
__property System::String *get_Description();
__property bool get_Enabled();
__property int get_NumberOfResources();
__property int get_NumberOfAuthorizationRules();
__property int get_NumberOfPolicies();
ObAMResourceMgd *getResource(int index);
ObAMAuthorizationRuleMgd *getAuthorizationRule(int index);
__property ObAMAuthorizationExprMgd *get_DefaultAuthorizationExpr();
ObAMPolicyMgd *getPolicy(int index);
__property ObAMAuthenticationRuleMgd *get_DefaultAuthenticationRule();
__property ObAMAuditRuleMgd *get_DefaultAuditRule();
__property ObAMAdminRuleMgd *get_DelegateAdminRule();
__property ObAMAdminRuleMgd *get_GrantAdminRule();
__property ObAMAdminRuleMgd *get_BasicAdminRule();
__property void set_IDFrom(ObAMPolicyDomainMgd *other);
__property void set_Name(System::String *value);
__property void set_Description(System::String *value);
__property void set_Enabled(bool value);
__property void set_DefaultAuthenticationRule(ObAMAuthenticationRuleMgd *value);
__property void set_DefaultAuthorizationExpr(ObAMAuthorizationExprMgd *expr);
__property void set_DefaultAuditRule(ObAMAuditRuleMgd *value);
__property void set_DelegateAdminRule(ObAMAdminRuleMgd *value);
__property void set_GrantAdminRule(ObAMAdminRuleMgd *value);
__property void set_BasicAdminRule(ObAMAdminRuleMgd *value);
__property void set_AddResource(ObAMResourceMgd *value);
__property void set_AddAuthorizationRule(ObAMAuthorizationRuleMgd *value);
__property void set_AddPolicy(ObAMPolicyMgd *value);
__property void set_ModifyResource(ObAMResourceMgd *value);
__property void set_ModifyPolicy(ObAMPolicyMgd *value);
__property void set_ModifyAuthorizationRule(ObAMAuthorizationRuleMgd *value);
__property void set_RemoveResource(ObAMResourceMgd *value);
__property void set_RemoveAuthorizationRule(ObAMAuthorizationRuleMgd *value);
__property void set_RemovePolicy(ObAMPolicyMgd *value);

5.4.17 ObAMAdminRuleクラス

ObAMAdminRuleクラスのオブジェクトには、ポリシー・ドメインの管理権限を持つユーザーを指定します。

ラベル 範囲 説明
Role

(キーなし)

文字列の配列。

少なくとも1つの指定が必須です。

次のいずれか

none

anyone

noone

一連のロール。

注意: 書式が配列になっていますが、これは将来の使用を見越したものです。現在のところ、配列ですが1つの値に制限されています。

Person 識別オブジェクトの配列。

オプションですが、PersonGroupまたはRuleのうち、1つ以上を指定することが必須です。

クラス定義を参照 一連の人々。
Group 識別オブジェクトの配列。

オプションですが、PersonGroupまたはRuleのうち、1つ以上を指定することが必須です。

クラス定義を参照 人々からなる一連の名前付きグループ。
Rule 文字列の配列。

オプションですが、PersonGroupまたはRuleのうち、1つ以上を指定することが必須です。

任意 ユーザー・プロファイルを選択する一連のLDAPルール。

Java

  public int getNumberOfPersons();
  public int getNumberOfGroups();
  public int getNumberOfRoles();
  public int getNumberOfRules();
  public ObAMIdentity getPerson(int index);
  public ObAMIdentity getGroup(int index);
  public String getRole(int index);
  public String getRule(int index);
  public void addRole(String value);
  public void addPerson(ObAMIdentity value);
  public void addGroup(ObAMIdentity value);
  public void addRule(String value)
  public void removeRole(String value);
  public void removePerson(ObAMIdentity value);
  public void removeGroup(ObAMIdentity value);
  public void removeRule(String value);
  public void setIDFrom(ObAMAdminRule other);

5.4.18 管理者ルールの作成

例5-2のコードは、次のような機能を実行します。

  • My Domainというポリシー・ドメインに関する委任管理者の権限および職責をあるユーザーに割り当てる管理者ルール・オブジェクト(ObAMAdminRule)を作成します。

      ObAMAdminRule adminRule = new ObAMAdminRule();
    
    

    My Domainというポリシー・ドメインを事前に作成しておかないと、権限と職責がリストされないことに注意してください。

  • ドメインの管理権限を割り当てるユーザーを指定するためのadminPersonという名前の識別オブジェクト(ObAMIdentity)を1つ作成します。

      ObAMIdentity adminPerson = new ObAMIdentity();
    
    
  • ObAMIdentityクラスのメソッドを使用して、ポリシー・ドメインの管理者に指名されたユーザー用のログインIDを設定します。

      adminPerson.setLoginID("A.Loomis");
    
    
  • 次に、抜粋コードの冒頭で作成された管理者ルールに、adminPersonという名前のObAMIdentityオブジェクトを追加します。

      adminRule.addPerson(adminPerson);
    
    
  • 最後に、ObAMPolicyDomainのsetDelegateAdminRuleメソッドをコールして、My Domainというポリシー・ドメインにadminRuleルールを追加します。

    domain.setDelegateAdminRule(adminRule);
    

例5-2 管理者権限の割当て

                  .
                  .
                  .
  ObAMAdminRule adminRule = new ObAMAdminRule();
  ObAMIdentity adminPerson = new ObAMIdentity();
  adminPerson.setLoginID("A.Loomis");
  adminRule.addPerson(adminPerson);
  domain.setDelegateAdminRule(adminRule);
                  .
                  .
                  .

5.4.19 ObAMAdminRuleMgdクラス

(マネージ・コード)。ObAMAdminRuleクラスのオブジェクトには、ポリシー・ドメインの管理権限を持つユーザーを指定します。このクラスのコンポーネントである各オブジェクトの詳細は、「ObAMAdminRuleクラス」を参照してください。

マネージ・コードの書式

// Getters and setters
__property int get_NumberOfPersons();
__property int get_NumberOfGroups();
__property int get_NumberOfRoles();
__property int get_NumberOfRules();
ObAMIdentityMgd *getPerson(int index);
ObAMIdentityMgd *getGroup(int index);
System::String *getRole(int index);
System::String *getRule(int index);
__property void set_IDFrom(ObAMAdminRuleMgd *other);
__property void set_AddRole(System::String *value);
__property void set_AddPerson(ObAMIdentityMgd *person);
__property void set_AddGroup(ObAMIdentityMgd *group);
__property void set_AddRule(System::String *value);
__property void set_RemoveRole(System::String *value);
__property void set_RemovePerson(ObAMIdentityMgd *person);
__property void set_RemoveGroup(ObAMIdentityMgd *group);
__property void set_RemoveRule(System::String *value);

5.4.20 ObAMPolicyクラス

ObAMPolicyクラスのオブジェクトは、ポリシー・ドメイン内のアクセス・ポリシーを表します。ポリシーにより、ポリシー・ドメイン内のリソース・セットが保護され、それらにアクセス可能なユーザーが決定されます。ポリシーにより、ユーザー・アクセスの許可/拒否、およびアクセスを制御する条件が指定されます。ポリシーの認証または認可ルール、あるいは認可条件式のいずれかを省略した場合は、そのポリシーを含むポリシー・ドメインに付随するデフォルト・ルールまたは条件式が使用されます。ポリシーおよびポリシー・ドメインの基本的な情報は『Oracle Access Managerアクセス管理ガイド』を参照してください。

ポリシーへのオブジェクトの追加: 事前に作成した、Nameデータ・メンバーを含むオブジェクトをポリシーに追加するには、オブジェクト作成時にオブジェクト名として設定した文字列を正確に指定する必要があります。たとえば、認可ルールを作成してポリシー・ドメインに追加した際に設定した認可ルール名に完全に一致する文字列を、認可ルールの名前として指定する必要があります。詳細は、「文字型の名前の概要」を参照してください。

ラベル 範囲 説明
Name

(キー)

文字

(必須)

任意 一意の名前。
Description 文字

(オプション)

任意 説明。
ResourceType 文字

(オプション)

任意 ポリシーを適用するリソース・セットのリソース・タイプ。
Operations 文字列の配列

(必須)

任意 ポリシーを適用する、リソース・タイプに対して定義したアクセス操作のセット。
HostID 文字

(オプション)

任意 リソース・セットが属するホストID。
Resources リソース・オブジェクトの配列(必須) クラス定義を参照 リソース・セットをさらに限定するためのリソース・セット。
URLPattern 文字

(オプション)

任意 リソース・セットをさらに限定するためのURLパターン。
QueryString 文字

(オプション)

任意 リクエスト・データを一致させる問合せ文字列。
Parameters パラメータ・オブジェクトの配列

(オプション)

クラス定義を参照 リクエスト・データを一致させるパラメータ・セット。
AuthenticationRule 1つの認証

ルール・オブジェクト

(オプション)

クラス定義を参照 認証スキームが含まれる認証ルール。認証ルールに指定するもので特筆されるものは、ユーザーから資格証明を取得するチャレンジ・メソッドです。

すでに作成済の認証スキームを指定する必要があります。

AuthorizationExpr ポリシーごとに1つある認可条件式

(オプション)

クラス定義を参照 リクエストを行うユーザーがリソースにアクセスする権限を付与されているかどうかを判別する評価に使用される1つ以上の認証ルールを含む認可条件式。

条件式の認可ルールは、ルール作成時に付けられた名前に完全一致する文字列として指定する必要があります。

ポリシーが認可条件式を含まない場合は、ポリシー・ドメインの認可条件式が適用されます。

詳細は、「ObAMAuthorizationRuleクラス」および「ObAMAuthorizationExprクラス」を参照してください。

認可条件式のルールは優先度に基づいて評価されます。条件式のルール評価およびユーザー認可の構成の詳細は『Oracle Access Managerアクセス管理ガイド』を参照してください。

AuditRule 1つの監査ルール・オブジェクト

(オプション)

クラス定義を参照 アクセスの監査方法を指定する監査ルール。

Java

  public String getName();
  public String getDescription();
  public String getResourceType();
  public String getHostID();
  public String getURLPattern();
  public String getQueryString();
  public int getNumberOfOperations();
  public int getNumberOfResources();
  public int getNumberOfParameters();
  public ObAMAuthorizationExpr getAuthorizationExpr();
  public ObAMAuthenticationRule getAuthenticationRule();
  public String getOperation(int index);
  public ObAMResource getResource(int index);
  public ObAMParameter getParameter(int index);
  public ObAMAuditRule getAuditRule();
  public void setName(String value);
  public void setDescription(String value);
  public void setResourceType(String value);
  public void setHostID(String value);
  public void setURLPattern(String value);
  public void setQueryString(String value);
  public void setAuthorizationExpr(ObAMAuthorizationExpr value);
  public void setAuthenticationRule(ObAMAuthenticationRule value);
  public void setAuditRule(ObAMAuditRule value);
  public void setIDFrom(ObAMPolicy other);
  public void addOperation(String value);
  public void addResource(ObAMResource value);
  public void addParameter(ObAMParameter value);
  public void removeOperation(String value);
  public void removeResource(ObAMResource value);
  public void removeParameter(ObAMParameter value);
  public void modifyParameter(ObAMParameter value);
  public void modifyResource(ObAMResource value);

ポリシーの作成

例5-3のコードでは、My Domain Policy 1というポリシーを作成しています。このポリシーは、My Domainというポリシー・ドメイン内にあるリソースを保護するものです。My Domainは、このコードを抜粋したアプリケーションによりあらかじめ作成されています。

このリストのコードにより、認可条件式がポリシー・ドメインに設定されています。認可条件式に指定されている認可ルールにより、ポリシー・ドメインのリソースへのアクセスが制御されます。

このコードは次のような機能を実行します。

  • 新規のポリシーとしてpolicy1というポリシー・オブジェクトを作成し、ポリシーの名前をMy Domain Policy 1に設定します。

      ObAMPolicy policy1 = new ObAMPolicy();
      policy1.setName("My Domain Policy 1");
    
    
  • ポリシーを適用するリソース・タイプを指定し、ホストIDおよびURLでリソースを特定します。

      policy1.setResourceType("http");
      policy1.setHostID("host1");
      policy1.setURLPattern("/myresources/doc1.html");
    
    
  • My Domain Policy 1ポリシーで保護するhttpリソースに対して実行できる操作の種類を定義します。GETおよびPOST操作を許可します。

      policy1.addOperation("GET");
      policy1.addOperation("POST");
    
    
  • My Domain Policy 1ポリシーにリソースを追加します。

      policy1.addResource(resource);
    
    
  • My Domain Policy 1ポリシーの認可保護に使用する、p1_authzExprという名前のObAMAuthorizationExprオブジェクトを作成します。

    ObAMAuthorizationExpr p1_authzExpr = new;
    ObAMAuthorizationExpr();
    
    
  • p1_authzExprオブジェクトに認可条件式を定義します。条件式は、認可ルール1(Authz Rule 1)および認可ルール2(Authz Rule 2)で構成されます。これらのルール名は、ルールの作成時に付けられた一意の文字列です。条件式のルールを指定する際には、ルールの名前として設定された文字列を正確に指定する必要があります。詳細は、「ObAMAuthorizationRuleクラス」および「ObAMAuthorizationExprクラス」を参照してください。

    p1_authzExpr.setExpression("Authz Rule 1 & Authz Rule 2");
    
    

    認可条件式の評価方法の詳細は、『Oracle Access Managerアクセス管理者ガイド』にある、認可条件式の評価およびユーザー認可の構成についての各詳細を参照してください。

  • 重複アクション・ポリシーをp1_authzExpr認可条件式に設定し、その認可条件式をMy Domain Policy 1ポリシーに追加します。

      p1_authzExpr.setDuplicateActionsPolicy(ObAMAuthorizationExpr.UNDEFINED);
      policy1.setAuthorizationExpr(p1_authzExpr);
    
    

    My Domain Policy 1の重複アクション・ポリシーは、ポリシー・ドメインMy Domainのデフォルトの認可条件式に設定されているものより優先されます。

    重複アクションの概要、およびポリシーの重複アクションがユーザーの指定によってどのように処理されるかという詳細は、「ObAMAuthorizationExprクラス」を参照してください。また、重複アクションおよびユーザー認可の構成の詳細は、『Oracle Access Managerアクセス管理ガイド』を参照してください。

  • 最後に、My Domain Policy 1ポリシーをMy Domainドメインに追加します。

      domain.addPolicy(policy1);
    
    

例5-3 My Domainポリシー・ドメイン内へのポリシーの作成

                  .
                  .
                  .
  ObAMPolicy policy1 = new ObAMPolicy();
  policy1.setName("My Domain Policy 1");
  policy1.setResourceType("http");
  policy1.setHostID("host1");
  policy1.setURLPattern("/myresources/doc1.html");
  policy1.addOperation("GET");
  policy1.addOperation("POST");
  policy1.addResource(resource);
  ObAMAuthorizationExpr p1_authzExpr = new ObAMAuthorizationExpr();
  p1_authzExpr.setExpression("Authz Rule 1 & Authz Rule 2");
  p1_authzExpr.setDuplicateActionsPolicy(ObAMAuthorizationExpr.UNDEFINED);
  policy1.setAuthorizationExpr(p1_authzExpr);
  domain.addPolicy(policy1);

5.4.21 ObAMPolicyMgdクラス

(マネージ・コード)。ObAMPolicyMgdオブジェクトは、特定の条件を満たすユーザーが、リソース・セットへのアクセスを許可されることを決定するアクセス・ポリシーを表します。認証または認可ルール、あるいは認可条件式のいずれかを省略した場合は、ポリシーを含んでいるポリシー・ドメインに付随するルールが使用されます。このクラスのコンポーネントである各オブジェクトの詳細は、「ObAMPolicyクラス」を参照してください。

マネージ・コードの書式

// Getters and setters
__property System::String *get_Name();
__property System::String *get_Description();
__property System::String *get_ResourceType();
__property System::String *get_HostID();
__property System::String *get_URLPattern();
__property System::String *get_QueryString();
__property int get_NumberOfOperations();
__property int get_NumberOfResources();
__property int get_NumberOfParameters();
System::String *getOperation(int index);
ObAMResourceMgd *getResource(int index);
ObAMParameterMgd *getParameter(int index);
__property ObAMAuthorizationExprMgd *get_AuthorizationExpr();
__property ObAMAuthenticationRuleMgd *get_AuthenticationRule();
__property ObAMAuditRuleMgd *get_AuditRule();
__property void set_IDFrom(ObAMPolicyMgd *other);
__property void set_Name(System::String *value);
__property void set_Description(System::String *value);
__property void set_ResourceType(System::String *value);
__property void set_HostID(System::String *value);
__property void set_URLPattern(System::String *value);
__property void set_QueryString(System::String *value);
__property void set_AuthenticationRule(ObAMAuthenticationRuleMgd *rule);
__property void set_AuthorizationExpr(ObAMAuthorizationExprMgd *expr);
__property void set_AuditRule(ObAMAuditRuleMgd *rule);
__property void set_AddOperation(System::String *value);
__property void set_AddResource(ObAMResourceMgd *resource);
__property void set_AddParameter(ObAMParameterMgd *parameter);
__property void set_ModifyResource(ObAMResourceMgd *resource);
__property void set_RemoveOperation(System::String *value);
__property void set_RemoveResource(ObAMResourceMgd *resource);
__property void set_RemoveParameter(ObAMParameterMgd *parameter);

5.4.22 ObAMAuthenticationRuleクラス

ObAMAuthenticationRuleクラスのオブジェクトは、ルールで保護されているリソースへのアクセスをユーザーがリクエストしたときに認証が実行される方法を指定します。各ポリシー・ドメインには、ObAMAuthenticationSchemeオブジェクトが含まれるデフォルト認証ルールを1つのみ含めることができます。オプションで、ポリシー・ドメインに含まれる各ポリシーには独自の認証ルールを含めることができます。独自のルールを含めない場合、ポリシーはポリシー・ドメインの認証ルールで保護されます。

認証スキーム: 認証ルールには、認証スキームを含める必要があります。認証スキームに指定する情報で特筆されるものは、ユーザーの資格証明の取得およびユーザーの認証に使用されるチャレンジ・メソッドです。事前定義済の認証スキームを使用することも、カスタム認証スキームを使用することもできます。どちらの場合も、指定する認証スキームはあらかじめ作成しておく必要があります。既存の認証スキームのリストを取得するには、アクセス・システム・コンソールを使用する必要があります。ユーザー認証の構成の詳細は、『Oracle Access Managerアクセス管理ガイド』を参照してください。

認証ルール・オブジェクトに対するアクション: 認証ルール・オブジェクトに対しては、ユーザーの認証が成功した場合に実行するアクションの種類を設定できます。ユーザー認証が失敗した場合に実行するアクションの種類も設定できます。

ObAMAuthenticationRuleクラスは、ObAMObjectWithActionsクラスを継承して作成されます。また、ObAMAuthenticationRuleクラスは、認証ルールのアクションに関連する情報を操作するためにObAMObjectWithActionsクラスのメソッドを使用します。ObAMObjectWithActionsクラスは、ObAMAuthenticationRuleクラスに自動的に継承されるため、直接インスタンス化しないでください。詳細は、「ObAMObjectWithActionsクラス」を参照してください。

ユーザーの認証に使用できるチャレンジ・メソッドの種類など、認証ルールおよびスキームの概要に関する情報は、『Oracle Access Managerアクセス管理ガイド』を参照してください。

ラベル 範囲 説明
Name

(キー)

文字

(必須)

任意 一意の名前。
Description 文字

(オプション)

任意 説明。
Authentication Scheme 文字

(必須)

任意 資格証明の取得および処理方法を指定する認証スキーム。
Action Type 列挙値、整数

(必須)

SUCCESS = 0

FAILURE = 1

INCONCLUSIVE = 2

クラス定義を参照

メソッドの適用対象とするアクションのタイプを指定する値。

アクションに対しては、ObAMAuthenticationRuleは継承元のObAMObjectWithActionsクラスのメソッドを使用します。


Java

  public ObAMAuthenticationRule();
  public String getDescription();
  public String getScheme();
  public void setDescription(String value);
  public void setScheme(String value);
  public void setIDFrom(ObAMObjectWithActions other);
  public int getNumberOfActions(int actionType) throws ObAMException;
  public ObAMAction getActionOfType(int actionType, int index)
                                throws ObAMException;
  public void addActionOfType(int actionTtype, ObAMAction value)
                                throws ObAMException;
  public void removeActionOfType(int actionType, ObAMAction value)
                                throws ObAMException;
  public String getName();
  public void setName(String value);

Cの書式

  typedef const void * ObAMAuthenticationRule_t;
  ObAMAuthenticationRule_t ObAMAuthenticationRule_new();
  ObAMAuthenticationRule_t ObAMAuthenticationRule_copy(
                          ObAMAuthenticationRule_t authn);
  void ObAMAuthenticationRule_delete(
                          ObAMAuthenticationRule_t *pAuthn);
  const char *ObAMAuthenticationRule_getName(
                          ObAMAuthenticationRule_t authn);
  const char *ObAMAuthenticationRule_getDescription(
                          ObAMAuthenticationRule_t authn);
  const char *ObAMAuthenticationRule_getScheme(
                          ObAMAuthenticationRule_t authn);
  void ObAMAuthenticationRule_setIDFrom(
                          ObAMAuthenticationRule_t authn,
                          ObAMAuthenticationRule_t other);
  void ObAMAuthenticationRule_setName(
                          ObAMAuthenticationRule_t authn,const char *value);
  void ObAMAuthenticationRule_setDescription(
                          ObAMAuthenticationRule_t authn,const char *value);
  void ObAMAuthenticationRule_setScheme(
                          ObAMAuthenticationRule_t authn,const char *value);
  int ObAMAuthenticationRule_getNumberOfActions(
                       ObAMObjectWithActions_ActionType type,
                          ObAMAuthenticationRule_t authn);
  ObAMAction_t ObAMAuthenticationRule_getActionOfType(
                          ObAMObjectWithActions_ActionType type,
  ObAMAuthenticationRule_t authn, OBAMAction_t value);
                          ObAMAuthenticationRule_t authn, int index);
  void ObAMAuthenticationRule_removeActionOfType(
                          ObAMObjectWithActions_ActionType type,
                          ObAMAAutbenticationRule_t authn,
                          ObAMAction_t value);

認証ルールの作成

例5-4のコードでは、My Domainポリシー・ドメイン・オブジェクトに認証ルールを作成しています。このコードでは、Oracle Access and Identityスキームを使用するようMy Domainのデフォルト認証ルールを設定しています。

このコードは次のような機能を実行します。

  • デフォルト認証ルールに使用するauthnRuleというObAMAuthenticationRuleオブジェクトを作成し、ルールの名前をauthnRuleに設定します。

      ObAMAuthenticationRule authnRule = new;
      ObAMAuthenticationRule();
      authnRule.setName("My Domain Default Authn Rule");
    
    
  • デフォルト認証ルールに使用するスキームをOracle Access and Identityに設定します。

      authnRule.setScheme("Oracle Access and Identity");
    
    
  • ユーザーの認証が成功した場合に実行するアクションを定義し、このアクションをデフォルト認証ルールに追加します。

      authnAction2.setType("otherType");
      authnAction2.setName("authnAction");
      authnAction2.setValue("z");
      authnAction2.setValueType(ObAMAction.FIXEDVALUE);
      authnRule.addSuccessAction(authnAction2);
    
  • このコードを抜粋したアプリケーションによって事前に作成済のMy Domainポリシー・ドメインに、デフォルト認証ルールを追加します。

      domain.setDefaultAuthenticationRule(authnRule);
    

例5-4 ポリシー・ドメインのデフォルト認証ルールの作成

                               .
                               .
                               .
  ObAMAuthenticationRule authnRule = new ObAMAuthenticationRule();
  authnRule.setName("My Domain Default Authn Rule");
  authnRule.setScheme(ÒOracle Access and IdentityÓ);
  ObAMAction authnAction2 = new ObAMAction();
  authnAction2.setType("otherType");
  authnAction2.setName("authnAction");
  authnAction2.setValue("z");
  authnAction2.setValueType(ObAMAction.FIXEDVALUE);
  authnRule.addSuccessAction(authnAction2);
  domain.setDefaultAuthenticationRule(authnRule);
                               .
                               .
                               .

5.4.23 ObAMAuthenticationRuleMgdクラス

(マネージ・コード)。ObAMAuthenticationRuleオブジェクトは、ポリシーまたはポリシー・ドメインにより保護されているリソースへのアクセスに対する認証方法を指定します。このクラスのコンポーネントである各オブジェクトの詳細は、「ObAMAuthenticationRuleクラス」を参照してください。

マネージ・コード

// Getters and setters
__property System::String *get_Name();
__property System::String *get_Description();
__property System::String *get_Scheme();
int getNumberOfActions(ObAMActionTypeMgd *action);
ObAMActionMgd *getActionOfType(ObAMActionTypeMgd *type, int index);
__property void set_IDFrom(ObAMAuthenticationRuleMgd *other);
__property void set_Name(System::String *value);
__property void set_Description(System::String *value);
__property void set_Scheme(System::String *value);
void addActionOfType(ObAMActionTypeMgd *action, ObAMActionMgd *value);
void modifyActionOfType(ObAMActionTypeMgd *action, ObAMActionMgd *value);
void removeActionOfType(ObAMActionTypeMgd *action, ObAMActionMgd *value);

5.4.24 ObAMAuthorizationRuleクラス

ObAMAuthorizationRuleクラスのオブジェクトは、そのオブジェクトが保護するリソースへのユーザー・アクセスを許可または拒否する条件を指定します。このクラスのオブジェクトである認可ルールには認可スキームが含まれます。また、保護されているリソースへのアクセスをリクエストしているユーザーを認可する試行の結果に応じて実行するアクションも含めることができます。成功または失敗の結果に対するアクションを指定できます。

認可ルールは次のように使用できます。

  • 複数の認可条件式に使用できます。

  • 1つの認可条件式に複数回使用できます。

作成した認可ルールはすべて、ポリシー・ドメインまたはポリシーの認可条件式に使用できます。

保護されているリソースへのアクセスは、式、つまり、式に含まれるすべてのルールの組合せの評価結果に基づいて制御されます。

認可ルールとその内容および認可条件式の評価の概念に関する詳細は、『Oracle Access Managerアクセス管理ガイド』を参照してください。

認可スキーム: 認可ルールには認可スキームを含める必要があります。デフォルトの認可スキームを使用することも、カスタム認可スキームを使用することもできます(カスタム認可スキームが作成済の場合)。既存の認可スキームのリストを取得するには、アクセス・システム・コンソールを使用する必要があります。カスタム・プラグインの認可スキームおよびユーザー認可の構成の詳細は、『Oracle Access Managerアクセス管理ガイド』を参照してください。

認可ルールの名前および認可条件式の概要: 認可ルールの名前を設定するときは、一意の文字列を指定します。この文字列は、後でポリシー・ドメインおよびポリシーの認可条件式に含めるルールを、認可条件式に指定する際に使用します。(認可ルールは、認可条件式に含めます。)認可条件式に含める認可ルールごとに、認可ルールの名前として設定した文字列を正確に指定する必要があります。詳細は、「文字型の名前の概要」を参照してください。詳細は、「ObAMAuthorizationExprクラス」を参照してください。

認可ルールに対するアクション: 認可ルールに対しては、ルールの評価結果に基づいて実行するアクションの種類を指定できます。ルールの評価結果として認可が成功または失敗した場合に実行するアクションを指定できます。

ObAMAuthorizationRuleオブジェクトは、ObAMObjectWithActionsクラスを継承して作成され、アクションに関するすべての機能を実行するためにObAMObjectWithActionsクラスのメソッドを使用します。ObAMObjectWithActionsクラスは直接インスタンス化しないでください。詳細は、「ObAMObjectWithActionsクラス」を参照してください。

一部のルールは認可条件式の結果に影響を与えません。式の評価結果に影響を与えるルールは、決定的ルールと呼ばれます。ルールが決定的ルールである場合、式の評価後に、ルールの評価結果に対するアクションが実行されます。


注意:

ポリシー・マネージャAPI(現在はバージョン6)の最初のバージョンでは、カスタム認可プラグインはポリシー・マネージャ・エンジンではサポートされていません。このため、カスタム認可プラグインを使用するカスタム認可ルールは作成できません。

ラベル 範囲 説明
Name

(キー)

文字

(必須)

任意。 一意の名前。

ルールを認可条件式に含めるときに指定する名前。

Description 文字

(オプション)

任意。 説明。
Enabled ブール・フラグ(必須) 0は「いいえ」、他の値は「はい」を意味します。 ルールを有効化するかどうか。
AllowTakesPrecedence ブール・フラグ(必須) 0は「いいえ」、他の値は「はい」を意味します。 許可条件を拒否条件より優先するかどうか。
TimingConditions タイミング条件オブジェクトの配列

(オプション)

クラス定義を参照。 ルールが有効な期間を指定するタイミング条件。
actionType/ActionType 列挙値、整数

(必須)

SUCCESS = 0

FAILURE = 1

INCONCLUSIVE = 2

クラス定義を参照。

メソッドの適用対象とするアクションのタイプを指定する値。

アクションに対しては、ObAmAuthorizationRuleは継承元のObAMObjectWithActionsクラスのメソッドを使用します。

AllowAccessConditions 1アクセス

条件オブジェクト

(オプション)

クラス定義を参照。 アクセスを許可する条件。
DenyAccess

Conditions

1アクセス

条件オブジェクト

(オプション)

クラス定義を参照。 アクセスを拒否する条件。
Authorization

Scheme

文字

(オプション)

任意。 カスタムまたは事前定義済の認可スキームの名前。

すでに作成済の認可スキームの名前を指定する必要があります。認可スキームのリストを取得するには、アクセス・システム・コンソールのGUIを使用します。

これを指定した場合は、タイミングおよびアクセス条件も入力すると無効になります。

Scheme

Parameter

パラメータ・オブジェクトの配列

(オプション)

クラス定義を参照。 カスタム認可スキームで使用するパラメータ。

Java

  public obAMAuthorizationRule();
  public String getName();
  public String getDescription();
  public boolean getEnabled();
  public boolean getAllowTakesPrecedence();
  public int getNumberOfActions(int actionType)
                  throws ObAMException;
  public ObAMAction getActionOfType(int actionType, int index)
                  throws ObAMException;
  public void addActionOftype(int actionType, obAMAction value)
                  throws ObAMException;
  public void removeActionOfType(int actionType, ObAMAction value)
                  throws ObAMException;
  public ObAMTimingConditions getTimingConditions();
  public int getNumberOfSchemeParameters();
  public ObAMParameter getSchemeParameter(int index);
  public ObAMAccessConditions getAllowAccessConditions();
  public String getAuthorizationScheme();
  public ObAMAccessConditions getDenyAccessConditions();
  public void setName(String value);
  public void setDescription(String value);
  public void setEnabled(boolean value);
  public void setAllowTakesPrecedence(boolean value);
  public void setTimingConditions(ObAMTimingConditions value);
  public void setAllowAccessConditions(ObAMAccessConditions value);
  public void setDenyAccessConditions(ObAMAccessConditions value);
  public void setAuthorizationScheme(String value);
  public void addSchemeParameter(ObAMParameter value);
  public void removeSchemeParameter(ObAMParameter value);
  public void modifySchemeParameter(ObAMParameter value);
  public void setIDFrom(ObAMAuthorizationRule other);

C

  typedef const void * ObAMAuthorizationRule_t;
  ObAMAuthorizationRule_t ObAMAuthorizationRule_new()
  ObAMAuthorizationRule_t ObAMAuthorizationRule_copy(
               ObAMAuthorizationRule_t authz);
  void ObAMAuthorizationRule_delete(
               ObAMAuthorizationRule_t *pAuthz);
  const char *ObAMAuthorizationRule_getName(
               ObAMAuthorizationRule_t authz);
  const char *ObAMAuthorizationRule_getDescription(
               ObAMAuthorizationRule_t authz);
  ObAMAuthorizationRule_getEnabled(
               ObAMAuthorizationRule_t authz);
  int ObAMAuthorization_getAllowTakesPrecedence(
               ObAMAuthorizationRule_t authz);
  ObAMTimingConditions_t ObAMAuthorizationRule_getTimingConditions(
               ObAMAuthorizationRule_t authz);
  int ObAMAuthorizationRule_getNumberOfActions(
               ObAMObjectWithActions_ActionType type,
  ObAMAuthorizationRule_t authz);
  ObAMAction_t ObAMAuthorizationRule_getActionOfType(
               ObAMObjectWithActions_ActionType type,
               ObAMAuthorizationRule_t authz,
               int index);
  ObAMAccessConditions_t
               ObAMAuthorizationRule_getAllowAccessConditions(
               ObAMAuthorizationRule_t authz);
  ObAMAccessConditions_t
               ObAMAuthorizationRule_getDenyAccessConditions(
               ObAMAuthorizationRule_t authz);
  const char *ObAMAuthorizationRule_getAuthorizationScheme(
               ObAMAuthorizationRule_t authz);
  int ObAMAuthorizationRule_getNumberOfSchemeParameters(
               ObAMAuthorizationRule_t authz);
  ObAMParameter_t ObAMAuthorizationRule_getSchemeParameter(
               ObAMAuthorizationRule_t authz, int index);
  void ObAMAuthorizationRule_setIDFrom(
               ObAMAuthorizationRule_t authz,
               ObAMAuthorizationRule_t other);

廃止されたメソッド

  ObAMAuthorizationRule_getSuccessAction();
  ObAMAuthorizationRule_getFailureAction();
  ObAMAuthorizationRule_getNumberOfSuccessActions();
  ObAMAuthorizationRule_getNumberOfFailureActions();
  ObAMAuthorizationRule_addSuccessAction();
  ObAMAuthorizationRule_addFailureAction();
  ObAMAuthorizationRule_removeSuccessAction();
  ObAMAuthorizationRule_removeFailureAction();

認可ルールの作成

例5-5のコードでは、認可ルールを作成してMy Domainポリシー・ドメイン・オブジェクトに追加しています。このルールは、My Domainのデフォルト認可条件式や、My Domainポリシー・ドメインに含まれるいずれかのポリシーの認可条件式に使用できます。アプリケーションでは、認可ルール・オブジェクトのインスタンスを多数作成して、ポリシー・ドメインおよびポリシーに使用できます。

このコードは次のような機能を実行します。

  • authzRule1というObAMAuthorizationRuleオブジェクトを作成します。このルールの名前をAuthz Rule 1に設定し、ルールを有効化します。ルールの名前をAuthz Rule 1に設定しているのは、このコードの次のセグメントです。このルールを認可条件式に含めるには、文字列「Authz Rule 1」を指定してこのルールを指定します。詳細は、例5-5「認可ルールの作成」を参照してください。

      ObAMAuthorizationRule authzRule1 = new
      ObAMAuthorizationRule();
      authzRule1.setName("Authz Rule 1");
      authzRule1.setEnabled(true);
    
    
  • ルールのアクセス条件として使用するaccess1というObAMAccessConditionsオブジェクトを作成します(この時点では、アクセスの許可とアクセスの拒否のどちらであるかは未定義です)。

      ObAMAccessConditions access1 = new ObAMAccessConditions();
    
    
  • アクセス条件の適用対象(2人の個人と1つのグループ)を指定します。

    これらの各エンティティを指定するために、コードは次の処理を行います。

    • 個人またはグループのログインIDを設定するObAMIdentityオブジェクトを作成します。

    • ObAMAuthorizationRule認可ルールのaccess1オブジェクト(ObAccessObject)に個人またはグループを追加します。これをperson1に対して行うコードを次の抜粋に示します。

        ObAMIdentity person1 = new ObAMIdentity();
        person1.setLoginID("A.Loomis");
        access1.addPerson(person1);
      
  • access1オブジェクトをAuthz Rule 1(authzRule1)認可ルール・オブジェクトに追加してアクセスの許可条件を設定します。

      authzRule1.setAllowAccessConditions(access1);
    
  • Authz Rule 1ルールをMy Domainポリシー・ドメインに追加します。

    domain.addAuthorizationRule(authzRule1);
    

例5-5 認可ルールの作成

  ObAMAuthorizationRule authzRule1 = new ObAMAuthorizationRule();
  authzRule1.setName("Authz Rule 1");
  authzRule1.setEnabled(true);
  ObAMAccessConditions access1 = new ObAMAccessConditions();

  ObAMIdentity person1 = new ObAMIdentity();
  person1.setLoginID("A.Loomis");
  access1.addPerson(person1);

  ObAMIdentity person2 = new ObAMIdentity();
  person2.setLoginID("E.Lawrence");
  access1.addPerson(person2);

  ObAMIdentity group = new ObAMIdentity();
  group.setName("group1");
  access1.addGroup(group);
  person1.setLoginID("admin");
  access1.addPerson(person1);

  authzRule1.setAllowAccessConditions(access1);
  ObAMAction action1 = new ObAMAction();
  action1.setType("headerVar");
  action1.setName("UserIs");
  action1.setValue("uid");
  action1.setValueType(ObAMAction.ATTRIBUTE);
  authzRule1.addActionOfType(ObAMObjectWithActions.SUCCESS, action1);

  domain.addAuthorizationRule(authzRule1);

5.4.25 ObAMAuthorizationRuleMgdクラス

(マネージ・コード)。ObAMAuthorizationRuleは、ポリシーまたはポリシー・ドメインにより保護されているリソースへのアクセスを許可または拒否する条件を指定します。このクラスのコンポーネントである各オブジェクトの詳細は、「ObAMAuthorizationRuleクラス」を参照してください。


注意:

ポリシー・マネージャAPI(現在はバージョン6)の最初のバージョンでは、カスタム認可プラグインはポリシー・マネージャ・エンジンではサポートされていません。このため、カスタム認可プラグインを使用するカスタム認可ルールは作成できません。

マネージ・コードの書式

// Getters and setters
__property System::String *get_Name();
__property System::String *get_Description();
__property bool get_Enabled();
__property bool get_AllowTakesPrecedence();
__property ObAMTimingConditionsMgd *get_TimingConditions();
int getNumberOfActions(ObAMActionTypeMgd *action, int index);
ObAMActionMgd *getActionOfType(ObAMActionTypeMgd *action, int index);
__property ObAMAccessConditionsMgd *get_AllowAccessConditons();
__property ObAMAccessConditionsMgd *get_DenyAccessConditons();
__property System::String *get_AuthorizationScheme();
__property int get_NumberOfSchemeParameters();
ObAMParameterMgd *getSchemeParameter(int index);
__property void set_IDFrom(ObAMAuthorizationRuleMgd *other);
__property void set_Name(System::String *value);
__property void set_Description(System::String *value);
__property void set_Enabled(bool value);
__property void set_AllowTakesPrecedence(bool value);
__property void set_TimingConditions(ObAMTimingConditionsMgd *value);
__property void set_AllowAccessConditions(ObAMAccessConditionsMgd *value);
__property void set_DenyAccessConditions(ObAMAccessConditionsMgd *value);
void addActionOfType(ObAMActionTypeMgd *action, ObAMActionMgd *value);
void modifyActionOfType(ObAMActionTypeMgd *action, ObAMActionMgd *value);
void removeActionOfType(ObAMActionTypeMgd *action, ObAMActionMgd *value);

5.4.26 ObAMAuthorizationExprクラス

ObAMAuthorizationExprクラスのオブジェクトは、認可条件式を指定します。認可条件式は、単純または複雑な条件を指定した1つ以上の認可ルールで構成できます。これらの条件の評価により、式で保護されているリソースへのアクセス権をユーザーが付与されるかどうかが決定されます。認可条件式には、認可ルールの他に、評価対象とする式のルールの様々な組合せ方法を表す記号が含まれます。認可条件式には、使用する認可ルールの名前を含めます。

認可条件式はポリシー・ドメインまたはポリシーに含まれます。各ポリシー・ドメインに含めることのできる認可条件式は1つのみです。ポリシーにも認可条件式を含めることができますが、これは必須ではありません。認可条件式を含めない場合は、ポリシー・ドメイン用に作成されたデフォルト認可条件式がポリシーのリソースに使用されます。

認可条件式のルールは、特定の認可要件を表すために様々な方法で組み合せることができます。アクセス・サーバーによる認可条件式の評価の結果により、リクエストしたリソースへのアクセス権がユーザーに付与されるかどうかが決定されます。

認可条件式の内容は次のとおりです。

  • リソースへのユーザー・アクセスを制御する認可ルール。式に複数のルールを含める場合、+および|記号を使用してルールの解釈方法を指定します。認可ルールの内容と、+および|記号を使用して式のロジックを作成する方法の詳細は、『Oracle Access Managerアクセス管理ガイド』を参照してください。

  • 重複アクションの処理ポリシー。

  • 式の評価が成功、失敗または未確定の場合にクライアントが実行するオプションのアクション。

認可条件式で使用する記号の概要: 認可条件式に複数の認可ルールを含める場合は、保護されているリソースへのアクセスをリクエストしているユーザーに対するそれらのルールの組合せと解釈の方法を指定する記号を、式に含める必要があります。これらの記号としては、+(AND)、|(OR)およびカッコがあります。これらの記号は、演算子と呼ばれます。ポリシー・マネージャGUIでは、ANDとORまたは記号+と|を演算子として指定できます。ただし、ポリシー・マネージャAPIでは記号の方を使用する必要があります。記号および認可スキームの変更の詳細は、『Oracle Access Managerアクセス管理ガイド』を参照してください。

認可条件式の解釈方法: 複雑な認可条件式を作成することが可能です。これには、アクセス・システムがこれらの式を解釈する際に使用する演算子の優先順位と式の中のルールの位置について理解することが重要です。式のルール評価およびユーザー認可の構成の詳細は、『Oracle Access Managerアクセス管理ガイド』を参照してください。

未確定の式結果の概要: 式の評価結果が未確定となった場合、アクセス・システムではメジャー・ステータス・コードとしてDeny(拒否)を、マイナー・ステータス・コードとしてInconclusive(未確定)を戻します。Inconclusiveというマイナー・ステータス・コードは、これらのシステムが、未確定状態が原因で戻される拒否という結果を、真正の拒否という結果と識別できるようにするためのものです。

認可条件式の結果が拒否や未確定の場合、ユーザーはリクエストしたリソースへのアクセスを拒否されますが、拒否と未確定は同じではありません。この区別があることで、開発者にはオプションが増えます。たとえば、アプリケーションが未確定結果に対する前述の2つのステータス・コードを解釈でき、マイナー・ステータス・コードという新たな情報をその他の目的に使用できます。たとえば、アプリケーションでリソースへのアクセスをユーザーに対して拒否するのではなく、その他の認可エンジンを起動することが可能になります。

認可条件式に対するアクション: 認可条件式には、式の評価の結果に基づいて実行するアクションを関連付けることができます。ObAMAuthorizationExprオブジェクトは、作成時にObAMObjectWithActionsクラスを自動的に継承します。このため、ObAMObjectWithActionsクラスを直接インスタンス化しないでください。

ObAMAuthorizationExprオブジェクトは、ObAMObjectWithActionsクラスのメソッドを使用して、関連付けられているアクションを操作します。アクションには次があります。

  • 成功アクション

  • 失敗アクション

  • 未確定アクション

    式のルール間で矛盾する結果が生成された場合、認可条件式の結果は未確定と評価されます。この場合、ユーザーはリソースへのアクセスを拒否されます。ただし、アプリケーションではこの情報を使用できます。

認可条件式の結果および戻されるアクションの概要: 認可条件式の評価後にどのアクションが戻されるかを理解することが重要です。式の評価結果に影響を与えたルールに対するアクションのみが戻されます。これらのルールは、決定的ルールと呼ばれます。決定的ルールの概念は複雑であるため、『Oracle Access Managerアクセス管理ガイド』に記載されている、認可ルールの評価およびユーザー認可の構成に関する各項の説明と例を参照してください。

重複アクション・ポリシー: 認可ルールは認可条件式内で再利用できるため、同じ結果を戻す各認可ルール・インスタンスが評価されることがあり、そのような場合は、アクセス・サーバーから同じアクションが複数回戻されることがあります。また、式内の複数のルールにより同じアクションが戻される場合もあります。式の評価の結果、最終的な結果を決定した複数のルールにより同じアクションが生成される場合は、競合が発生します。重複アクションが発生した場合の処理方法に関するポリシーを設定できます。これを行うには、次の値を使用します。

  • ACTION_DUPLICATE = 0

  • ACTION_IGNORE = 1

  • ACTION_OVERWRITE = 2

  • UNDEFINED = 3

これらの値は次のように解釈されます。

  • ACTION_DUPLICATE: このオプションを選択すると、アクセス・サーバーでは、受信した新規の値のすべてを、ユーザーの認可をリクエストしているアプリケーションに戻す情報に追加します。(アクセス・サーバーでは、重複情報がないかどうかはチェックしません。)このオプションは、アプリケーションでアクションのすべてのインスタンスの情報を受信する場合に選択します。この場合、アプリケーションでは、受信したすべての重複アクションの値を処理する必要があります。このオプションを使用すると、パフォーマンス上の問題が発生する可能性があります。

  • ACTION_IGNORE: このオプションを選択すると、アクセス・サーバーではすべての重複アクションが削除され、ユーザーの認可をリクエストしているアプリケーションにアクションの最初のインスタンスのみが戻されます。アクション値が追加されるたびに、アクセス・サーバーでは既存の値をチェックして、この新規のアクションが既存のアクションと重複していないかどうかを検出します。重複を検出した場合、アクセス・サーバーでは、アプリケーションに戻すアクションに新規の値を追加しません。この場合、重複アクションの値に固有の情報は失われます。このオプションを使用すると、アクセス・サーバーでは重複アクションがないかをチェックする必要があるため、パフォーマンスに負荷がかかる可能性があります。

  • ACTION_OVERWRITE: このオプションを選択すると、アクションの最新のインスタンスの値のみが戻されます。新規の値を受信するたびに前の値が上書きされていくため、それまでの値はすべて失われます。このオプションは、認可をリクエストしているアプリケーションですべての重複アクションの結果を受信する必要がある場合には選択しないでください。このオプションが最も高速です。

重複アクションとWebGateにおける制約: 重複アクションを処理する機能は、アクセス・ゲートでのみ使用できます。アクセス・サーバーでは、「重複アクション」ポリシーで指定されたアクション(「重複」、「重複の無視」または「上書き」)をWebGateに送信します。ところが、WebGateでは、各ヘッダー変数に対して1つの値しかサポートされません。WebGateでは、重複アクションを受信しますが、ヘッダー変数に最後に設定された値が使用されるよう重複をオーバーライドします。このため、それまでのアクションによって同じヘッダー変数に設定されていた値は、逐次失われていきます。

ラベル 範囲 説明
AuthorizationExpr 文字

(必須)

任意。 1つ以上の認可ルール(名前で指定)とこれらのルール間を組み合せる記号からなる式。
Name

(キー)

文字

(必須)

任意。 一意の名前。
Description 文字

(オプション)

任意。 説明。
Enabled ブール・フラグ(必須) 0は「いいえ」、他の値は「はい」を意味します。 ルールを有効化するかどうか。
DuplicateActionsPolicy 文字

(オプション)

次の定数のいずれか。

ACTION_DUPICATE = 0(重複)

ACTION_IGNORE = 1

(無視)

ACTION_OVERWRITE = 2

(上書き)

UNDEFINED = 3

アクセス・サーバーがこの式を評価して重複アクションを検出した場合に従うポリシー。
Success

アクション

アクション・オブジェクトの配列

(オプション)

クラス定義を参照。 式評価の結果として認可が成功した場合にクライアントが実行するアクション。

成功アクションの管理には、ObAmObjectWithActionsクラスが使用されます。

Failure

アクション

アクション・オブジェクトの配列

(オプション)

クラス定義を参照。 式評価の結果として認可が失敗してユーザーがアクセスを拒否された場合にクライアントが実行するアクション。

失敗アクションの管理には、ObAMObjectWithActionsクラスが使用されます。

INCONCLUSIVEアクション アクション・オブジェクトの配列

(オプション)

クラス定義を参照。 式評価の結果として認可を確定できない場合にクライアントが実行するアクション。この場合、ユーザーはリソースへのアクセスを拒否されます。

成功アクションの管理には、ObAmObjectWithActionsクラスが使用されます。


Java

  public ObAMAuthorizationExpr();
  public String getExpression();
  public void setExpression(String value)throws ObAMException;
  public int getDuplicateActionsPolicy();
  public void setDuplicateActionsPolicy(int value)throws ObAMException;
  public int getNumberOfActions(int actionType)throws ObAMException;
  public ObAMAction getActionOfType(int actionType,int index)throws ObAMException;
  public void addActionOfType(int actionType,
  ObAMAction value) throws ObAMException;
  public void removeActionOfType(int actionType,
  ObAMAction value) throws ObAMException;
  public String getName();
  public void setName(String value);
  public void setIDFrom(ObAMObjectWithActions other);

C

  typedef const void * ObAMAuthorizationExpr_t;
  ObAMAuthorizationExpr_t ObAMAuthorizationExpr_new();
  ObAMAuthorizationExpr_t ObAMAuthorizationExpr_copy(
          ObAMAuthorizationExpr_t authz);
  void ObAMAuthorizationExpr_delete(
          ObAMAuthorizationExpr_t *pAuthz);
  const char *ObAMAuthorizationExpr_getExpr(
          ObAMAuthorizationExpr_t authz);
  int ObAMAuthorizationExpr_getDuplicateActionsPolicy(
          ObAMAuthorizationExpr_t authz);
  int ObAMAuthorizationExpr_getNumberOfActions(
          ObAMObjectWithActions_ActionType type,
          ObAMAuthorizationExpr_t authz);
  ObAMAction_tObAMAuthorizationExpr_getActionOfType(
          ObAMObjectWithActions_ActionType type,
          ObAMAuthorizationExpr_t authz, int index);
  void ObAMAuthorizationExpr_setIDFrom(
          ObAMAuthorizationExpr_t authz,
          ObAMAuthorizationExpr_t other);
  void ObAMAuthorizationExpr_setExpr(
          ObAMAuthorizationExpr_t authz, const char *value);
  voidObAMAuthorizationExpr_setDuplicateActionsPolicy(
          ObAMAuthorizationExpr_t authz,
          ObAMAuthorizationExpr_DuplicateActionsPolicy value);

認可条件式の作成

例5-6は、サンプル・プログラムの一部を示しています。このコードは、ポリシー・ドメイン用のデフォルトの認可条件式を作成しています。このコードは次のような機能を実行します。

  • pd_exprという名前のObAMAuthorizationExprオブジェクトを作成し、条件式の内容を指定します。この内容とは、条件式の認可ルールとそれらのルールの組合せ方法です。

      ObAMAuthorizationExpr pd_expr =new ObAMAuthorizationExpr();
      pd_expr.setExpression ("Authz Rule 1 & Authz Rule 2");
    
    
  • 条件式の重複アクション・ポリシーをOVERWRITEに設定します。

      pd_expr.setDuplicateActionsPolicy(ObAMAuthorizationExpr.ACTION_OVERWRITE);
    
    
  • アクションに使用するObAMActionオブジェクトを作成します。このオブジェクトを使用して、条件式を評価した結果が未確定だった場合に実行するアクションを定義します。

      ObAMAction action3 = new ObAMAction();
      action3.setType("otherType");
      action3.setName("authzAction");
      action3.setValue("a");
      action3.setValueType(ObAMAction.FIXEDVALUE);
    
    
  • 認可条件式にINCONCLUSIVEアクションを追加します。

      pd_expr.addActionOfType( ObAMObjectWithActions.INCONCLUSIVE, action3);
    
    
  • ポリシー・ドメインに認可条件式を追加します。

      domain.setDefaultAuthorizationExpr(pd_expr);
    

例5-6 認可条件式の作成

                          .
                          .
                          .
  ObAMAuthorizationExpr pd_expr = new ObAMAuthorizationExpr();
  pd_expr.setExpression("Authz Rule 1 & Authz Rule 2");
  pd_expr.setDuplicateActionsPolicy(ObAMAuthorizationExpr.ACTION_OVERWRITE);
  ObAMAction action3 = new ObAMAction();
  action3.setType("otherType");
  action3.setName("authzAction");
  action3.setValue("a");
  action3.setValueType(ObAMAction.FIXEDVALUE);
  pd_expr.addActionOfType(ObAMObjectWithActions.INCONCLUSIVE, action3);
  domain.setDefaultAuthorizationExpr(pd_expr);
                        .
                        .
                        .

5.4.27 ObAMAuthorizationExprMgdクラス

(マネージ・コード)。このクラスは、マネージ・コードの認可条件式を定義します。ポリシーまたはポリシー・ドメインによって保護されているリソースへのアクセスを許可または拒否する条件を指定します。

マネージ・コードの書式

__property System::String *get_Expr();
__property int get_DuplicateActionsPolicy();
int getNumberOfActions(ObAMActionTypeMgd *type);
ObAMActionMgd *getActionOfType(ObAMActionTypeMgd *type,int index);
__property void set_Expr(System::String *value);
void setDuplicateActionsPolicy(ObDuplicationActionPolicyMgd *value);
void addActionOfType(ObAMActionTypeMgd *type, ObAMActionMgd *value);
void modifyActionOfType(ObAMActionTypeMgd *type,ObAMActionMgd *value);
void removeActionOfType(ObAMActionTypeMgd *type,ObAMActionMgd *value);

5.4.28 ObAMDuplicateActionPolicyMgdクラス

(マネージ・コード)。重複アクションの処理ポリシーを記述するクラスです。選択肢は、重複、無視、上書き、または未定義です。

マネージ・コードの書式

  void setDuplicate();
  void setIgnore();
  void setOverWrite();
  void setUndefined();

5.4.29 ObAMAccessConditionsクラス

ObAMAccessConditionsクラスのオブジェクトは、保護されたリソースへのアクセスの許可または拒否を決める条件を認可ルールに対して指定します。

ラベル 範囲 説明
Role

(キーなし)

文字列の配列

最低1つが必須

次のいずれか

none

anyone

noone

一連のロール
Person 識別オブジェクトの配列

(オプション)

クラス定義を参照 アクセスをリクエストするユーザーと照合する一連のユーザー
Group 識別オブジェクトの配列

(オプション)

クラス定義を参照 ユーザーの照合先とする一連のグループ
Rule 文字列の配列

最低1つが必須

任意 ユーザー・プロファイルを選択する一連のLDAPルール
IPAddress 文字列の配列

最低1つが必須

任意 ユーザーのIPアドレスの照合先とする一連のIPアドレス

Java

  public int getNumberOfPersons();
  public int getNumberOfGroups();
  public int getNumberOfRoles();
  public int getNumberOfRules();
  public int getNumberOfIPaddresses();
  public ObAMIdentity getPerson(int index);
  public ObAMIdentity getGroup(int index);
  public String getRole(int index);
  public String getRule(int index);
  public String getIPaddress(int index);
  public void addRole(String value);
  public void addPerson(ObPerson value);
  public void addGroup(ObGroup value);
  public void addRule(String value);
  public void addIPAddress(String value);
  public void removeRole(String value);
  public void removePerson(ObPerson value);
  public void removeGroup(ObGroup value);
  public void removeRule(String value);
  public void removeIPAddress(String value);
  public void setIDFrom(ObAMAccessConditions other);

5.4.30 ObAMAccessConditionsMgdクラス

(マネージ・コード)。ObAMAccessConditionsMgdオブジェクトは、アクセスの許可または拒否を決める条件を認可ルールに対して指定します。このクラスのコンポーネントである各オブジェクトの詳細は、「ObAMAccessConditionsクラス」を参照してください。

マネージ・コード

  // Getters and setters
  _property int get_NumberOfPersons();
  _property int get_NumberOfGroups();
  _property int get_NumberOfRoles();
  _property int get_NumberOfRules();
  _property int get_NumberOfIPaddresses();
  ObAMIdentityMgd *getPerson (int index);
  ObAMIdentityMgd *getGroup (int index);
  System::String *getRole(int index);
  System::String *getRule(int index);
  System::String *getIPaddress(int index);
  _property void set_IDFrom(ObAMAccessConditionsMgd *access);
  _property void set_AddRole(System::String *value);
  _property void set_AddPerson(ObAMIdentityMgd *value);
  _property void set_AddGroup(ObAMIdentityMgd *value);
  _property void set_AddRule(System::String *value);
  _property void set_AddIPaddress(System::String *value);
  _property void set_RemoveRole(System::String *value);
  _property void set_RemovePerson(ObAMIdentityMgd *value);
  _property void set_RemoveGroup(ObAMIdentityMgd *value);
  _property void set_RemoveRule(System::String *value);
  _property void set_RemoveIPaddress(System::String *value);

5.4.31 ObAMActionTypeMgdクラス

(マネージ・コード)。リクエストするアクションのタイプを記述するために使用されるクラスです。リクエストするアクションのタイプを定義するには、このクラスのsetメソッドを使用します。

マネージ・コード

  void setSuccess();
  void setFailure();
  void setInconclusive();

5.4.32 ObAMObjectWithActionsクラス

ObAMObjectWithActionsクラスは、ObAMAuthenticationRuleクラス、ObAMAuthorizationRuleクラス、およびObAMAuthorizationExprクラスがインスタンス化される際に継承される抽象クラスです。このクラスは直接インスタンス化しないでください。

このクラスのメソッドを使用して、これら他のクラスのオブジェクトに対するアクションの情報を取得および設定します。ObAMObjectWithActionsクラスのメソッドを使用すると、実行するアクションの種類を指定できます。このクラスでは、SUCCESS、FAILURE、INCONCLUSIVEの3つのタイプのアクションを指定できる列挙が定義されています。

ラベル 範囲 説明
Name 文字

(オプション)

任意 認可条件式オブジェクトの名前。
Action Type 列挙値、

整数

SUCCESS = 0

FAILURE = 1

INCONCLUSIVE = 2

クラス定義を参照

メソッドの適用対象とするアクションのタイプを指定する値。

アクション・タイプは次のように適用します。

  • ObAMAuthenticationRuleの認証ルールは、SUCCESSアクションおよびFAILUREアクションと関連付けられます。

  • ObAMAuthorizationRuleの認可ルールは、SUCCESSアクションおよびFAILUREアクションと関連付けられます。

  • ObAMAuthorizationExprの認可条件式は、SUCCESS、FAILURE、およびINCONCLUSIVEアクションと関連付けられます。


Java

  public int getNumberOfActions(int actionType)
          throws ObAMException;
  public ObAMAction getActionOfType(int actionType, int index)
          throws ObAMException;
  public void addActionOfType (int actionType, ObAMAction value)
          throws ObAMException;
  public void removeActionOfType(int actionType, ObAMAction value)
          throws ObAMException;
  public String getName();
  public void setName(String value);
  public void setIDFrom(ObAMObjectWithActions other);

5.4.33 ObAMTimingConditionsクラス

認可ルールには、ルールが有効である時間間隔を設定するタイミング条件を含めることができます。タイミング条件を設定しない場合、デフォルトにより、認可ルールは常時有効になります。タイミング条件は、ルールのアクセスの許可条件とアクセスの拒否条件の両方に影響します。

ObAMTimingConditionsクラスのオブジェクトには、ルールが有効な期間を指定するタイミング条件が含まれます。

ラベル 範囲 説明
RelativeTo

(キーなし)

整数

(オプション)

UNDEFINED=0

GMT=1

LOCAL_TIME=2

タイミング条件がGMTまたはローカル時間のいずれでの時間かを指定するフラグ
StartDate 単一のDateオブジェクト

(オプション)

クラス定義を参照 タイミング条件を適用する期間の開始日
StartTime 単一のTimeオブジェクト

(オプション)

クラス定義を参照 タイミング条件を適用する期間の開始時間
EndDate 単一のDateオブジェクト

(オプション)

クラス定義を参照 タイミング条件を適用する期間の終了日
EndTime 単一のTimeオブジェクト

(オプション)

クラス定義を参照 タイミング条件を適用する期間の終了時間
Months 文字列の配列

(オプション)

Dateオブジェクトにある有効な月の値のリストを参照 月のセット
DayofMonth 文字列の配列

(オプション)

Dateオブジェクトにある有効な日の値のリストを参照 日付のセット
DayofWeek 文字列の配列

(オプション)

Dateオブジェクトにある、この値についての説明を参照 曜日のセット

Java

  public int getRelativeTo();
  public ObAMDate getStartDate();
  public ObAMTime getStartTime();
  public ObAMDate getEndDate();
  public ObAMTime getEndTime();
  public int getNumberOfMonths();
  public int getNumberOfDaysOfMonth();
  public int getNumberOfDaysOfWeek();
  public int getMonth(int index);
  public int getDayOfMonth(int index);
  public int getDayOfWeek(int index);
  public void setRelativeTo(int value)throws ObAMException;
  public void setStartDate(ObAMDate value);
  public void setStartTime(ObAMTime value);
  public void setEndDate(ObAMDate value);
  public void setEndTime(ObAMTime value)
  public void addMonth(int value)throws ObAMException;
  public void addDayOfMonth(int value)throws ObAMException;
  public void addDayOfWeek(int value)throws ObAMException;
  public void removeMonth(int value)throws ObAMException;
  public void removeDayOfMonth(int value)throws ObAMException;
  public void removeDayOfWeek(int value)throws ObAMException;
  public void setIDFrom(ObAMTimingConditions other);

例5-7のコードでは、認可ルールを作成し、そのルールのタイミング条件を設定しています。このコードは次のような機能を実行します。

  • authzRule2という名前のObAMAuthorizationRuleオブジェクトを作成し、オブジェクトのNameメンバーをAuthz Rule 2に設定し、ルールを有効化します。

      ObAMAuthorizationRule authzRule2 = new ObAMAuthorizationRule();
      authzRule2.setName("Authz Rule 2");
      authzRule2.setEnabled(true);
    
    
  • ルールのタイミング条件に使用するtiming2という名前のObAMTimingConditionsオブジェクトを作成します。

      ObAMTimingConditions timing2 = new ObAMTimingConditions();
    
    
  • startDateという名前のObAMDateオブジェクトを作成し、ルールが適用可能となる開始日を指定します。ObAMTimeオブジェクトを作成し、ルールが適用される開始時間を指定します。これらのオブジェクトで開始日および開始時間を設定します。

      ObAMDate startDate = new ObAMDate();
      ObAMTime startTime = new ObAMTime();
      startDate.set(2001, ObAMDate.OCTOBER, 31);
      startTime.set(12, 0, 0);
    
    
  • 時間がWebサーバーのローカル時間であることを指定します。

    timing2.setRelativeTo(ObAMTimingConditions.LOCAL_TIME);
    
    

コードの残りの部分では、2001年10月15日の12:00:00より後の毎年1月と11月の1日、2日、30日のうち、その日が月曜または火曜である場合にかぎり誰でもアクセスできるようにするタイミング条件を設定しています。

例5-7 タイミング条件を使用した認可ルールの作成

                        .
                        .
                        .
  ObAMAuthorizationRule authzRule2 = new ObAMAuthorizationRule();
  authzRule2.setName("Authz Rule 2") ;
  authzRule2.setEnabled(true);
  ObAMTimingConditions timing2 = new ObAMTimingConditions();
  ObAMDate startDate = new ObAMDate();
  ObAMTime startTime = new ObAMTime();
  startDate.set(2001, ObAMDate.OCTOBER, 31);
  startTime.set(12, 0, 0);
  timing2.setRelativeTo(ObAMTimingConditions.LOCAL_TIME);
  timing2.setStartDate(startDate);
  timing2.setStartTime(startTime);
  timing2.addMonth(ObAMDate.JANUARY);
  timing2.addMonth(ObAMDate.NOVEMBER);
  timing2.addDayOfMonth(1);
  timing2.addDayOfMonth(2);
  timing2.addDayOfMonth(30);
  timing2.addDayOfWeek(ObAMDate.MONDAY);
  timing2.addDayOfWeek(ObAMDate.TUESDAY);
  authzRule2.setTimingConditions(timing2);
                  .
                  .
                  .

5.4.34 ObAMTimingConditionsMgdクラス

ObAMTimingConditionsクラスのオブジェクトには、認可ルールに対して設定するタイミング条件が含まれています。タイミング条件には、認可ルールが有効な期間を指定します。

ラベル 範囲 説明
StartDate 単一のDateオブジェクト

(オプション)

クラス定義を参照 タイミング条件を適用する期間の開始日
StartTime 単一のTimeオブジェクト

(オプション)

クラス定義を参照 タイミング条件を適用する期間の開始時間
EndDate 単一のDateオブジェクト

(オプション)

クラス定義を参照 タイミング条件を適用する期間の終了日
EndTime 単一のTimeオブジェクト

(オプション)

クラス定義を参照 タイミング条件を適用する期間の終了時間
Months 文字列の配列

(オプション)

Dateオブジェクトにある有効な月の値のリストを参照 月のセット
DayofMonth 文字列の配列

(オプション)

Dateオブジェクトにある有効な日の値のリストを参照 日付のセット
DayofWeek 文字列の配列

(オプション)

Dateオブジェクトにある、この値についての説明を参照 曜日のセット

タイミング条件の他の設定に加えて、ObAMTimingConditionsMgdのクラスは、タイミング条件がGMTまたはローカル時間のいずれでの時間かを指定します。詳細は、「ObAMTimingConditions_RelativeToMgdクラス」を参照してください。

マネージ・コードの書式

// Getters and setters
_property ObAMDateMgd *get_StartDate();
_property ObAMTimingConditions_RelativeToMgd *get_RelativeTo();
_property ObAMTimeMgd *get_StartTime();
_property ObAMTimeMgd *get_EndDate();
_property ObAMTimeMgd *get_EndTime();
_property int get_NumberOfMonths();
_property int get_NumberOfDaysOfMonth();
_property get_NumberofDaysOfWeek();
int getMonth(int index);
int getDayOfMonth(int index);
int getDayOfWeek(int index);
_property void set_IDFrom(ObAMTimingConditionsMgd *other);
_property void set_RelativeTo(ObAMTimingConditions_RelativeToMgd*value);
_property void set_StartDate(ObAMDateMgd *date);
_property void set_EndTime(ObAMTimeMgd *time);
_property void set_EndDate(ObAMDateMgd *date);
_property void set_StartTime(ObAMDateMgd *time);
_property void set_AddMonth(ObAMDate_MonthsMgd *value);
_property void set_AddDayOfMonth(int value);
_property void set_AddDayOfWeek(ObAMDate_DaysOfWeekMgd *value);
_property void set_RemoveMonth(ObAMDate_MonthsMgd *value);
_property void set_RemoveDayOfMonth(int value);
_property void set_RemoveDayOfWeek(ObAMDate_DaysOfWeekMgd *value);

5.4.35 ObAMTimingConditions_RelativeToMgdクラス

(マネージ・コード)。このクラスは、ObAMTimingConditionsMgdクラスにより使用される様々なタイミング条件を定義するための、マネージ・コードでの値タイプを定義します。このクラスは、列挙ObAMTimingConditions_RelativeToに対するラッパーとなっています。setterメソッドを使用して値を設定するか、ObAMTimingConditions_RelativeTo値を使用できます。

このクラスに属するメソッドは、次のとおりです。

setUndefined() = UNDEFINED
setGMT() = GMT
setLocalTime() = LOCAL_TIME

マネージ・コードの書式

// Getters and setters
_property bool get_isUndefined();
_property bool get_isGMT();
_property bool get_isLocalTime();
_property ObAMTimingConditions_RelativeTo get_Value();
void setUndefined();
void setAsGMT();
void setAsLocalTime();

5.4.36 ObAMDate_DaysOfWeekMgdクラス

(マネージ・コード)。これは、アンマネージ・コードでの曜日列挙に対するラッパーとなっています。タイミング条件の設定時に、このクラスを使用して曜日を定義します。

マネージ・コードの書式

  ObAMDate_DaysOfWeekMgd();
    void setSunday();
    void setMonday();
    void setTuesday();
    void setWednesday();
    void setThursday();
    void setFriday();
    void setSaturday();

5.4.37 ObAMActionクラス

ObAMActionクラスのオブジェクトは、認証または認可プロセスの成功または失敗時に戻されるアクションを表します。このアクションは、WebGateか他のAccess Clientによって解釈されます。

ラベル 範囲 説明

(キー1)

文字

(必須)

次の値のいずれか

redirectURL

headerVars

custom

実行するアクションのタイプ。
Name

(キー2)

文字

(必須)

任意 アクションの名前。
Value 文字

(必須)

任意 アクションの値。
ValueType 文字

(必須)

任意 値のタイプ。固定値またはユーザー属性のいずれかを指定できます。

Java

  public String getType();
  public String getName();
  public String getValue();
  public int getValueType();
  public void setType(Stromg value);
  public void setName(String value);
  public void setValue(String value);

5.4.38 ObAMActionMgdクラス

(マネージ・コード)。ObAMActionMgdクラスは、認証または認可プロセスの成功または失敗時に実行されるアクションを表します。このアクションは、WebGateか他のAccess Clientによって解釈されます。

ラベル 範囲 説明

(キー1)

文字

(必須)

次の値のいずれか

redirectURL

headerVars

custom

実行するアクションのタイプ。
Name

(キー2)

文字

(必須)

任意 アクションの名前。
Value 文字

(必須)

任意 アクションの値。
ValueType 文字

(必須)

任意 値のタイプ。固定値またはユーザー属性のいずれかを指定できます。

マネージ・コードの書式

// Getters and Setters
_property System::String *get_Type();
_property System::String *get_Name();
_property System::String *get_value();
_property ObAMAction_ValueTypeMgd *get_ValueType();
_property void set_IDFrom(ObAMActionMgd *other);
_property void set_Type(System::String *value);
_property void set_Name(System::String *value);
_property void set_Value(System::String *value);
_property void set_ValueType(ObAMAction_ValueTypeMgd *value);

5.4.39 ObAMAction_ValueTypeMgdクラス

(マネージ・コード)。ObAMAction_ValueTypeMgdオブジェクトは、ObAMActionMgdクラスで使用される値タイプを表します。このクラスは、列挙ObAMAction_ValueTypeに対するラッパーとなっています。

マネージ・コードの書式

// Getters and Setters
_property bool get_isUndefined();
_property bool get_isFixedValue();
_property bool get_isAttribute();
_property obAMAction_ValueType get_Value();
_property void set_Value(ObAMAction_ValueType value);
void setUndefined();
void setFixedValue();
void setAttribute();

5.4.40 ObAMAuditRuleクラス

ObAMAuditRuleクラスのオブジェクトは、ポリシーまたはポリシー・ドメインに対して実行する監査の種類を定義します。

ラベル 範囲 説明
Events

(キーなし)

文字列の配列

最低1つが必須

「マスター監査ルール」に記載のリストを参照 監査レコードの生成対象とするイベント・セット
Attributes 文字列の配列

最低1つが必須

任意 監査レコードに含める一連のユーザー・プロファイル属性

Java

  public int getNumberOfEvents();
  public int getNumberOfAttributes();
  public int getEvent(int index);
  public String getAttribute(int index);
  public void addEvent(int value);
  public void addAttribute(String value);
  public void removeEvent(int value);
  public void removeAttribute(String value);
  public void setIDFrom(ObAMAuditRule other);

5.4.41 ObAMAuditRuleMgdクラス

(マネージ・コード)。ObAMAuditRuleMgdオブジェクトは、ポリシーまたはポリシー・ドメインに対する監査の実行方法を指定します。

ラベル 範囲 説明
Events

(キーなし)

文字列の配列

最低1つが必須

「マスター監査ルール」に記載のリストを参照 監査レコードの生成対象とするイベント・セット
Attributes 文字列の配列

最低1つが必須

任意 監査レコードに含める一連のユーザー・プロファイル属性

マネージ・コードの書式

// Getters and setters
__property int get_NumberOfEvents();
__property int get_NumberOfAttributes();
ObAMAuditRule_EventTypeMgd *getEvent(int index);
System::String *getAttribute(int index);
__property void set_IDFrom(ObAMAuditRuleMgd *other);
__property void set_AddEvent(ObAMAuditRule_EventTypeMgd *value);
__property void set_AddAttribute(System::String *value);
__property void set_RemoveEvent(ObAMAuditRule_EventTypeMgd *value);
__property void set_RemoveAttribute(System::String *value);

5.4.42 ObAMAuditRule_EventTypeMgdクラス

(マネージ・コード)。これはマネージ・コードによる値タイプ用クラスで、ObAuditRuleMgdクラスで使用されるイベント・タイプを定義します。このクラスは、列挙ObAMAuditRuleに対するラッパーとなっています。setterメソッドを使用して値を設定するか、ObAMAuditRule_EventType値を使用できます。

マネージ・コードの書式

// Get and set values
__property bool get_isUndefined();
__property bool get_isAuthenticationSuccess();
__property bool get_isAuthenticationFailure();
__property bool get_isAuthorizationSuccess();
__property bool get_isAuthorizationFailure();
__property ObAMAuditRule_EventType get_Value();
__property void set_Value(ObAMAuditRule_EventType value);
void setUndefined();
void setAuthenticationSuccess();
void setAuthenticationFailure();
void setAuthorizationSuccess();
void setAuthorizationFailure();

5.4.43 ObAMDateクラス

ObAMDateクラスのオブジェクトは、日付を表します。ObAMDateクラスには、年、月、日を設定するsetメソッドが1つあります。このメソッドは、日付または時間が無効の場合、BAD_OBJECTコードを伴うObAMExceptionをスローします。

ラベル 範囲 説明
Year

(キーなし)

整数

(必須)

その年全体 このオブジェクトにおける年の値を示す整数
Month 整数

(必須)

次の列挙リスト中のいずれか

JANUARY=1

FEBRUARY=2

MARCH=3

APRIL=4

MAY=5

JUNE=6

JULY=7

AUGUST=8

SEPTEMBER=9

OCTOBER=10

NOVEMBER=11

DECEMBER=12

このオブジェクトにおける月の値を示す整数
Day 整数

(必須)

次の列挙リスト中のいずれか

SUNDAY=1

MONDAY=2

TUESDAY=3

WEDNESDAY=4

THURSDAY=5

FRIDAY=6

SATURDAY=7

このオブジェクトにおける日の値を示す整数

Java

  public int getYear();
  public int getMonth();
  public int getDay();

5.4.44 ObAMDateMgdクラス

(マネージ・コード)。ObAMDateMgdオブジェクトは日付を表します。ObAMDateMgdクラスには、年、月、日を設定するsetメソッドが1つあります。setメソッドは、日付または時間が無効の場合、BAD_OBJECTコードを伴うObAMExceptionをスローします。オブジェクトの各コンポーネントの詳細は、「ObAMDateクラス」を参照してください。

マネージ・コードの書式

// Getters and setters
_property int get_Year();
_property int get_Month();
_property int get_Day();
void set(int year, int month, int day_);

5.4.45 ObAMDate_MonthsMgdクラス

タイミング条件の設定時に、このクラスを使用して月を定義します。

マネージ・コードの書式

ObAMDate_MonthsMgd();
void setJanuary();
void setFebruary();
void setMarch();
void setApril();
void setMay();
void setJune();
void setJuly();
void setAugust();
void setSeptember();
void setOctober();
void setNovember();
void setDecember();

5.4.46 ObAMDate_DaysOfWeekMgdクラス

タイミング条件の設定時(ObAMATimingConditionsMgdクラスを使用)、または日付の設定時(ObAMADateMgdクラスを使用)に、このクラスを使用して曜日を定義します。

マネージ・コードの書式

ObAMDate_DaysOfWeekMgd();
void setSunday();
void setMonday();
void setTuesday();
void setWednesday();
void setThursday();
void setFriday();
void setSaturday();

5.4.47 ObAMIdentityクラス

ObAMIdentityクラスのオブジェクトは、アクセス条件または管理ルールで使用されるユーザー・ディレクトリの中のユーザー・プロファイルまたはグループ・プロファイルを示します。

ラベル 範囲 説明
UID

(キーなし)

文字

(必須)

任意 この識別オブジェクトに固有のID。
Name 文字

(必須)

任意 名前。
LoginID 文字

(必須)

任意 アイデンティティ・システム内の個人オブジェクトに定義されたログインID。グループIDでは空です。

Java

  public String getUID();
  public String getName();
  public String getLoginID();
  public void setUID(String value);
  public void setName(String value);
  public void setLoginID(String value);
  public void serialize(String value);

注意:

このクラスのオブジェクトのNameメンバーは単なるラベルであり、ディレクトリ・エントリには対応していません。このため、Nameしか設定されていないObAMIdentityObjectは、他のオブジェクトに追加できません。

5.4.48 ObAMIdentityMgdクラス

(マネージ・コード)。ObAMIdentityMgdクラスのオブジェクトは、アクセス条件または管理ルールで使用されるユーザー・ディレクトリの中のユーザー・プロファイルまたはグループ・プロファイルを示します。

ラベル 範囲 説明
UID

(キーなし)

文字

(必須)

任意 この識別オブジェクトに固有のID。
Name 文字

(必須)

任意 名前。
LoginID 文字

(必須)

任意 アイデンティティ・システム内の個人オブジェクトに定義されたログインID。グループIDでは空です。

マネージ・コードの書式

// Getters and setters
_property System::String *get_UID();
_property System::String *get_Name();
_property System::String *get_LoginID();
_property ObAMIdentity *get_UnmanageIdentity();
_property void set_UID(System::String *value);
_property void set_Name(System::String *value);
_property void set_LoginID(System::String *value);

注意:

このクラスのオブジェクトに固有のNameメンバーは単なるラベルであり、ディレクトリ・エントリには対応していません。このため、Nameしか設定されていないObAMIdentityObjectMgdは、他のオブジェクトに追加できません。

5.4.49 ObAMParameterクラス

ObAMParameterクラスのオブジェクトは、ポリシーがアクセス・リクエストに適用されるかどうかを判別する際にリクエスト・データ(たとえば、HTTP問合せ文字列またはPOSTデータ)と照合される名前と値のペアを指定します。ObAMParameterオブジェクトは、認可スキームでも使用されます。

ラベル 範囲 説明
Name

(キー)

文字

(必須)

任意 名前
Value 文字

(必須)

任意 名前の値

Java

  public String getName();
  public String getValue();
  public void setName(String value);
  public void setValue(String value);

5.4.50 ObAMParameterMgdクラス

(マネージ・コード)。ObAMParameterMgdクラスのオブジェクトは、ポリシーがアクセス・リクエストに適用されるかどうかを判別する際にリクエスト・データ(たとえば、HTTP問合せ文字列またはPOSTデータ)と照合される名前と値のペアを指定します。ObAMParameterMgdオブジェクトは、認可スキームでも使用されます。オブジェクトの各コンポーネントの詳細は、「ObAMParameterクラス」を参照してください。

マネージ・コード

// Getters and setters
_property System::String *get_Value();
_property System::String *get_Name();
_property void set_Name(System::String *value);
_property void set_Value(System::String *value);

5.4.51 ObAMResourceクラス

ObAMResourceクラスのオブジェクトは、ポリシー・ドメインまたはポリシーが適用されるリソースのセットを表します。このリソース・セットは、リソースURLの各コンポーネントをObAMResourceの各メンバーと照合することで選択されます。

ラベル 範囲 説明
ResourceType

(キー1)

文字

(必須)

任意 組込みまたはカスタムのリソース・タイプ
HostID

(キー2)

文字

(必須)

任意 ホスト名、IPアドレスおよびポートを指定したホストID
URLPrefix

(キー3)

文字

(必須)

任意 URLの最初のローカルな部分を照合するURL接頭辞
Description 文字

(オプション)

任意 説明(オプション)

Java

  public String getResourceType();
  public String getHostID();
  public String getURLPrefix();
  public String getDescription();
  public void setResourceType(String value);
  public void setHostID(String value);
  public void setURLPrefix(String value);
  public void setDescription(String value);
  public void setIDFrom(ObAMResource other);

5.4.52 ObAMResourceMgdクラス

(マネージ・コード)。ObAMResourceMgdクラスのオブジェクトは、ポリシー・ドメインまたはポリシーが適用されるリソースのセットを表します。このリソース・セットは、リソースURLの各コンポーネントをObAMResourceMgdの各メンバーと照合することで選択されます。オブジェクトの各コンポーネントの詳細は、「ObAMResourceMgdクラス」を参照してください。

マネージ・コード

// Getters and setters
_property System::String *get_ResourceType();
_property System::String *get_HostID();
_property System::String *get_URLPrefix();
_property System::String *get_Description();
_property void set_IDFrom(ObAMResourceMgd *other);
_property void set_ResourceType(System::String *value);
_property void set_HostID(System::String *value);
_property void set_URLPrefix(System::String *value);
_property void set_Description(System::String *value);

5.4.53 ObAMTimeクラス

ObAMTimeクラスのオブジェクトは、特定の時間を表します。ObAMTimeクラスには、時、分および秒を設定するsetメソッドが1つあります。指定した値が無効の場合、setメソッドはBAD_OBJECTコードを伴うObAMExceptionをスローします。

ラベル 範囲 説明
Hours

(キーなし)

整数

(必須)

0〜23 このオブジェクトにおける時間の値を示す整数
Minutes 整数

(必須)

0〜59 このオブジェクトにおける分の値を示す整数
Seconds 整数

(必須)

0〜59 このオブジェクトにおける秒の値を示す整数

Java

  public int getHours();
  public int getMinutes();
  public int getSeconds();
  public void set(int hours, int minutes, int seconds)throws ObAMException;

5.4.54 ObAMTimeMgdクラス

(マネージ・コード)。ObAMTimeMgdオブジェクトは時間を表します。ObAMTimeMgdクラスには、時、分および秒を設定するsetメソッドが1つあります。指定した値が無効の場合、setメソッドはBAD_OBJECTコードを伴うObAMExceptionをスローします。オブジェクトの各コンポーネントの詳細は、「ObAMTimeクラス」を参照してください。

ラベル 範囲 説明
Hours

(キーなし)

整数

(必須)

0〜23 このオブジェクトにおける時間の値を示す整数
Minutes 整数

(必須)

0〜59 このオブジェクトにおける分の値を示す整数
Seconds 整数

(必須)

0〜59 このオブジェクトにおける秒の値を示す整数

マネージ・コード

// Getters and setters
_property int get_Hours();
_property int getMinutes();
_property int get_Seconds();
void set(int hours, int minutes, int seconds);

5.5 テスト・オブジェクト

テスト・オブジェクトとは、ObAccessManagerのtestAccessメソッドに入力を提供し、このメソッドから出力を取得するために使用されるオブジェクトです。これらのオブジェクトは保存されることを目的としないので、キー・フィールドを含んでいません。この項では、3つのテスト・オブジェクトについて説明します。

5.5.1 ObAMAccessTestクラス

ObAMAccessTestクラスのオブジェクトは、アクセス・ポリシーのテストを表します。1つのリソース、およびそのリソースにアクセスできるかどうかをテストする1人以上のユーザーを指定します。

ObAMAccessTestオブジェクトは、ObAccessManagerのtestAccessメソッドへの入力引数です。このtestAccessメソッドにより、アクセス・テストの結果を内容とするObAMAccessTestResultsオブジェクトが戻されます。

ラベル 範囲 説明
URL

(キーなし)

文字(必須) 任意。 URL(リソース・タイプを除いたもの)。
Resource 文字(必須) 任意。 リソース・タイプ。
Operation 配列

最低1つが必須

任意。 リソース・タイプに定義されている操作のリスト。
IPAddress 文字

(オプション)

任意。 IPアドレス。
Date 1個のDateオブジェクト(オプション) クラス定義を参照。 日付。
Time 1個のTimeオブジェクト(オプション) クラス定義を参照。 時間。
User 識別オブジェクトの配列

(オプション)

クラス定義を参照。 ユーザーからなる配列。省略した場合、ユーザー・ディレクトリ内のすべてのユーザーのアクセスがテストされます。
ShowAllowed ブール・フラグ(必須) 0は「いいえ」、他の値は「はい」を意味します。 アクセスが許可されたユーザーをテスト結果に表示するかを指定します。
ShowDenied ブール・フラグ(必須) 0は「いいえ」、他の値は「はい」を意味します。 アクセスが拒否されたユーザーをテスト結果に表示するかを指定します。
ShowMatchingPolicy ブール・フラグ(必須) 0は「いいえ」、他の値は「はい」を意味します。 各ユーザーに適用されたポリシーをテスト結果に表示するかを指定します。
ShowMatchingExpr ブール・フラグ

(必須)

0は「いいえ」、他の値は「はい」を意味します。 各ユーザーに適用された認可条件式をテスト結果に表示するかを指定します。
ShowDeterminingRules ブール・フラグ

必須。

0は「いいえ」、他の値は「はい」を意味します。 認可条件式の決定的ルールであった認可ルールをテスト結果に表示するかを指定します。

決定的ルールについての説明は、「ObAMAuthorizationExprクラス」を参照。


Java

  public String getURL();
  public String getResourceType();
  public String getIPaddress();
  public ObAMDate getDate();
  public ObAMTime getTime();
  int getNumberOfOperations();
  int getNumberOfUsers();
  String getOperation(int index);
  public boolean getShowMatchingPolicy();
  public boolean getShowMatchingExpr();
  public boolean getShowDeterminingRules();
  ObAMIdentity getUser(int index);
  public boolean getShowAllowed();
  public boolean getShowDenied();
  public void setURL(String value);
  public void setResourceType(String value);
  public void addOperation(String value);
  public void setIPaddress(String value);
  public void setDate(ObAMDate value);
  public void setTime(ObAMTime value);
  public void addUser(ObAMIdentity value);
  public void setShowAllowed(boolean value);
  public void setShowDenied(boolean value);
  public void setShowMatchingPolicy(boolean value);
  public void setShowMatchingExpr(boolean value);
  public void setShowDeterminingRules(boolean value);

2人のユーザーを使用したテストの作成

例5-8に、サンプル・プログラムからの抜粋を示します。このコードは、2人のユーザーの権限をチェックするテストを作成し、その結果を表示します。このコードでは、テストを作成するためにObAMAccessTestクラスのオブジェクトが使用され、その結果を表示するためにObAMAccessTestResultsクラスのオブジェクトが使用されています。詳細は、「ObAMAccessTestResultsクラス」を参照してください。このコードは、権限がチェックされるユーザーごとに1つずつ、合計2つのObAMIdentityオブジェクトを作成します。さらに、テストに使用するポリシーを定義し、各ユーザーに戻す情報を指定します。この情報には、認可条件式の評価結果、認可の成功/失敗または処理エラーが発生したかどうかが含まれます。ユーザーごとにテスト情報を出力します。これには条件式の結果の出力に大きく影響した決定的ルールが含まれます。このコード・セグメントを例5-8に示します。

例5-8 システムに対する2人のユーザーの権限テスト

static void example5(ObAccessManager am) throws ObAMException
{                     .
                      .

        ObAMAccessTest test = new ObAMAccessTest();
        ObAMIdentity person1 = new ObAMIdentity();
        ObAMIdentity person2 = new ObAMIdentity();

        test.setResourceType("http");
        test.setURL("host1/myresources/doc1.html")
        test.addOperation("GET");
        test.addOperation("POST");
        test.setIPaddress(Ò192.168.1.14");
        ObAMDate date = new ObAMDate();
        ObAMTime time = new ObAMTime();
        date.set(2001, ObAMDate.NOVEMBER, 15);
        time.set(12, 0, 0);
        test.setDate(date);
        test.setTime(time);

        person1.setLoginID("A.Loomis");
        person2.setLoginID("J.Himes");
        person1.setLoginID("admin")
        test.addUser(person1);
        test.addUser(person2);

        test.setShowAllowed(true);
        test.setShowDenied(true);
        test.setShowMatchingPolicy(true);
        test.setShowMatchingExpr(true);
        test.setShowDeterminingRules(true);

        ObAMAccessTestResults results = am.testAccess(test);
        System.out.println("Policy Domain : " + results.getPolicyDomain());
        for (int i = 0; i < results.getNumberOfResults(); i++) {
                 ObAMAccessTestResult result = results.getResult(i);
                 System.out.println("Result:");
                 System.out.println("User : " + result.getUser().getUID());
        if (result.getAuthorized() == true)
        {
              System.out.println("Authorized : ALLOWED");
        }
        else
        {
        if (result.getAuthorizationStatus() ==
                                ObAMAccessTestResult.DENIED)
                {
                      System.out.println("Authorized : DENIED");
                }
        else if (result.getAuthorizationStatus() ==
                            ObAMAccessTestResult.INCONCLUSIVE)
                {
                      System.out.println("Authorized : INCONCLUSIVE");
                }
                else
                {
                      System.out.println("Authorized : ERROR");
        }
     }
                      System.out.println("Policy : " + result.getPolicy());
                      System.out.println(" Expr       : " + result.getExpr());
                      System.out.println(ÒDetermining Rules: ");
                for (int j=0; j<result.getNumberOfDeterminingRules(); j++)
           {
                      System.out.println(Ò Ò +result.getDeterminingRule(j)) ;
           }
                }
        }

5.5.2 ObAMAccessTestMgdクラス

(マネージ・コード)。ObAMAccessTestMgdクラスのオブジェクトは、アクセス・ポリシーのテストを表します。1つのリソース・リクエスト、およびそのリソースにアクセスできるかどうかをテストする1人以上のユーザーを指定します。ObAMAccessTestMgdクラスのオブジェクトは、ObAccessManagerのtestAccessメソッドへの入力引数です。このtestAccessメソッドにより、アクセス・テストの結果を内容とするObAMAccessTestResultsMgdオブジェクトが各ユーザーに戻されます。オブジェクトの各コンポーネントの詳細は、「ObAMAccessTestクラス」を参照してください。

マネージ・コード

// getters and setters
__property System::String *get_URL();
__property System::String *get_ResourceType();
__property System::String *get_IPaddress();
__property ObAMDateMgd *get_Date();
__property ObAMTimeMgd *get_Time();
__property int get_NumberOfOperations();
__property int get_NumberOfUsers();
System::String *getOperation(int index);
ObAMIdentityMgd *getUser(int index);
__property bool get_ShowAllowed();
__property bool get_ShowDenied();
__property bool get_ShowMatchingPolicy();
__property bool get_ShowMatchingExpr();
__property void set_URL(System::String *value);
__property void set_ResourceType(System::String *value);
__property void set_AddOperation(System::String *value);
__property void set_IPaddress(System::String *value);
__property void set_Date(ObAMDateMgd *date);
__property void set_Time(ObAMTimeMgd *time);
__property void set_AddUser(ObAMIdentityMgd *value);
__property void set_ShowAllowed(bool value);
__property void set_ShowDenied(bool value);
__property void set_ShowMatchingPolicy(bool value);
__property void set_ShowMatchingExpr(bool value);

5.5.3 ObAMAccessTestResultsクラス

ObAMAccessTestResultsクラスのオブジェクトには、アクセス・テストの結果が格納されます。これには、「ObAMAccessTestResultsクラス」で説明されているように、1つ以上のAccessTestResultオブジェクトからなる配列が含まれます。AccessTestで指定されているユーザーごとに1つのオブジェクトです。


注意:

Resultsの末尾にsが付いていることに注意してください。

ラベル 範囲 説明
PolicyDomain

(キーなし)

文字

(オプション)

任意 テストに指定したリソースが含まれているポリシー・ドメインの名前。
Results AccessTestResultオブジェクトの配列 クラス定義を参照 結果(AccessTestResultオブジェクト)からなる配列。テストに指定したユーザーごとに1つのオブジェクトです。

Java

  public class ObAMAccessTestResults {
  public String getPolicyDomain();
  public int getNumberOfResults();
  public ObAMAccessTestResult getResult(int index);

C

typedef const void * ObAMAccessTestResults_t;
void ObAMAccessTestResults_delete(
                   ObAMAccessTestResults_t results);
const char *ObAMAccessTestResults_getPolicyDomain(
                   ObAMAccessTestResults_t results);
int ObAMAccessTestResults_getNumberOfResults(
                   ObAMAccessTestResults_t results);
ObAMAccessTestResult_t ObAMAccessTestResults_getResult(
                   ObAMAccessTestResults_t results, int index);

5.5.4 ObAMAccessTestResultsMgdクラス

マネージ・コード。ObAMAccessTestResultsMgdオブジェクトには、アクセス・テストの結果が格納されます。「ObAMAccessTestResultsクラス」を参照してください。これには、「ObAMAccessTestResultMgdクラス」で説明されているように、1つ以上のAccessTestResultMgdオブジェクトからなる配列が含まれます。AccessTestで指定されているユーザーごとに1つのオブジェクトです。


注意:

Resultsの末尾にsが付いていることに注意してください。

// getters and setters
__property System::String *get_PolicyDomain();
__property int get_NumberOfResults();
ObAMAccessTestResultMgd *getResult(int index);

5.5.5 ObAMAccessTestResultクラス

ObAMAccessTestResultクラスのオブジェクトには、アクセス・テストの結果が格納されます。次の情報があります。

  • テストに指定したリソースに適用されるポリシーがある場合は、その名前。

  • テスト・ケースとしてリソースをリクエストしたユーザーのID。

  • ユーザーおよびリソースに適用される認可条件式の名前。

  • ユーザーのアクセス権を判別し、そのユーザーにリソースへのアクセスを認可されるかを判定する、条件式内の一連の決定的ルール(存在する場合)。

ラベル 範囲 説明
User

(キーなし)

識別オブジェクト クラス定義を参照。 ユーザーに関する情報。
Policy 文字

(オプション)

任意。 ユーザーおよびリソースに適用されるポリシーがあれば、その名前。
AuthorizationExpr 文字(オプション) 任意。

クラス定義を参照。

ユーザーおよびリクエストされたリソースに適用される認可条件式の名前。
DeterminingRule 文字

(オプション)

任意。

クラス定義を参照。

認可の結果を決定する際に影響した1つ以上のルールのセット。

これらは、認可条件式の評価結果を決定したルールです。

Authorized ブール・フラグ(必須) 0は「いいえ」、他の値は「はい」を意味します。 ユーザーがリソースへのアクセスを認可されたかどうかの結果。


注意:

Resultの末尾にsが付いていないことに注意してください。

Java

  public ObAMIdentity getUser();
  public String getPolicy();
  public boolean getAuthorized();
  public String getExpr();
  public int getNumberOfDeterminingRules();
  public String getDeterminingRule (int index);
  public int getAuthorizationStatus();

5.5.6 ObAMAccessTestResultMgdクラス

(マネージ・コード)。ObAMAccessTestResultMgdオブジェクトには、単一ユーザーのアクセス・テストの結果が格納されます。「ObAMAccessTestResultsMgdクラス」および「ObAMAccessTestResultsクラス」を参照してください。オブジェクトの各コンポーネントの詳細は、「ObAMAccessTestResultクラス」を参照してください。


注意:

Resultの末尾にsが付いていないことに注意してください。

5.5.7 ObAMExceptionクラス

ポリシー・マネージャAPI Javaメソッドは、入力データまたはアクセス・サーバーとの接続から問題を検出した場合に、ObAMExceptionクラスの例外をスローします。

Java

JavaのObAMExceptionクラスは、ObAccessExceptionクラスを拡張して次のようにしたものです。

public static final int UNDEFINED = 400;
public static final int ADMIN_LOGIN_FAILED = 401;
public static final int NOT_AUTHORIZED = 402;
public static final int BAD_ARGUMENT = 403;
public static final int EXISTING_OBJECT = 404;
public static final int NO_OBJECT = 405;
public static final int BAD_MESSAGE = 406;
public static final int ALREADY_SET = 407;
public static final int FINALIZED = 408;
public static final int UNSUPPORTED_VERSION = 409;
public static final int END_BEFORE_START = 410;
public static final int NO_SET_ADMIN = 411;
public static final int DATA_STORE_ERROR = 412;
public static final int INVALID_LDAP_FILTER = 413;
public static final int MISSING_REQUIRED_PARAM = 414;
public static final int INVALID_PARAM = 415;
public static final int NAME_REQUIRED = 416;
public static final int MODIFY_OBJECT_INVALID = 417;
public static final int INVALID_PROFILE_ATTRIBUTE = 418;
public static final int AUTHZ_SCHEME_CONFLICT = 419;
public static final int BAD_CHARACTER_DATA = 420;
public static final int CACHE_FLUSH_FAILED = 421;
public static final int AUTHN_SCHEME_PARAM = 422;
public static final int OBJECT_IN_USE = 423;
public static final int CANNOT_DELETE = 424;
public static final int POLICY_RESOURCE_TYPE_MISMATCH = 425;
public static final int INTERNAL_ERROR = 426;
public static final int INVALID_USER = 427;
public static final int INVALID_GROUP = 428;
public static final int FEATURE_NOT_SUPPORTED = 429;
public static final int INVALID_FAILURE_ACTION_ATTIBUTE = 430;
public static final int MISSING_AUTHN_STEP = 431;
public static final int INVALID_AUTHZ_EXPR_SYNTAX = 432;
public static final int AUTHZ_RULE_NOT_FOUND = 433;
public static final int AUTHN_SCHEME_DISABLED = 434;
public static final int INVALID_ACTION_TYPE = 435;
public static final int INVALID_DUPLICATE_ACTIONS_POLICY = 436;

5.5.8 ObAccessExceptionクラス

C

予期しないリカバリ不能な問題が発生した場合は、ObAccessExceptionオブジェクトがスローされます。Cは例外処理機構を備えていないため、Cのバインドには、例外がスローされた際にコールされるハンドラを設定するメソッドが含まれています。ハンドラから例外が渡され、例外からコードとデータを抽出します。Cでは、ObAccessExceptionClassが使用されます。ObAccessExceptionクラスの詳細は、「ObAccessExceptionクラス」を参照してください。

ObAccessExceptionクラスの、次の各ObAccessExceptionコードのリストが使用されます。

ObAccessException_AM_UNKNOWN                     = 400,
ObAccessException_AM_ADMIN_LOGIN_FAILED,
ObAccessException_AM_NOT_AUTHORIZED,
ObAccessException_AM_BAD_ARGUMENT,
ObAccessException_AM_EXISTING_OBJECT,
ObAccessException_AM_NO_OBJECT,
ObAccessException_AM_BAD_MESSAGE,
ObAccessException_AM_GET_OBJECT_IN_SET,
ObAccessException_AM_FINALIZED,
ObAccessException_AM_UNSUPPORTED_VERSION,
ObAccessException_AM_END_BEFORE_START,
ObAccessException_AM_UNSUPPORTED_OPERATION,
ObAccessException_AM_NO_SET_ADMIN,
ObAccessException_AM_DATA_STORE_ERROR,
ObAccessException_AM_READ_DATA_STORE_ERROR,
ObAccessException_AM_INVALID_LDAP_FILTER,
ObAccessException_AM_MISSING_REQUIRED_PARAM,
ObAccessException_AM_INVALID_PARAM,
ObAccessException_AM_NAME_REQUIRED,
ObAccessException_AM_MODIFY_OBJECT_INVALID,
ObAccessException_AM_INVALID_PROFILE_ATTRIBUTE,
ObAccessException_AM_AUTHZ_SCHEME_CONFLICT,
ObAccessException_AM_BAD_CHARACTER_DATA,
ObAccessException_AM_CACHE_FLUSH_FAILED,
ObAccessException_AM_AUTHN_SCHEME_PARAM,
ObAccessException_AM_OBJECT_IN_USE,
ObAccessException_AM_CANNOT_DELETE,
ObAccessException_AM_POLICY_RESOURCE_TYPE_MISMATCH,
ObAccessException_AM_INTERNAL_ERROR,
ObAccessException_AM_INVALID_USER,
ObAccessException_AM_INVALID_GROUP,
ObAccessException_AM_FEATURE_NOT_SUPPORTED,
ObAccessException_AM_INVALID_FEATURE_ACTION_ATTRIBUTE

typedef void (*ObAccessExceptionHandler2_t)
                        (ObAccessException_t e);
void ObAccessException_setHandler2(
                        ObAccessExceptionHandler2_t handler);
ObAccessExceptionCode_t ObAccessException_getCode(
                        ObAccessException_t e);
const char *ObAccessException_getParameter(
                        ObAccessException_t e, int which);
const char *ObAccessException_toString(ObAccessException_t e);

5.5.9 ObAccessExceptionMgdクラス

マネージ・コード

マネージ・コードのポリシー・マネージャAPIメソッドは、問題を検出するとObAccessExceptionMgd例外をスローします。列挙、および発生したエラーに対して戻される例外コードを定義した定数についての説明は、「Cファミリのステータス・メッセージとエラー・メッセージの文字列」を参照してください。このクラスに関する詳細は、「ObAccessException」を参照してください。

public:
  ObAccessExceptionMgd: public System::Exception {
  ObAccessExceptionMgd(ObAccessException *ex);
  System::String *getParameter(int index);
  System::String *getCodeString(ObAccessExceptionCode_t code);
  __property System::String *get_String(); };

5.6 サンプル・プログラム

次のリストは、このソフトウェアとともにIdentity_install_dir/identity/oblix/access_server_sdk/samples folderにインストールされるサンプル・プログラムの一部です。このサンプル・プログラムでは、様々なポリシー・マネージャAPIクラスが使用されています。この章の随所に記載した各コード・リストは、このサンプル・プログラムからの抜粋です。

ここに紹介するサンプル・プログラムの抜粋では、http://host1/myresourcesにあるリソース用にMy Domainという名前のポリシー・ドメインを作成します。次に、例5-9のコードによって実行されるタスクのうち、いくつかを示します。

例5-9 ポリシー・ドメインを作成するサンプル・プログラム

                  domain.setName("My Domain");
                  domain.setDescription("excerpted from the sample program");
                  domain.setEnabled(true);
                  ObAMResource resource = new ObAMResource();
                  resource.setResourceType("http");
                  resource.setHostID("host1");
                  resource.setURLPrefix("/myresources");
                  domain.addResource(resource);

// Set the default authentication rule

            ObAMAuthenticationRule authnRule = new ObAMAuthenticationRule();
            authnRule.setScheme("Oracle Access and Identity");
            domain.setDefaultAuthenticationRule(authnRule);

// Set the default audit rule

            ObAMAuditRule auditRule = new ObAMAuditRule();
            auditRule.addEvent(ObAMAuditRule.AUTHENTICATION_SUCCESS);
            auditRule.addEvent(ObAMAuditRule.AUTHENTICATION_FAILURE);
            auditRule.addEvent(ObAMAuditRule.AUTHORIZATION_FAILURE);
             auditRule.addAttribute("uid");
            auditRule.addAttribute("cn");
            domain.setDefaultAuditRule(auditRule);

// Create an authorization rule

           ObAMAuthorizationRule authzRule1 = new ObAMAuthorizationRule();
            authzRule1.setName("Authz Rule 1");
            authzRule1.setEnabled(true);
            ObAMAccessConditions access1 = new ObAMAccessConditions();
            ObAMIdentity person1 = new ObAMIdentity();

           person1.setLoginID("J.Smith");
            access1.addPerson(person1);
            ObAMIdentity person2 = new ObAMIdentity();
            person2.setLoginID("J.Himes");
            access1.addPerson(person2);
            ObAMIdentity group = new ObAMIdentity();
            group.setName("group1");
            access1.addGroup(group);
            person1.setLoginID("admin");
            access1.addPerson(person1);
            authzRule1.setAllowAccessConditions(access1);

// Add a success action to the authorization rule

            ObAMAction action1 = new ObAMAction();
            action1.setType("headerVar");
            action1.setName("UserIs");
            action1.setValue("uid");action1.setValueType(ObAMAction.ATTRIBUTE);
            authzRule1.addActionOfType(ObAMObjectWithActions.SUCCESS, action1);

/ Add the authorization rule to the policy domain

            domain.addAuthorizationRule(authzRule1);


// Create a second authorization rule

            ObAMAuthorizationRule authzRule2 = new ObAMAuthorizationRule();
                  authzRule2.setName("Authz Rule 2");
                  authzRule2.setEnabled(true);
                  authzRule2.setName("Authz Rule 2");
                  authzRule2.setEnabled(true);
                  ObAMTimingConditions timing2 = new ObAMTimingConditions();
                  ObAMDate startDate = new ObAMDate();
                  ObAMTime startTime = new ObAMTime();
                  startDate.set(2001, ObAMDate.OCTOBER, 31);
                  startTime.set(12, 0, 0);
                  timing2.setRelativeTo(ObAMTimingConditions.LOCAL_TIME);
                  timing2.setStartDate(startDate);
                  timing2.setStartTime(startTime);
                  timing2.addMonth(ObAMDate.JANUARY);
                  timing2.addMonth(ObAMDate.NOVEMBER);
                  timing2.addDayOfMonth(1);
                  timing2.addDayOfMonth(2);
                  timing2.addDayOfMonth(30);
                  timing2.addDayOfWeek(ObAMDate.MONDAY);
                  timing2.addDayOfWeek(ObAMDate.TUESDAY);
                  authzRule2.setTimingConditions(timing2);
                  ObAMAccessConditions access2 = new ObAMAccessConditions();
                  access2.addIPAddress("192.168.*.*");
                  authzRule2.setAllowAccessConditions(access2);

// Add a failure action to the second authorization rule
            ObAMAction action2 = new ObAMAction();
                  action2.setType("otherType");
                  action2.setName("authzAction");
                  action2.setValue("b");
                  action2.setValueType(ObAMAction.FIXEDVALUE);
                  authzRule2.addActionOfType(
                                                                  ObAMObjectWithActions.FAILURE, action2);

// Add the rule to the domain
        domain.addAuthorizationRule(authzRule2);

// Create a third authorization rule to allow anyone access
                  ObAMAuthorizationRule authzRule3 = new ObAMAuthorizationRule();
                  authzRule3.setName("Authz Rule 1");
                  authzRule3.setEnabled(true);
                  ObAMAccessConditions access3 = new ObAMAccessConditions();
                  access3.addRole("Anyone");
                  authzRule3.setAllowAccessConditions(access3);

// Add the rule to the domain
                  domain.addAuthorizationRule(authzRule3);

/ Create a fourth authorization rule to deny anyone access

                 ObAMAuthorizationRule authzRule4 = new ObAMAuthorizationRule();
                  authzRule4.setName("Authz Rule 2");
                  authzRule4.setEnabled(true);
                  ObAMAccessConditions access4 = new ObAMAccessConditions();
                  access4.addRole("Anyone");
                  authzRule4.setDenyAccessConditions(access4);

// Add the rule to the domain

                  domain.addAuthorizationRule(authzRule4);

// Create a default authorization expression for the policy domain
                  ObAMAuthorizationExpr pd_expr = new ObAMAuthorizationExpr();
                  pd_expr.setExpression("Authz Rule 1 & Authz Rule 2");
                  pd_expr.setDuplicateActionsPolicy(
                                          ObAMAuthorizationExpr.ACTION_OVERWRITE);
// Add an Inconclusive action
                  ObAMAction action3 = new ObAMAction();
                  action3.setType("otherType");
                  action3.setName("authzAction");
                  action3.setValue("a");
                  action3.setValueType(ObAMAction.FIXEDVALUE);
                  pd_expr.addActionOfType(ObAMObjectWithActions.INCONCLUSIVE, action3);

// Add the expression to the policy domain
                  domain.setDefaultAuthorizationExpr(pd_expr);

// Set policy 1 for My Domain for GET
// and POST to http://host1/myresources/doc1.html

            ObAMPolicy policy1 = new ObAMPolicy();
            policy1.setName("My Domain Policy 1");
            policy1.setResourceType("http");
            policy1.setHostID("host1");
            policy1.setURLPattern("/myresources/doc1.html");
            policy1.addOperation("GET");
            policy1.addOperation("POST");
            policy1.addResource(resource);
            ObAMAuthorizationExpr p1_authzExpr = new ObAMAuthorizationExpr();
            p1_authzExpr.setExpression("Authz Rule 1 & Authz Rule 2");
            p1_authzExpr.setDuplicateActionsPolicy(ObAMAuthorizationExpr.UNDEFINED);
            policy1.setAuthorizationExpr(p1_authzExpr);
            domain.addPolicy(policy1);

/ Set policy 2 for My Domain for GET
// and POST to http://host1/myresources/prog
// with a query string or post data of progid=1.
            ObAMPolicy policy2 = new ObAMPolicy();
            policy2.setName("My Domain Policy 2");
            policy2.setResourceType("http");
            policy2.setURLPattern("/myresources/prog");
            policy2.addOperation("GET");
            policy2.addOperation("POST");
            policy2.addResource(resource);
            ObAMAuthorizationExpr p2_authzExpr = new ObAMAuthorizationExpr();
            p2_authzExpr.setExpression("Authz Rule 1 & Authz Rule 2");
            p2_authzExpr.setDuplicateActionsPolicy(
                                 ObAMAuthorizationExpr.ACTION_IGNORE);
            policy2.setAuthorizationExpr(p2_authzExpr);
            ObAMParameter parameter2 = new ObAMParameter();
            parameter2.setName("progid");
            parameter2.setValue("1");
            policy2.addParameter(parameter2);
            domain.addPolicy(policy2);
// Set an admin rule for My Domain that gives delegate
// rights to J.Smith

      ObAMAdminRule adminRule = new ObAMAdminRule();
      ObAMIdentity adminPerson = new ObAMIdentity();
      adminPerson.setLoginID("J.Smith");

     adminPerson.setLoginID("admin");
      adminRule.addPerson(adminPerson);
      domain.setDelegateAdminRule(adminRule);

/ Create My Domain. If it already exists, this will throw an exception.

      am.setPolicyDomain(domain, ObAccessManager.CREATE);
// Get and display all domains that start with My
            ObAMPolicyDomain[] domains =
                                 am.getPolicyDomains(ObAccessManager.MAX,
            "My", ObAccessManager.BEGINS_WITH);
                  if (domains != null) {
                        for (int i = 0; i < domains.length; i++) {
                                      displayPolicyDomain(0, "Policy Domain:", domains[i]);
                        }
                  };
            }