Oracle Access Managerは、Microsoft .NET FrameworkのASP.NETコンポーネントをサポートしています。開発者はこのコンポーネントを使用して、Webアプリケーションや分散アプリケーションの構築とデプロイを行い、実行します。
ASP.NET用のセキュリティ・コネクタは、ネイティブの.NETロールベースのセキュリティをサポートして強化します。この章では、ASP.NET用セキュリティ・コネクタを使用して新規のOblixPrincipalオブジェクトをインスタンス化し、ロール(Oracle Access Managerの認可ルール)とネイティブのWindowsPrincipalオブジェクトを移入します。
この章のトピックは次のとおりです。
ASP.NETは、Microsoft .NET Frameworkの一連のテクノロジです。コンパイルを使用し、.NET Framework内で使用可能なテクノロジをキャッシュすることにより、WebアプリケーションとXML Webサービスの構築を可能にします。ASP.NETページの特性:
サーバー上で稼働し、ブラウザに送信されるHTML、WML、XMLなどのマークアップを生成します。
アプリケーション・ロジックとユーザー・インタフェースの分離を可能にするコンパイル済イベントドリブン・プログラミング・モデルを使用します。
クライアント側ロジックではなく、Visual Basic .NET、C# .NETまたは.NET対応言語で記述されたサーバー側ロジックを格納します。
開発者は、オブジェクト指向の再利用可能なタイプのコレクションである.NET Frameworkクラス・ライブラリを使用してASP.NETアプリケーションを作成できます。WebアプリケーションとXML Webサービスは、共通言語ランタイム(CLR)の機能を利用できます。
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がどのように確立されたかを確認できます。
認証メソッド
IDの名前
認証ステータス(認証済かどうか)
詳細は、Microsoft ASP.NETのドキュメントを参照してください。
プリンシパル・オブジェクトは、ユーザーの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;
サポートおよび動作要件については、次のURLを参照してください。
http://www.oracle.com/technology/documentation/
この情報を参照するには、OTNに登録する必要があります。
また、この統合用にサポートされているバージョンとプラットフォームを確認するには、次に示すMetalinkを参照してください。
Metalinkの情報を表示する手順
ブラウザで、次のURLを入力します。
Metalinkにログインします。
「Certify」タブをクリックします。
「View Certifications by Product」をクリックします。
「Application Server」オプションを選択して「Submit」をクリックします。
「Oracle Identity Management」を選択して「Submit」をクリックします。
「Oracle Identity Management Certification Information 10g (10.1.4.2.0) (html)」をクリックして、「Oracle Identity Management」ページを表示します。
セクション6、Oracle Access Managerの動作保証のリンクをクリックして、動作保証マトリックスを表示します。
ASP.NET用セキュリティ・コネクタには、次の機能があります。
動的にロードされるネイティブ・ライブラリ・アセンブリを提供し、ASP.NETの動作を拡張してOracle Access Managerの機能を利用します。
事前に定義されたMicrosoftロールを拡張し、動的グループおよびOracle Access Managerのユーザー・プロファイルで定義された任意の属性値を格納します。
たとえば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のロール文字列を介してのみ関連します。参照整合性は提供されません。暗黙的な定義も行われません。 |
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ロールのみになります。
OblixHttpModuleは、Oracle Access ManagerロールとWindowsPrincipalオブジェクトでサポートされるロールを認識します。実際には、.NET Frameworkクラス・ライブラリ内のすべてのプリンシパル・オブジェクトがOracle Access Managerによって認識されます。
OblixHttpModuleは、ASP.NETアプリケーションを保護するOracle Access Manager認可ルール内のアクションタイプとして指定する必要があります。詳細は、「Oracle Access Managerのロール・アクションの設定」を参照してください。
OblixHTTPModuleは、認可時に次の処理を行います。
ASP.NETアプリケーションに制御が移る前に、リクエストから抽出されたWindowsPrincipalオブジェクト(または.NET Frameworkクラス・ライブラリにある他のタイプのプリンシパル・オブジェクト)を使用して、新規のOblixPrincipalオブジェクトをインスタンス化します。
Oracle Access Managerロール・データ(認可ルール・アクション)を、OblixPrincipalオブジェクトに追加します。
OblixPrincipalオブジェクトをASP.NET HTTPリクエストに関連付けます。
注意: アプリケーションがプリンシパル・オブジェクトをリクエストするたびに、他のすべてのプリンシパル・オブジェクトをカプセル化するOblixPrincipalオブジェクトを受け取ります。 |
次に示す概要では、ASP.NET用セキュリティ・コネクタを使用した認可について説明します。詳細な例は、「Oracle Access Managerのロールベースの認可」を参照してください。
プロセスの概要: ASP.NET用セキュリティ・コネクタを使用した認可
ユーザーが認証されると、WebGateは通常どおりにアクセス・サーバーを使用して認可プロセスを開始します。
IIS Webサーバーは、Windowsの偽装に基づいてWindowsPrincipalオブジェクトを作成します。
OblixHttpModuleはリクエストを受け取り、WindowsPrincipalオブジェクトを使用して新規のOblixPrincipalオブジェクトをインスタンス化し、Oracle Access Managerの認可ルール・アクションに基づいてOracle Access Managerのロール・データを追加します。
OblixPrincipalオブジェクトは自分自身を初期化し、Oracle Access Managerのロール・データを認識してメモリーに保存します。
OblixHttpModuleは、OblixPrincipalオブジェクトをリクエストに関連付け、IIS Webサーバーに制御を戻します。
ASPアプリケーションはリクエストに対するOblixPrincipalオブジェクトを抽出し、IPrincipal.IsInRoleメソッドを呼び出します。
OblixPrincipalオブジェクトは、.NET Frameworkクラス・ライブラリからWindowsPrincipalオブジェクトのIsInRoleメソッドを呼び出して現在のプリンシパルが指定された.NETロールに属するかどうかを判断し、Oracle Access Managerロールを確認してASP.NETアプリケーションに応答を返します。
IPrincipal.IsInRoleメソッドは、現在のユーザーのIDおよびOracle Access Manager認可ルールに従って、trueまたはfalseを返します。構文例は、「IPrincipal.IsInRoleメソッドの構文」を参照してください。
応答がfalseの場合、PrincipalオブジェクトはOracle Access Managerロール・リスト内でリクエストされたロールを検索し、ASP.NETアプリケーションへ応答を返します。応答がtrueの場合、ASP.NETアプリケーションは処理を完了し、リソースへのアクセスが許可されます。
次のタスクの概要では、ASP.NET用セキュリティ・コネクタの使用方法について説明します。
タスクの概要: ASP.NET用セキュリティ・コネクタの設定
「環境の設定」の説明に従って、WebGateをインストールします。
「セキュリティ・コネクタ用ASP.NETアプリケーションの設定」の説明に従って、アプリケーションを設定します。
「Oracle Access Managerのロール・アクションの設定」の説明に従って、Oracle Access Managerのロール・アクションを構成します。
プロセスの概要は、「Oracle Access Managerのロールベースの認可」を参照してください。
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のドキュメントを参照してください。
ASP.NETとともに、IIS Webサーバーと.NET Frameworkをインストールします。
IIS v6.xを使用している場合、ASP.NETアプリケーションを有効にしてください。IIS Webサーバーのインストール後に.NET Frameworkをインストールすると、次の手順のアクションが自動的に実行されます。その場合、次の手順は省略してください。
必要に応じてASP.NETを登録し、WebGateをホストするマシン上でASP.NET Webサービス拡張を許可します。
たとえばaspnet.regiis.exeを構成する場合、次の画面ショットのように、「IIS」、local_host、「Web Service Extensions」、「ASP.NET v1.1.4322」、「Properties」、「Allowed」の順に移動します。
IIS Webサーバー、.NET Framework、ASP.NETをホストするマシン上に、WebGateをインストールします。
.NET FrameworkがWebGateホストに設定されていない場合、WebGateのインストールは完了せずに終了します。すべてのアプリケーションでObPrincipalHTTPModuleアセンブリを共有するには、このアセンブリをグローバル・アセンブリ・キャッシュの一部としてインストールします。
Visual Studio.NETを使用してASP.NETアプリケーションやWebサービスを作成すると、一般的なWeb.configファイルが自動的に作成されます。このファイルを変更して、認可時にObPrincipalHTTPModule.dllアセンブリを使用するようにアプリケーションをカスタマイズできます。
偽装を有効にすると、ASP.NETアプリケーションは、そのアプリケーションの実行対象となるクライアントのIDを使用して実行できます。ASP.NETは、偽装するトークンをIISから受け取ります。
注意: アプリケーションとOracle Access Managerで偽装を有効にしない場合、すべてのロールをカプセル化するOracle Access Managerのロールは戻されません。ただし、権限が必要ない場合もあります。 |
Microsoftのドキュメントの説明に従い、Visual Studio .NETを使用してASP.NETアプリケーションまたはWebサービスを記述します。
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」は小文字で指定してください。 |
アプリケーション内のObPrincipalHttpModuleアセンブリに参照を設定します。
Visual Studioのプロジェクトを右クリックし、「Add Reference」を選択して「Project」タブをクリックし、グローバル・アセンブリ・キャッシュを検索して選択します。
注意: コマンドラインからアプリケーションを構築する場合は、/rオプションも使用できます。 |
次の手順のように、アプリケーションでiPrincipalオブジェクトを参照するか、Web.configファイル内のACLsをポイントできます。
必要な.NETアセンブリのiPrincipal参照をアプリケーションに追加します(またはサンプルのweb.configファイルを参照してください)。
例:
using System.Security.Principal; using System.Web.Security;
アプリケーションに対して適切なパラメータが設定されたIPrincipal.IsInRole()関数を呼び出すメソッドを、アプリケーションに追加します。
たとえば、認可ルール・アクションの戻り値がManagerの場合、このメソッドは次のようになります。
Context.User.IsInRole("Manager"); // Context - HTTPContext object associated with the page // user - Principal object
これでアプリケーションは、セキュリティ・コネクタを使用するように設定されました。次に、Oracle Access Managerのロール・アクションを設定します。
アクションはユーザーに関する情報を、同じ(または異なる)Oracle Access Managerのポリシー・ドメインにある他のアプリケーションに渡すことができます。認可アクションは、ユーザーがリソースへのアクセスをリクエストした場合(つまり、ユーザーがリソースのURLをリクエストした場合)に発生します。
ロールをOblixHttpModuleに渡す前に、ASP.NETアプリケーションを保護するポリシー・ドメインの認可ルール内にロール・アクションを作成する必要があります。このアクションは、OblixHttpModuleに依存します。Oracle Access Managerクライアントは、このロール・アクションを使用してヘッダー変数とは別にロールを定義できます。
このロールは、Principaオブジェクトに格納されます。必要に応じて、任意の数のロールを設定できます。各ロールの値は、OblixPrincipalオブジェクトに追加されます。.NET Frameworkクラス・ライブラリから任意のロール値でIPrincipal.IsInRoleメソッドを呼び出すと、trueが返されます。
Oracle Access Managerのロール・アクションを設定する手順
ポリシー・マネージャにポリシー・ドメインを作成してASP.NETアプリケーションを保護し、偽装アクションを設定します。
ポリシー・ドメイン構成とシングル・サインオン構成の詳細は、『Oracle Access Manager Access System Administration Guide』を参照してください。
認可ルールを選択して「アクション」タブをクリックし、ロールをOblixHttpModuleに渡すアクションをこの認可ルールに対して定義します。
タイプ: OblixHttpModuleを指定します。OblixHttpModuleタイプの場合のみ、ASP.NET HttpModuleに転送されます。
名前: ロールまたは名前を入力します。
必要に応じて、任意の数のロールを設定できます。各ロールの値は、OblixPrincipalオブジェクトに追加されます。これらのいずれかの値でIPrincipal.IsInRoleメソッドを呼び出すと、trueが戻されます。
設定できる名前は1つだけです。IISによってID名が提供されない場合、名前はWeb.configファイル内に存在します(None authenticationなど)。偽装用にWindows認証が設定されてWebGateが構成されている場合、このアクションは無視されます。
戻り値: 他のアクションと同様に、任意の静的または動的な値を指定できます。
ルールを保存してアクセス・サーバーを再起動し、変更を有効にします。
これで環境が設定され、ASP.Netアプリケーションが完了し、Oracle Access Managerのポリシー・ドメインは新しい認可ルールによってアプリケーションを保護します。
ASP.NET用セキュリティ・コネクタを使用した認証およびロールベースの認可時に、次のプロセスが発生します。図18-1にプロセスの順序を示し、その後に詳細を記載します。
Webサーバーは、ユーザーのASP URLリクエストを受信します。WebGateはそのリクエストを捕捉し、アクセス・サーバーと通信を行って次の事項を判断します。
リソースが保護されているか
リソースの保護方法
ユーザーが認証されているか
ユーザー・アクセスが認可されているか
通常どおり、アクセス・サーバーとディレクトリ・サーバー間で認証が行われます。
ユーザーが認証されると、WebGateはアクセス・サーバーを使用して認可プロセスを開始し、次の処理を実行します。
ロールにアクション・ヘッダーを設定します。
Windowsの偽装を実行します。
IIS Webサーバーに制御を戻します。
IIS Webサーバーは、Windowsの偽装に基づいてWindowsPrincipalオブジェクトを作成します。
OblixHttpModuleは、次の処理を実行します。
リクエストを受信します。
リクエストから抽出されたWindowsPrincipalオブジェクトを使用して、新規のOblixPrincipalオブジェクトをインスタンス化します。
Oracle Access Managerのロール・データ(認可ルール・アクション)を追加します。
OblixPrincipalオブジェクトは自分自身を初期化し、Oracle Access Managerのロール・データをメモリーに保存します。
OblixHttpModuleは、OblixPrincipalオブジェクトをリクエストに関連付け、IIS Webサーバーに制御を戻します。
ASPアプリケーションはリクエストに対してOblixPrincipalオブジェクトを抽出し、IPrincipal.InIsRoleメソッドを呼び出します。OblixPrincipalオブジェクトは、次の処理を実行します。
WindowsPrincipalオブジェクトのIsInRoleメソッドを呼び出します。
Oracle Access Managerロールを確認します。
ASP.NETアプリケーションに応答を返します。
応答がfalseの場合、PrincipalオブジェクトはOracle Access Managerロール・リスト内でリクエストされたロールを検索し、ASP.NETアプリケーションへ応答を返します。
ASP.NETアプリケーションは処理を完了し、リソースへのアクセスが許可されます。