ヘッダーをスキップ
Oracle Access Manager統合ガイド
10g(10.1.4.2.0)
E05809-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

18 ASP.NETとの統合

Oracle Access Managerは、Microsoft .NET FrameworkのASP.NETコンポーネントをサポートしています。開発者はこのコンポーネントを使用して、Webアプリケーションや分散アプリケーションの構築とデプロイを行い、実行します。

ASP.NET用のセキュリティ・コネクタは、ネイティブの.NETロールベースのセキュリティをサポートして強化します。この章では、ASP.NET用セキュリティ・コネクタを使用して新規のOblixPrincipalオブジェクトをインスタンス化し、ロール(Oracle Access Managerの認可ルール)とネイティブのWindowsPrincipalオブジェクトを移入します。

この章のトピックは次のとおりです。

18.1 ASP.NETについて

ASP.NETは、Microsoft .NET Frameworkの一連のテクノロジです。コンパイルを使用し、.NET Framework内で使用可能なテクノロジをキャッシュすることにより、WebアプリケーションとXML Webサービスの構築を可能にします。ASP.NETページの特性:

開発者は、オブジェクト指向の再利用可能なタイプのコレクションである.NET Frameworkクラス・ライブラリを使用してASP.NETアプリケーションを作成できます。WebアプリケーションとXML Webサービスは、共通言語ランタイム(CLR)の機能を利用できます。

18.2 セキュリティ・プリンシパルとセキュリティID(SID)

ASP.NETとMicrosoft Internet Information Services(IIS)の両方が提供するセキュリティ・モデルにより、ユーザーを適切に認証し、アプリケーション内の正しいセキュリティ・コンテキストを取得できます。

ユーザーの(場合によってはアプリケーションやコンピュータの)IDは、セキュリティ・プリンシパルと呼ばれます。クライアントは、サーバーがプリンシパルのIDを検証できるように資格証明を提示する必要があります。IDが確認されると、アプリケーションはプリンシパルに対して、保護されたリソースへのアクセスを認可します。

Windowsには、ユーザーIDとユーザーのロールIDを定義するWindowsPrincipalオブジェクトが用意されています。このロールIDは、WindowsでユーザーIDに対して定義された1つ以上のロールです。Microsoft .NETテクノロジには、Windows固有のロールのみを使用してPrincipalオブジェクトを作成するインタフェースが用意されています。ASP.NETアプリケーションはWindows IPrincipal.IsInRoleメソッドを呼び出し、IDが管理者ロールまたはユーザー・ロールなどの特定のロールに存在するかどうかを確認します。

ASP.NET Framework内のセキュリティは、セキュリティID(SID)を中心に機能します。SIDはOracle Access Managerのシングル・サインオン・トークンに相当し、Windowsオペレーティング・システム内における一意のユーザーを表します。ASP.NETは、開発者がそのユーザーになることを可能にする一連の管理オブジェクトに各SIDをラップします。

SIDをラップするメイン・オブジェクトを、IDオブジェクト(IIdentity)といいます。このオブジェクトにより、開発者は次の項目を取得するメソッドを呼び出し、IDがどのように確立されたかを確認できます。

詳細は、Microsoft ASP.NETのドキュメントを参照してください。

18.3 IPrincipal.IsInRoleメソッドの構文

プリンシパル・オブジェクトは、ユーザーのID(IIdentity)やユーザーが属するロールなど、コードの実行対象となるユーザーのセキュリティ・コンテキストを表します。.NET Frameworkクラス・ライブラリIPrincipalインタフェースにより、プリンシパル・オブジェクトの基本機能が定義されます。


注意:

すべてのプリンシパル・オブジェクトに対して、IPrincipalインタフェースを実装する必要があります。

認可処理の際に、IPrincipal.IsInRoleパブリック・メソッドにより、現在のプリンシパルが特定ンロールに属しているかどうかが判断されます。

次のIPrincipal.IsInRoleメソッドの構文は、.NET Frameworkバージョン1.1に基づいたものです。1つの例として示します。

[Visual Basic]
Function IsInRole( _
    ByVal role As String _
) As Boolean
[C#]
bool IsInRole(
     string role
);
[C++]
bool IsInRole(
     string* role
);
[JScript]
function IsInRole(
     role : String
) : Boolean;

18.3.1 パラメータ

role

メンバーシップの確認対象であるロールの名前です。

18.3.2 戻り値

true: 現在のプリンシパルが指定されたロールのメンバーである場合、trueが返されます。

false: それ以外の場合は、falseが返されます。

18.3.3 サポートされているバージョンとプラットフォーム

サポートおよび動作要件については、次のURLを参照してください。

http://www.oracle.com/technology/documentation/

この情報を参照するには、OTNに登録する必要があります。

また、この統合用にサポートされているバージョンとプラットフォームを確認するには、次に示すMetalinkを参照してください。

Metalinkの情報を表示する手順

  1. ブラウザで、次のURLを入力します。

    https://metalink.oracle.com

  2. Metalinkにログインします。

  3. 「Certify」タブをクリックします。

  4. 「View Certifications by Product」をクリックします。

  5. 「Application Server」オプションを選択して「Submit」をクリックします。

  6. 「Oracle Identity Management」を選択して「Submit」をクリックします。

  7. 「Oracle Identity Management Certification Information 10g (10.1.4.2.0) (html)」をクリックして、「Oracle Identity Management」ページを表示します。

  8. セクション6、Oracle Access Managerの動作保証のリンクをクリックして、動作保証マトリックスを表示します。

18.3.4 要件

この機能は、.NET FrameworkをサポートするすべてのWindowsプラットフォームで稼働します。

以前のWebGateは、それよりも新しいアクセス・サーバーとの互換性を備えています。ただし、以前のWebGateは、『Oracle Access Manager Access System Administration Guide』の説明のように、共有シークレットに対して異なる暗号化スキームを使用します。

詳細および最新の構文は、次のWebサイトを参照してください。

http://msdn.microsoft.com/developercenters/

18.4 ASP.NET用セキュリティ・コネクタについて

ASP.NET用セキュリティ・コネクタには、次の機能があります。

たとえばMicrosoftは、Windowsドメイン内に事前定義されたロールを提供します。ただし、Microsoftロールには、ユーザーのアクセス権を変更できる柔軟なOracle Access Managerの動的グループ、タイミング、その他の条件がありません。

認可プロセスでOracle Access Managerアセンブリを使用するように、ASP.NETアプリケーションまたはWebサービスをカスタマイズできます。これにより、Oracle Access Managerの認可アクションが、.NET環境において重要なロールにマップされるヘッダー変数を使用するロールに変換されます。


注意:

管理者は、アプリケーション開発者やデプロイ担当者とともに、使用するロールの計画と調整を行う必要があります。Oracle Access Managerは.NETロールを認識できず、検出する方法もありません。Oracle Access Managerロールと.NETロールは、Oracle Access Managerのロール文字列を介してのみ関連します。参照整合性は提供されません。暗黙的な定義も行われません。

18.5 Oracle Access Managerのコンポーネントと要件

ASP.NET用セキュリティ・コネクタのライブラリ・アセンブリOBPrincipalHTTPModule.dllは、WebGateとともに同じディレクトリにインストールされます。次に例を示します。

\WebGate_install_dir\access\oblix\apps\webgate\bin\ObPrincipalHTTPModule.dll

複数のアプリケーションがOBPrincipalHTTPModuleアセンブリを共有できるため、このアセンブリはグローバル・アセンブリ・キャッシュ(GAC)に格納されます。

新規のOracle Access Managerライブラリ・アセンブリは、ASP.NET HttpModuleとして実行されます。したがって、このアセンブリに関する詳細を、ASP.NETアプリケーションと同じマシンの同じディレクトリ内のWeb.configファイルに定義する必要があります。

ObPrincipalHTTPModuleアセンブリには、新規のOblixPrincipalオブジェクト・クラスとOblixHttpModuleが格納されます。このアセンブリを使用することにより、ASP.NETアプリケーションによってOracle Access Managerロールを定義して渡すことができます。このアセンブリを使用しない場合、アプリケーションによって渡すことができるのはWindowsロールのみになります。

18.6 OblixHttpModule

OblixHttpModuleは、Oracle Access ManagerロールとWindowsPrincipalオブジェクトでサポートされるロールを認識します。実際には、.NET Frameworkクラス・ライブラリ内のすべてのプリンシパル・オブジェクトがOracle Access Managerによって認識されます。

OblixHttpModuleは、ASP.NETアプリケーションを保護するOracle Access Manager認可ルール内のアクションタイプとして指定する必要があります。詳細は、「Oracle Access Managerのロール・アクションの設定」を参照してください。

OblixHTTPModuleは、認可時に次の処理を行います。


注意:

アプリケーションがプリンシパル・オブジェクトをリクエストするたびに、他のすべてのプリンシパル・オブジェクトをカプセル化するOblixPrincipalオブジェクトを受け取ります。

18.6.1 OblixPrincipalオブジェクト

ロールとは、管理者やユーザーなど、メンバーシップ・カテゴリの名前です。OblixPrincipalオブジェクトは、コードの実行対象となるユーザーのセキュリティ・コンテキストを表します。このオブジェクトには、Windows IPrincipalインタフェースから導出されるユーザーのID(IIdentity)と、このユーザーが属するロールが含まれます。iPrincipal.IsInRoleメソッドは、Oracle Access ManagerロールとiPrincipalインタフェースをチェックします。

18.7 ASP.NET用セキュリティ・コネクタを使用した認可

次に示す概要では、ASP.NET用セキュリティ・コネクタを使用した認可について説明します。詳細な例は、「Oracle Access Managerのロールベースの認可」を参照してください。

プロセスの概要: ASP.NET用セキュリティ・コネクタを使用した認可

  1. ユーザーが認証されると、WebGateは通常どおりにアクセス・サーバーを使用して認可プロセスを開始します。

  2. IIS Webサーバーは、Windowsの偽装に基づいてWindowsPrincipalオブジェクトを作成します。

  3. OblixHttpModuleはリクエストを受け取り、WindowsPrincipalオブジェクトを使用して新規のOblixPrincipalオブジェクトをインスタンス化し、Oracle Access Managerの認可ルール・アクションに基づいてOracle Access Managerのロール・データを追加します。

  4. OblixPrincipalオブジェクトは自分自身を初期化し、Oracle Access Managerのロール・データを認識してメモリーに保存します。

  5. OblixHttpModuleは、OblixPrincipalオブジェクトをリクエストに関連付け、IIS Webサーバーに制御を戻します。

  6. ASPアプリケーションはリクエストに対するOblixPrincipalオブジェクトを抽出し、IPrincipal.IsInRoleメソッドを呼び出します。

  7. OblixPrincipalオブジェクトは、.NET Frameworkクラス・ライブラリからWindowsPrincipalオブジェクトのIsInRoleメソッドを呼び出して現在のプリンシパルが指定された.NETロールに属するかどうかを判断し、Oracle Access Managerロールを確認してASP.NETアプリケーションに応答を返します。

  8. IPrincipal.IsInRoleメソッドは、現在のユーザーのIDおよびOracle Access Manager認可ルールに従って、trueまたはfalseを返します。構文例は、「IPrincipal.IsInRoleメソッドの構文」を参照してください。

    応答がfalseの場合、PrincipalオブジェクトはOracle Access Managerロール・リスト内でリクエストされたロールを検索し、ASP.NETアプリケーションへ応答を返します。応答がtrueの場合、ASP.NETアプリケーションは処理を完了し、リソースへのアクセスが許可されます。

18.8 ASP.NET用セキュリティ・コネクタの使用

次のタスクの概要では、ASP.NET用セキュリティ・コネクタの使用方法について説明します。

タスクの概要: ASP.NET用セキュリティ・コネクタの設定

  1. 「環境の設定」の説明に従って、WebGateをインストールします。

  2. 「セキュリティ・コネクタ用ASP.NETアプリケーションの設定」の説明に従って、アプリケーションを設定します。

  3. 「Oracle Access Managerのロール・アクションの設定」の説明に従って、Oracle Access Managerのロール・アクションを構成します。

プロセスの概要は、「Oracle Access Managerのロールベースの認可」を参照してください。

18.8.1 環境の設定

ASP.NET用セキュリティ・コネクタを使用するには、ASP.NETとともに、IIS Webサーバーと.NET FrameworkをホストするマシンでWebGateを設定する必要があります。

IIS Webサーバーのインストール時に、オプションで.NET FrameworkとASP.NETもインストールできます。これにより、自動的にIIS metabaseが構成されます。ASP.NETアプリケーションのセキュリティ構成とIISのセキュリティ構成は、それぞれ独立しています。それぞれを個別に使用することも、併用することもできます。

IISは、セキュリティ関連の構成設定をIIS metabaseに保持します。ASP.NETは、セキュリティ(およびその他の)構成設定をXML構成ファイルに保持します。詳細は、Microsoftのドキュメントを参照してください。

環境を設定する手順

  1. ASP.NETとともに、IIS Webサーバーと.NET Frameworkをインストールします。

    IIS v6.xを使用している場合、ASP.NETアプリケーションを有効にしてください。IIS Webサーバーのインストール後に.NET Frameworkをインストールすると、次の手順のアクションが自動的に実行されます。その場合、次の手順は省略してください。

  2. 必要に応じてASP.NETを登録し、WebGateをホストするマシン上でASP.NET Webサービス拡張を許可します。

    たとえばaspnet.regiis.exeを構成する場合、次の画面ショットのように、「IIS」、local_host、「Web Service Extensions」、「ASP.NET v1.1.4322」、「Properties」、「Allowed」の順に移動します。

    可能な設定を示すサンプル・ページ
  3. IIS Webサーバー、.NET Framework、ASP.NETをホストするマシン上に、WebGateをインストールします。

    .NET FrameworkがWebGateホストに設定されていない場合、WebGateのインストールは完了せずに終了します。すべてのアプリケーションでObPrincipalHTTPModuleアセンブリを共有するには、このアセンブリをグローバル・アセンブリ・キャッシュの一部としてインストールします。

18.9 セキュリティ・コネクタ用ASP.NETアプリケーションの設定

Visual Studio.NETを使用してASP.NETアプリケーションやWebサービスを作成すると、一般的なWeb.configファイルが自動的に作成されます。このファイルを変更して、認可時にObPrincipalHTTPModule.dllアセンブリを使用するようにアプリケーションをカスタマイズできます。

偽装を有効にすると、ASP.NETアプリケーションは、そのアプリケーションの実行対象となるクライアントのIDを使用して実行できます。ASP.NETは、偽装するトークンをIISから受け取ります。


注意:

アプリケーションとOracle Access Managerで偽装を有効にしない場合、すべてのロールをカプセル化するOracle Access Managerのロールは戻されません。ただし、権限が必要ない場合もあります。

ASP.NETアプリケーションを設定する手順

  1. Microsoftのドキュメントの説明に従い、Visual Studio .NETを使用してASP.NETアプリケーションまたはWebサービスを記述します。

  2. OblixHttpModuleとOBPrincipalHTTPModule.dllを使用するには、次の記述を<System.Web>にあるWeb.configファイルに追加します。

    独自のPublicKeyTokenを指定してください。次に例を示します。

    -->
    <httpModules>
         <add type="Oblix.Agents.OblixHttpModule,
    ObPrincipalHttpModule, Version=7.0.0.0, Culture=neutral,
    PublicKeyToken="xxxxxxxxnnnnxxxx" name="OblixHttpModule"/>
    </httpModules>
    <compilation
         defaultLanguage="c#"
         debug="true"
    />
    

    注意:

    Culture=の値は大文字と小文字を区別します。「neutral」は小文字で指定してください。

  3. アプリケーション内のObPrincipalHttpModuleアセンブリに参照を設定します。

    Visual Studioのプロジェクトを右クリックし、「Add Reference」を選択して「Project」タブをクリックし、グローバル・アセンブリ・キャッシュを検索して選択します。


    注意:

    コマンドラインからアプリケーションを構築する場合は、/rオプションも使用できます。

    アセンブリに参照を設定する画像

    次の手順のように、アプリケーションでiPrincipalオブジェクトを参照するか、Web.configファイル内のACLsをポイントできます。

  4. 必要な.NETアセンブリのiPrincipal参照をアプリケーションに追加します(またはサンプルのweb.configファイルを参照してください)。

    例:

    using System.Security.Principal;
    using System.Web.Security;
    
  5. アプリケーションに対して適切なパラメータが設定されたIPrincipal.IsInRole()関数を呼び出すメソッドを、アプリケーションに追加します。

    たとえば、認可ルール・アクションの戻り値がManagerの場合、このメソッドは次のようになります。

    Context.User.IsInRole("Manager"); // Context - HTTPContext
    object associated with the page
           // user - Principal object
    

    これでアプリケーションは、セキュリティ・コネクタを使用するように設定されました。次に、Oracle Access Managerのロール・アクションを設定します。

18.9.1 Oracle Access Managerのロール・アクションの設定

アクションはユーザーに関する情報を、同じ(または異なる)Oracle Access Managerのポリシー・ドメインにある他のアプリケーションに渡すことができます。認可アクションは、ユーザーがリソースへのアクセスをリクエストした場合(つまり、ユーザーがリソースのURLをリクエストした場合)に発生します。

ロールをOblixHttpModuleに渡す前に、ASP.NETアプリケーションを保護するポリシー・ドメインの認可ルール内にロール・アクションを作成する必要があります。このアクションは、OblixHttpModuleに依存します。Oracle Access Managerクライアントは、このロール・アクションを使用してヘッダー変数とは別にロールを定義できます。

このロールは、Principaオブジェクトに格納されます。必要に応じて、任意の数のロールを設定できます。各ロールの値は、OblixPrincipalオブジェクトに追加されます。.NET Frameworkクラス・ライブラリから任意のロール値でIPrincipal.IsInRoleメソッドを呼び出すと、trueが返されます。

Oracle Access Managerのロール・アクションを設定する手順

  1. ポリシー・マネージャにポリシー・ドメインを作成してASP.NETアプリケーションを保護し、偽装アクションを設定します。

    ポリシー・ドメイン構成とシングル・サインオン構成の詳細は、『Oracle Access Manager Access System Administration Guide』を参照してください。

  2. 認可ルールを選択して「アクション」タブをクリックし、ロールをOblixHttpModuleに渡すアクションをこの認可ルールに対して定義します。

    • タイプ: OblixHttpModuleを指定します。OblixHttpModuleタイプの場合のみ、ASP.NET HttpModuleに転送されます。

    • 名前: ロールまたは名前を入力します。

      必要に応じて、任意の数のロールを設定できます。各ロールの値は、OblixPrincipalオブジェクトに追加されます。これらのいずれかの値でIPrincipal.IsInRoleメソッドを呼び出すと、trueが戻されます。

      設定できる名前は1つだけです。IISによってID名が提供されない場合、名前はWeb.configファイル内に存在します(None authenticationなど)。偽装用にWindows認証が設定されてWebGateが構成されている場合、このアクションは無視されます。

    • 戻り値: 他のアクションと同様に、任意の静的または動的な値を指定できます。

  3. ルールを保存してアクセス・サーバーを再起動し、変更を有効にします。

    これで環境が設定され、ASP.Netアプリケーションが完了し、Oracle Access Managerのポリシー・ドメインは新しい認可ルールによってアプリケーションを保護します。

18.10 Oracle Access Managerのロールベースの認可

ASP.NET用セキュリティ・コネクタを使用した認証およびロールベースの認可時に、次のプロセスが発生します。図18-1にプロセスの順序を示し、その後に詳細を記載します。

図18-1 ASP.NET用セキュリティ・コネクタの認可フロー

プロセス・ダイアグラム。この図の後にテキスト・バージョンが続きます。

プロセスの概要: 認証時と認可時のイベント

  1. Webサーバーは、ユーザーのASP URLリクエストを受信します。WebGateはそのリクエストを捕捉し、アクセス・サーバーと通信を行って次の事項を判断します。

    • リソースが保護されているか

    • リソースの保護方法

    • ユーザーが認証されているか

    • ユーザー・アクセスが認可されているか

    通常どおり、アクセス・サーバーとディレクトリ・サーバー間で認証が行われます。

  2. ユーザーが認証されると、WebGateはアクセス・サーバーを使用して認可プロセスを開始し、次の処理を実行します。

    1. ロールにアクション・ヘッダーを設定します。

    2. Windowsの偽装を実行します。

    3. IIS Webサーバーに制御を戻します。

  3. IIS Webサーバーは、Windowsの偽装に基づいてWindowsPrincipalオブジェクトを作成します。

  4. OblixHttpModuleは、次の処理を実行します。

    1. リクエストを受信します。

    2. リクエストから抽出されたWindowsPrincipalオブジェクトを使用して、新規のOblixPrincipalオブジェクトをインスタンス化します。

    3. Oracle Access Managerのロール・データ(認可ルール・アクション)を追加します。

  5. OblixPrincipalオブジェクトは自分自身を初期化し、Oracle Access Managerのロール・データをメモリーに保存します。

  6. OblixHttpModuleは、OblixPrincipalオブジェクトをリクエストに関連付け、IIS Webサーバーに制御を戻します。

  7. ASPアプリケーションはリクエストに対してOblixPrincipalオブジェクトを抽出し、IPrincipal.InIsRoleメソッドを呼び出します。OblixPrincipalオブジェクトは、次の処理を実行します。

    1. WindowsPrincipalオブジェクトのIsInRoleメソッドを呼び出します。

    2. Oracle Access Managerロールを確認します。

    3. ASP.NETアプリケーションに応答を返します。

      応答がfalseの場合、PrincipalオブジェクトはOracle Access Managerロール・リスト内でリクエストされたロールを検索し、ASP.NETアプリケーションへ応答を返します。

  8. ASP.NETアプリケーションは処理を完了し、リソースへのアクセスが許可されます。