Compare Expression アサーション

Compare Expression アサーションは、ポリシーの実行時処理中に、1 つのコンテキスト変数または表現の評価結果を、一連のルールと比較するために使用されます。すべてのルールが満たされる場合にのみ、このアサーションは成功します。
gateway90
Compare Expression
アサーションは、ポリシーの実行時処理中に、1 つのコンテキスト変数または表現の評価結果を、一連のルールと比較するために使用されます。すべてのルールが満たされる場合にのみ、このアサーションは成功します。
簡潔に表すために、このトピックの残りの全体で、表現の評価結果を表すために「結果」という用語を使用しています。
Compare Expression アサーションでは以下の処理を実行できます。
  • 結果が特定のデータ タイプであるか、またはそのデータ タイプに変換できることを保証します。
  • 「equals」、「less than」、「contains」などの標準的な演算子を使用して、別の表現の結果との単純比較を実行します。
  • 結果内の値の個数が、指定された最小値と最大値の間の値であることを確認します。  
  • 結果が[Regular Expression]の正規表現に一致していることを確認します。
  • 結果の長さ(文字列として表した場合)が、指定された文字数の最小値と最大値の間の値であることを確認します。
例 1:
Compare Expression アサーションを 2 つの XPath アサーションで使用します(たとえば、Require SAML Token Profile アサーションの属性ステートメントは、メッセージ本文で見つかった値と一致します)。このシナリオでは、2 番目の XPath アサーションが 1 番目のアサーションで設定された変数を上書きしないように、XPath アサーションの少なくとも 1 つで、デフォルト以外の変数プレフィックスを使用している可能性があります。
例 2:
Compare Expression アサーションを使用し、前の Evaluate Request XPath アサーションでノードが 1 つだけ見つかったことを、
${requestXpath.count} = 1
であることをテストする(Simple Comparison ルールで「equals」演算子を使用)ことによって確認します。
(1) 比較の動作で問題が発生した場合は、変数名が正しく入力されていることを確認します(たとえば、丸かっこ「( )」ではなく中かっこ「{ }」を使用していることを確認します)。変数を参照するには、その変数構文 ${} を使用する必要があります。(2)ポリシー ロジックでコンテキスト変数が存在するかどうかを判断する必要がある場合は、「コンテキスト変数」の「コンテキスト変数の存在の確認」を参照してください。
アサーションの使用
  1. 以下のいずれかを実行します。
    • アサーションをポリシー作成ウィンドウに追加するには、「アサーションの追加」を参照してください。
    • 既存のアサーションの設定を変更するには、下記の手順 2 に進みます。
  2. アサーションを追加すると、[Compare Expression Properties]ダイアログ ボックスが自動的に表示されます。アサーションを変更する場合は、ポリシー ウィンドウで[Compare Expression]を右クリックして[Compare Expression Properties]を選択するか、ポリシー ウィンドウでアサーションをダブルクリックします。このアサーションのプロパティが表示されます。
  3. ドロップダウン リストから[
    Variable
    ]または[
    Expression
    ]のいずれかを選択します。
    • [Variable]
      を選択した場合は、評価する変数を 1 つ入力します。${contextVariable} の形式でコンテキスト変数を参照できます。この表現は[Rules]リストに対してテストされます。複数値の変数を入力した場合、その変数のすべて値が、[If Multivalued]ドロップダウン リストでの選択内容に応じて、[Rules]リストの内容に対してテストされます。
    • [Expression]
      を選択した場合は、評価する表現を入力します。表現には、文字列、1 つの変数、複数の変数、または 1 つ以上の変数を含む文字列のいずれかを指定できます。${contextVariable.name} の形式でコンテキスト変数を参照できます。この表現は[Rules]リストに対してテストされます。
    表現に定数値を含めることができます。たとえば、${requestXpath.result} 変数の値が「B」である場合に、「A${requestXpath.result}C」という表現を入力すると、比較される値は「ABC」になります。ただし、[Expression]フィールドに 1 つのコンテキスト変数参照(${var} など)以外の値が含まれている場合に、String 以外のデータ タイプを選択すると、有用な結果は生成されません。 
  4. Data Type
    ]で表現のデータ タイプを選択します。これによって、結果が、選択しているデータ タイプであるか、またはそのデータ タイプに変換できることが確認されます。
    Data Type
    説明
    Unknown/Other
    結果は任意のデータ タイプです。アサーションは、変換を試行しません。比較時には、「Unknown/Other」データ タイプは文字列として扱われます。
    String
    結果は任意の文字列です。
    結果が整数値、10 進値、またはブール値であれば、比較時に文字列に変換されます。
    Integer
    結果には数字のみが含まれている必要があります。数字以外の文字が結果に含まれている場合、アサーションは失敗します。
    Decimal
    結果には、数字および必要に応じて小数点のみが含まれている必要があります。数字または小数点のどちらでもない文字が結果に含まれている場合、アサーションは失敗します。
    Boolean
    ルールが「True」に等しい場合、アサーションが成功するには、結果が「true」(デフォルトでは大文字と小文字は区別されない)に等しい必要があります。結果にそれ以外の値が含まれている場合、または空の場合は、アサーションは失敗します。
    アサーションの設定が「Proceed if ${var.result} is equal to false」である場合:
    • ${var.result} の結果が「false」、「123」、「abc」などであれば、このアサーションは成功します。
    • ${var.result} の結果が true であれば、このアサーションは失敗します。
    アサーションの設定が「Proceed if ${var.result} is equal to true」である場合:
    • ${var.result} の結果が true であれば、このアサーションは成功します。
    • ${var.result} の結果が true 以外であれば、このアサーションは失敗します。
    Date/Time
    表現が Date/Time 変数であるか、または結果が Gateway で認識可能なタイムスタンプまたは文字列である必要があります。表現を変換できない場合、アサーションは失敗します。
    [Expression]で Date/Time 変数が指定されていて、[Data Type]として「Date/Time」が選択されていない場合、Policy Manager は、比較時にこの変数を文字列に変換します。
    この変数には、日付/時刻情報が含まれます。これらの変数は、「日付/時刻変数」で説明されている組み込み変数と同様に動作します。
     
  5. 複数値のコンテキスト変数を使用する場合は、その変数を処理する方法を指定します。
    ルール
    説明
    All values must pass
    複数値の変数内のすべての値が、アサーションで定義されている条件を満たしている場合にのみ、Compare Expression アサーションは成功します。これがデフォルトの設定です。
    Any value must pass
    このアサーションは、複数値のいずれかが条件を満たしている場合に成功します。
    Compare first value only
    最初の値が条件を満たしている場合に、アサーションは成功します。
    Compare last value only
    最後の値が条件を満たしている場合に、アサーションは成功します。
    Fail assertion
    複数値のコンテキスト変数が見つかると、アサーションは失敗します。複数値の変数を予期していない場合は、この設定を使用する必要があります。  
  6. 新しいルールを追加するには、[
    Add
    ]をクリックします。ルールのタイプを選択するように求められます。
    ルール
    説明
    Simple Comparison
    基本的な演算子(「less than」、「greater than」など)を使用して、結果を別の値と比較します。比較される値は数字、文字列、または別のコンテキスト変数です。その値が文字列である場合、[Case Sensitive]チェック ボックスをオンにすると、大文字と小文字を区別した正確な一致が適用されます。表現に複数の値が含まれる場合は、すべての値が比較条件を満たしている必要があります。
    「Integer」データ タイプを使用している場合、その他の整数との単純比較を実行するのが最適です。10 進値と比較する場合は、比較の目的で 10 進値が整数に切り捨てられることに注意します。たとえば、アサーションの以下の設定について検討してみます。
    • 「${var.result} が 10 進数かつ 45.7 未満の場合は続行する」で、${var.result} が 45 を返しました。45 は 45.7 未満であるため、アサーションは成功します
    • 「${var.result} が整数かつ 45.7 未満の場合は続行する」で、${var.result} が 45 を返しました。45 は 45 未満ではないため、アサーションは失敗します(データ型が整数であり、整数間の比較であるため、10 進数の「45.7」は「45」に切り捨てられます)
    Number of Values
    結果内の値の個数が、指定した最小値と最大値の間の値であることを確認します。1 つの値が含まれている表現では、Min=1 と Max=1 を使用して値が「必須」であることを示し、Min=0 と Max=1 を使用して値がオプションであることを示すことができます。最大値の制限を設定しない場合は、[Unlimited]チェック ボックスをオンにします。
    Regular Expression
    結果を、定数の正規表現と照合します。表現に複数の値が含まれている場合、そのすべての値が正規表現に一致する必要があります。
    ポリシー内で正規表現をより強力に適用するには、Evaluate Regular Expression アサーションを使用します。
    String Length
    結果の長さ(文字列として表した場合)が、指定した最小値と最大値の間の値であることを確認します。表現に複数の値が含まれている場合、そのすべての値が長さの制限を満たしている必要があります。
    たとえば、表現の結果が「abcd」であり、[String Length]ルールで長さの最小値を 5 と規定している場合、アサーションは失敗します。    
  7. 完了したら、[
    OK
    ]をクリックします。