すみません。すっかり以下の投稿の続編を失念しておりました。
【IDM】AD FS 2.0 カスタムルール(カスタム規則)の作り方 1/2 - フィールドSEあがりの安納です - Site Home - TechNet Blogs
上記の投稿では、以下のシナリオに沿ったカスタムルールを作成することになっています。
■想定するシナリオ
Active Directory にログオンした回数 (LogonCount) によって利用者の利用状況を判断し、WEB アプリケーションに表示するメニューを変えたい。例えば、100 回以上ログオンしたことがあるユーザーは「操作に慣れたユーザー」であると判断して、使えるアプリケーションを増やしてあげるとか…。(適当なシナリオですんません)
上記のシナリオをカスタムルールとして展開するには、以下のルールを作成して順番に実行しなければなりません
ということで、ちゃちゃっと作ってしまいましょう。
1. ログオン回数(logonCount)属性を Active Directory から取得して LogonCount クレームに放り込む
[カスタム規則] に以下のルールを入力
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);
2. ログオン��数が 10未満(1桁の数字)ならばステータス「BEGINNER」を UserStatus クレームに放り込む
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
一度クレームとして発行しているクレーム名(今回は 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 クレームに放り込む(発行しない)
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 クレームに放り込む(発行しない)
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 を使用ます。
ここまでのルールで、ログオン回数に応じて userstatus クレームに「BEGINNER」「SENIOR」「EXPERT」のいずれかの文字列が格納されているはずです。ただし、userstatus は add で発行されたため、外部に対して発行されていません。
よって、ここではアプリケーションに対してクレームを発行するために Issue を使用ます。
以上でクレームルールの設定は完了です。
以下のように5つのルールが順番に並んでいるでしょうか?
よろしければ保存して、アプリケーションの動作を確認してみましょう。以下は出力例です。
カスタムルールの作成方法については、以下の投稿も参考にしてください。
このあたりの記事がとても役に立ちました。ありがとうございます。
やったことは、以下にまとめてみました。
sashiz.seesaa.net/.../186851162.html