【IDM】AD FS 2.0 カスタムルール(カスタム規則)の作り方 2/2


すみません。すっかり以下の投稿の続編を失念しておりました。

【IDM】AD FS 2.0 カスタムルール(カスタム規則)の作り方 1/2 - フィールドSEあがりの安納です - Site Home - TechNet Blogs

上記の投稿では、以下のシナリオに沿ったカスタムルールを作成することになっています。

■想定するシナリオ

Active Directory にログオンした回数 (LogonCount) によって利用者の利用状況を判断し、WEB アプリケーションに表示するメニューを変えたい。例えば、100 回以上ログオンしたことがあるユーザーは「操作に慣れたユーザー」であると判断して、使えるアプリケーションを増やしてあげるとか…。(適当なシナリオですんません)

上記のシナリオをカスタムルールとして展開するには、以下のルールを作成して順番に実行しなければなりません

  1. ログオン回数(logonCount)属性を Active Directory から取得して LogonCount クレームを発行する
  2. ログオン回数が 10未満(1桁の数字)ならばステータス「BEGINNER」を UserStatus クレームに放り込む(発行しない)
  3. ログオン回数が 10以上 100未満(2ケタの数字)ならばステータス「SENIOR」を UserStatus クレームに放り込む(発行しない)
  4. ログオン回数が 100以上(3ケタ以上)ならばステータス「EXPERT」を UserStatus クレームに放り込む(発行しない)
  5. UserStatus クレームを発行する

ということで、ちゃちゃっと作ってしまいましょう。

1. ログオン回数(logonCount)属性を Active Directory から取得して LogonCount クレームに放り込む

  • AD FS 2.0 の管理コンソールで、クレームを発行したいRP(証明書利用者信頼)を右クリックして [要求規則の編集] を選択
  • [発行変換規則] タブの [規則の追加] ボタンをクリック
  • [要求規則テンプレート] で [カスタム規則を使用して要求を送信] を選択して [次へ]
  • [要求規則名] は適当に入力
  • [カスタム規則] に以下のルールを入力

    c:[Type == http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname,
    Issuer == "AD AUTHORITY"]
    => issue (store = "Active Directory", types = ("http://schemas.tf.com/identity/claims/logonCount"),
    query = ";logonCount;{0}",
    param = c.Value);

    image

2. ログオン回数が 10未満(1桁の数字)ならばステータス「BEGINNER」を UserStatus クレームに放り込む

  • AD FS 2.0 の管理コンソールで、クレームを発行したいRP(証明書利用者信頼)を右クリックして [要求規則の編集] を選択
  • [発行変換規則] タブの [規則の追加] ボタンをクリック
  • [要求規則テンプレート] で [カスタム規則を使用して要求を送信] を選択して [次へ]
  • [要求規則名] は適当に入力
  • [カスタム規則] に以下のルールを入力

    c:[Type == http://schemas.tf.com/identity/claims/logonCount, Value =~ "^[0-9]{1}$"]
    => add (Type = "http://schemas.tf.com/identity/claims/userstatus", Value = "BEGINNER");

一度クレームとして発行しているクレーム名(今回は logonCount)は大文字小文字を判別しますので、くれぐれも注意してください。

ちなみに、^[0-9]{1}$ は正規表現です。「1桁の0から9の文字」という意味になります。つまり、logonCount が 1桁の数字ならば userstatus クレームに BEGINNER  という文字列を入れて発行する..ということです。

なお、発行ステートメントの「add」には十分注意してください。add を使用すると、クレームはルール内部で使用することはできますが、外部には発行されません。詳細は以下の記事をご覧ください。

【IDM】Active Directory の「直属の部下」属性からマネージャーかどうかを判断する 2/2 - フィールドSEあがりの安納です - Site Home - TechNet Blogs

3.ログオン回数が 10以上 100未満(2ケタの数字)ならばステータス「SENIOR」を UserStatus クレームに放り込む(発行しない)

  • AD FS 2.0 の管理コンソールで、クレームを発行したいRP(証明書利用者信頼)を右クリックして [要求規則の編集] を選択
  • [発行変換規則] タブの [規則の追加] ボタンをクリック
  • [要求規則テンプレート] で [カスタム規則を使用して要求を送信] を選択して [次へ]
  • [要求規則名] は適当に入力
  • [カスタム規則] に以下のルールを入力

    c:[Type == http://schemas.tf.com/identity/claims/logonCount, Value =~ "^[0-9]{2}$"]
    => add(Type = "http://schemas.tf.com/identity/claims/userstatus", Value = "SENIOR");

2.のカスタムルールと何が違うかわかりますか?今回は2ケタの数字であれば、"SENIOR" を入力するように記述しています。

4. ログオン回数が 100以上(3ケタ以上)ならばステータス「EXPERT」を UserStatus クレームに放り込む(発行しない)

  • AD FS 2.0 の管理コンソールで、クレームを発行したいRP(証明書利用者信頼)を右クリックして [要求規則の編集] を選択
  • [発行変換規則] タブの [規則の追加] ボタンをクリック
  • [要求規則テンプレート] で [カスタム規則を使用して要求を送信] を選択して [次へ]
  • [要求規則名] は適当に入力
  • [カスタム規則] に以下のルールを入力

    c:[Type == http://schemas.tf.com/identity/claims/logonCount, Value =~ "^[0-9]{3}$"]
    => add(Type = "http://schemas.tf.com/identity/claims/userstatus", Value = "EXPERT");

2.および3. との違いは大丈夫ですよね?ここでは3ケタの数字だったら EXPERT を userstatus に入力します。なお、4ケタ以上については今回は考慮していません。

5. UserStatus クレームを発行する

ここまでのルールで、ログオン回数に応じて userstatus クレームに「BEGINNER」「SENIOR」「EXPERT」のいずれかの文字列が格納されているはずです。ただし、userstatus は add で発行されたため、外部に対して発行されていません。

よって、ここではアプリケーションに対してクレームを発行するために Issue を使用ます。

  • AD FS 2.0 の管理コンソールで、クレームを発行したいRP(証明書利用者信頼)を右クリックして [要求規則の編集] を選択
  • [発行変換規則] タブの [規則の追加] ボタンをクリック
  • [要求規則テンプレート] で [カスタム規則を使用して要求を送信] を選択して [次へ]
  • [要求規則名] は適当に入力
  • [カスタム規則] に以下のルールを入力

    c:[Type == "http://schemas.tf.com/identity/claims/userstatus"] 
    => Issue ( claim = c);

以上でクレームルールの設定は完了です。

以下のように5つのルールが順番に並んでいるでしょうか?

image

よろしければ保存して、アプリケーションの動作を確認してみましょう。以下は出力例です。

image

カスタムルールの作成方法については、以下の投稿も参考にしてください。

Comments (2)

  1. さっしー より:

    このあたりの記事がとても役に立ちました。ありがとうございます。

    やったことは、以下にまとめてみました。

    sashiz.seesaa.net/.../186851162.html

  2. トコ より:

    ADFS3.0での変更ってどのようなものがあるのでしょうか?いろいろ検証をしていますが今一つずばっとしたものがなく。そろそろ安納さんあたりに書いていただけると幸いなのですが・・・。

Skip to main content