【IDM】AD FS や ACS を触るならば クレームタイプ(Claim Type、要求の種類)について理解しておくのが吉です

AD FS や Windows Azure AppFabric ACS を勉強していると、用語の乱立に辟易することでしょう。特に、AD FS は日本語訳に少々難が無くもないため...ちょっとした慣れが必要です。

そんな面倒な用語のうち、比較的使用する頻度が高く、正確に理解しておかないと困るのが「クレームタイプ(要求の種類)」 です。

AD FS 管理コンソールで、クレームルール(要求規則)を定義する画面を見てみましょう。以下の画面では、Active Directory の LDAP 属性から取り出した値を、クレームタイプ(出力方向の要求の種類)に放り込んでいます。

※この画面に表示されている「LDAP属性」についても注意が必要なので別の投稿で触れることにします。

image

上の画面で、「出力方向の要求の種類」に「会社名」や「電子メールアドレス」「Windows アカウント名」などという文字列が表示されています。つい、こういう漢字名がクレームタイプとして使われていると思われがちなのですが、これらはローカルの AD FS の世界だけで通用する名前です。

実際には、クレームは、https://schemas.hogehoge.com/claims/companyname のような URI によって識別されています。

以下の図を見てください。STS1 から発行されたセキュリティトークンには、「Microsoft Japan」や「Junichi Anno」などのクレームが含まれています。これらのクレームを STS2 や Application とやり取りするときには、事前に「こういう名前(クレームタイプ)でやり取りしようね」という取り決めが必要です。そうしないと、問題が起こります。

image
STS: Security Token Service

例えば、STS1 から「https://shemas.tf.com/claims/office」というクレームタイプが届いても、これが何を意味しているのかが STS2 や Application に理解できなければ、アクセス権を与えてよいものかどうか判別がつきません。逆に、STS2 や Application がどのようなクレームタイプを欲しているかが分からなければ、STS1 はセキュリティトークンを発行しようがありません。

通常、必要なクレームタイプを定義するのは RP側(アプリケーション側)です。事前に、「自分のところにアクセスに来るには、こういうクレームタイプを持ってこい」という情報を、「メタデータ」に記載してクレームプロバイダー(CP、アイデンティティ プロバイダー)側に渡しておきます。

メタデータには「クレームタイプ」だけでなく、それらの「必須 or オプション」についても記載されているので、クレームプロバイダーはどんなクレームタイプを送ればよいかがわかります。

AD FS の管理コンソールで、証明書利用者信頼に定義されているアプリケーションのプロパティを見てください。「受け付ける要求」というタブに表示されている情報が、アプリケーションが要求しているクレームタイプです。以下の画面例では、「役割」と「名前」というクレームが受け取り可能で、いずれも必須ではない(オプション)ことがわかります。必須ではないということは、これらを空のまま送ったとしたら、ゲスト権限が与えられるのだろうなぁ...ということが予測できます。

image

先ほど、クレームタイプは URI で表現されると書きました。にもかかわらず、「役割」や「名前」という漢字で書かれているとはどういういことでしょう?これは、メタデータに書かれているクレームタイプ(URI)が、既に AD FS に定義されているためです。以下は、上の画面のもととなるメタデータです。小さくて見えずらいですが、赤枠で囲んだ部分に、クレームタイプが定義されています。

image

次に、以下の画面を見てください。これは、AD FS の管理コンソールで [サービス] - [要求記述] を開いた画面です。

この画面には、ローカルの AD FS で使用できるクレームタイプが定義されています。「ローカルの」と書いたのは、クレームタイプは独自に編集することができるからです。リストの下3つ「部署」「従業員番号」「会社名」は私が独自に追加したクレームタイプです。

image

「役割」と「名前」の横に書かれている「要求の種類(クレームタイプ)」を見てください。メタデータと見比べていただくとわかるとおり、同じURIが書かれていることがわかります。同じURIなので、ローカルのAD FS内の識別名である「役割」や「名前」に置き換えられていたのですね。

このように、クレームプロバイダーとアプリケーションの間では、クレームタイプによって情報がやり取りされています。URI の1文字が違ってもクレームタイプは別のものとして判別されてしまうので注意しなければなりません。