【IDM】AD FS 2.0 カスタムルール(カスタム規則)の作り方 2/2
すみません。すっかり以下の投稿の続編を失念しておりました。
【IDM】AD FS 2.0 カスタムルール(カスタム規則)の作り方 1/2 - フィールドSEあがりの安納です - Site Home - TechNet Blogs
上記の投稿では、以下のシナリオに沿ったカスタムルールを作成することになっています。
■想定するシナリオ
Active Directory にログオンした回数 (LogonCount) によって利用者の利用状況を判断し、WEB アプリケーションに表示するメニューを変えたい。例えば、100 回以上ログオンしたことがあるユーザーは「操作に慣れたユーザー」であると判断して、使えるアプリケーションを増やしてあげるとか…。(適当なシナリオですんません)
上記のシナリオをカスタムルールとして展開するには、以下のルールを作成して順番に実行しなければなりません
- ログオン回数(logonCount)属性を Active Directory から取得して LogonCount クレームを発行する
- ログオン回数が 10未満(1桁の数字)ならばステータス「BEGINNER」を UserStatus クレームに放り込む(発行しない)
- ログオン回数が 10以上 100未満(2ケタの数字)ならばステータス「SENIOR」を UserStatus クレームに放り込む(発行しない)
- ログオン回数が 100以上(3ケタ以上)ならばステータス「EXPERT」を UserStatus クレームに放り込む(発行しない)
- UserStatus クレームを発行する
ということで、ちゃちゃっと作ってしまいましょう。
1. ログオン回数(logonCount)属性を Active Directory から取得して LogonCount クレームに放り込む
AD FS 2.0 の管理コンソールで、クレームを発行したいRP(証明書利用者信頼)を右クリックして [要求規則の編集] を選択
[発行変換規則] タブの [規則の追加] ボタンをクリック
[要求規則テンプレート] で [カスタム規則を使用して要求を送信] を選択して [次へ]
[要求規則名] は適当に入力
[カスタム規則] に以下のルールを入力
c:[Type == https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname, Issuer == "AD AUTHORITY"] => issue (store = "Active Directory", types = ("https://schemas.tf.com/identity/claims/logonCount"), query = ";logonCount;{0}", param = c.Value);
2. ログオン回数が 10未満(1桁の数字)ならばステータス「BEGINNER」を UserStatus クレームに放り込む
AD FS 2.0 の管理コンソールで、クレームを発行したいRP(証明書利用者信頼)を右クリックして [要求規則の編集] を選択
[発行変換規則] タブの [規則の追加] ボタンをクリック
[要求規則テンプレート] で [カスタム規則を使用して要求を送信] を選択して [次へ]
[要求規則名] は適当に入力
[カスタム規則] に以下のルールを入力
c:[Type == https://schemas.tf.com/identity/claims/logonCount, Value =~ "^[0-9]{1}$"] => add (Type = "https://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 == https://schemas.tf.com/identity/claims/logonCount, Value =~ "^[0-9]{2}$"] => add(Type = "https://schemas.tf.com/identity/claims/userstatus", Value = "SENIOR");
2.のカスタムルールと何が違うかわかりますか?今回は2ケタの数字であれば、"SENIOR" を入力するように記述しています。
4. ログオン回数が 100以上(3ケタ以上)ならばステータス「EXPERT」を UserStatus クレームに放り込む(発行しない)
AD FS 2.0 の管理コンソールで、クレームを発行したいRP(証明書利用者信頼)を右クリックして [要求規則の編集] を選択
[発行変換規則] タブの [規則の追加] ボタンをクリック
[要求規則テンプレート] で [カスタム規則を使用して要求を送信] を選択して [次へ]
[要求規則名] は適当に入力
[カスタム規則] に以下のルールを入力
c:[Type == https://schemas.tf.com/identity/claims/logonCount, Value =~ "^[0-9]{3}$"] => add(Type = "https://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 == "https://schemas.tf.com/identity/claims/userstatus"] => Issue ( claim = c);
以上でクレームルールの設定は完了です。
以下のように5つのルールが順番に並んでいるでしょうか?
よろしければ保存して、アプリケーションの動作を確認してみましょう。以下は出力例です。
カスタムルールの作成方法については、以下の投稿も参考にしてください。
- 【IDM】Active Directory の「直属の部下」属性 - フィールドSEあがりの安納です - Site Home - TechNet Blogs
- 【IDM】Active Directory の「直属の部下」属性からマネージャーかどうかを判断する 1/2 - フィールドSEあがりの安納です - Site Home - TechNet Blogs
- 【IDM】Active Directory の「直属の部下」属性からマネージャーかどうかを判断する 2/2 - フィールドSEあがりの安納です - Site Home - TechNet Blogs
Comments
- Anonymous
February 21, 2011
The comment has been removed - Anonymous
January 20, 2016
ADFS3.0での変更ってどのようなものがあるのでしょうか?いろいろ検証をしていますが今一つずばっとしたものがなく。そろそろ安納さんあたりに書いていただけると幸いなのですが・・・。