プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Access Management管理者ガイド
11g リリース2 (11.1.2.3) for All Platforms
E61950-08
目次へ移動
目次

前
次

22.10 拡張ルールによる認証スキームの拡張

拡張ルールが追加され、既存の認証ポリシーを拡張できるようになりました。

次の構成は認証後ルールではサポートされていませんが、認証前ルールと認証後ルールの両方を適用できます。

ノート:

拡張ルールは、ライセンスが必要なアダプティブ認証サービスの一部です。「アダプティブ認証サービスについて」を参照してください。

拡張ルールには、ブール式が含まれています。トリガーされた認証スキーム結果が複数存在する場合は、実行順序が最も早い結果が最終的な結果として選択されます。表22-24は、拡張ルールの作成時に定義する必要のある属性をまとめたものです。

表22-24 拡張ルールの属性

名前 説明

名前

認証ルール名。名前はチェックポイント内で一意であることが必要です。

説明

ルールの説明

実行順序

結果が複数ある場合の結果の実行順序

条件

スクリプト。ユーザーはHTTPリクエスト・ヘッダーの可用性に基づいて条件を構成し、目的の結果を設定できます。

結果

ルールが適用される認証スキームのID。アクセス/拒否。

ノート:

「アクセスの拒否」オプションが選択されている場合は、リクエストされたURLが見つかりませんでしたというエラー・メッセージが表示されます。

詳細は、次の各項を参照してください。

22.10.1 拡張ルールのユースケース

特定のシナリオに対して拡張ルールを構成できます。

次のユースケースの場合、拡張ルールを構成します。

  • 非ブラウザ・クライアント - ユーザー認証では、ユーザーが入力するためのフォームベースのログイン・ページがブラウザを介して表示されます。非ブラウザ・クライアント(スイッチ、ルーターなど)が、リクエスト・ヘッダーを介して渡された資格証明に基づいてBasic認証を行うことが必要な場合もあります。非ブラウザ・クライアント認証は、認証前拡張ルールとしてのみ構成できます。非ブラウザ・クライアント認証をサポートするには、目的の条件を(HTTPリクエスト・ヘッダーの可用性に基づいて)認証ルール内で構成し、目的の結果を設定します。

  • Windowsネイティブ認証オプション - ユーザーがVPNと企業ネットワークのどちらを使用しているかに応じてWindowsネイティブ認証(WNA)とフォームベース・ユーザー認証を切り替えできるように、拡張ルールを構成できます。

  • ユーザー認証スキーム・オプション - ユーザーが認証方式を選択できるように拡張ルールを構成できます。選択した内容はリクエスト・パラメータとして渡されます。

  • 第2ファクタ認証 - 定義されたユーザーまたはリクエスト属性に基づいて第2ファクタ認証を許可するように、拡張ルールを構成できます。SFAの詳細は、「アダプティブ認証サービスの概要」を参照してください。

表22-25に、これらの拡張ルール・ユースケースで条件を構成する方法の例を示します。

表22-25 拡張ルールのサンプル

サンプル・ルール Jythonスクリプト・ベースの条件のサンプル ノート

プライベートまたはパブリックのIPルールに基づいて認証スキームを切り替える

location.clientIP.startswith('10.')またはlocation.clientIP.startswith('172.16')またはlocation.clientIP.startswith('192.168')

このルールは、認証前および認証後のチェックポイントで使用できます。

ブラック・リストIP

['130.35.50.115', '130.35.50.112', '130.35.50.113']のlocation.clientIP

このルールは、認証前および認証後のチェックポイントで使用できます。

クライアント・ブラウザ・タイプ

request.userAgent.lower().find('firefox') > 0

このルールは、認証前および認証後のチェックポイントで使用できます。

ユーザー属性'description'が'test'のユーザーへのアクセスをブロック

user.userMap['description'] == 'test'

このルールを使用できるのは、認証後チェックポイントのみです。

非ブラウザ・クライアント

request.authorization.lower().startswith('basic')

このルールを使用できるのは、認証前チェックポイントのみです。

カスタムHTTPヘッダー値

request.requestMap['param'] == 'test'

このルールは、認証前および認証後のチェックポイントで使用できます。

範囲内のIPアドレスに基づいて認証スキームを切り替える

location.isIPinRange('192.35.50.180','192.35.50.188')

このルールは、認証前および認証後のチェックポイントで使用できます。

22.10.2 拡張ルールのコンテキスト・データ

Access Managerサーバーは、認証条件を実行する前に、(条件に基づいてブール式を作成するために)使用可能なデータを使用してリクエスト・コンテキストを用意します。

次の表では、様々なコンテキスト・データの詳細について説明します。

表22-26 リクエスト・コンテキスト・データ

属性名 説明

requestMap

すべてのリクエスト・ヘッダー、パラメータおよびPOSTデータ値のマップ。この例では、カスタム・ヘッダー・キーをリクエスト・ヘッダーから取得して値'test'と比較できます。

request.requestMap['custom-header'].lower().find('test') > 0

resourceMap

一致するリソースの詳細のマップ

accept

'Accept'ヘッダー値を返します。

acceptCharset

'Accept-Charset'ヘッダー値を返します。

acceptEncoding

'Accept-Encoding'ヘッダー値を返します。

acceptLanguage

'Accept-Language'ヘッダー値を返します。

authorization

'Authorization'ヘッダー値を返します。

connection

'Connection'ヘッダー値を返します。

contentLength

'ContentLength'ヘッダー値を返します。

cookie

'Cookie'ヘッダー値を返します。

host

'Host'ヘッダー値を返します。

ifModifiedSince

'ifModifiedSince'ヘッダー値を返します。

pragma

'Pragma'ヘッダー値を返します。

referer

'Referer'ヘッダー値を返します。

userAgent

'UserAgent'ヘッダー値を返します。

resourceHost

一致したリソースのHost値を返します。

resourcePost

一致したリソースのPort値を返します。

resourceOperation

一致したリソースのOperation値を返します。

resourceQueryString

一致したリソースのQueryStringを返します。

resourceName

一致したリソースの名前を返します。

resourceType

一致したリソースのタイプを返します。

resourceURL

一致したリソースのURLを返します。たとえば、’landingPage’がrequest.resourceURLの中にある場合、resourceURLの中にlandingPageがあると、条件はtrueに評価されます。

isIPinRange('start IP' ,'end IP')

location.clientIPが指定された範囲内にある場合、trueに評価されます。次に例を示します。

location.isIPinRange('192.35.50.180','192.35.50.188')

表22-27 ロケーション・コンテキスト・データ

属性名 説明

locationMap

すべてのロケーション・データ値のマップ。例:

location.locationMap['CLIENT_IP'] == '10.1.23.4'

clientIP

クライアントIPアドレスを返します。例:

location.clientIP.startswith('10.2')

proxyIP

プロキシIPアドレスを返します。

表22-28 セッション・コンテキスト・データ

属性名 説明

sessionMap

すべてのセッション・データ値のマップ。例:

session.sessionMap['count'] > 2;

count

現在のユーザーのセッション数を返します。例: session.count > 2

表22-29 ユーザー・コンテキスト・データ

属性名 説明

userMap

すべてのユーザー・プロファイル・データのマップ。例: user.userMap['email'] == 'john.joe@example.com'