SAML トークンとクレーム

SAML (Security Assertion Markup Language) "トークン" は、クレームの XML 表現です。 既定では、フェデレーション セキュリティのシナリオで使用される SAML トークン Windows Communication Foundation (WCF) は、"発行済みトークン" です。

SAML トークンは、ステートメント (特定のエンティティによって他のエンティティに関して作成されるクレームのセット) を伝達します。 たとえば、フェデレーション セキュリティ シナリオでは、ステートメントがセキュリティ トークン サービスによって、システム内の特定のユーザーに関して作成されます。 セキュリティ トークン サービスは、トークンに含まれるステートメントの信憑性を示すために SAML トークンに署名します。 また、SAML トークンは、SAML トークンのユーザーが証明として提示する暗号化キー マテリアルに関連付けられています。 これが証拠となり、証明書利用者は、SAML トークンが実際にそのユーザーに対して発行されたことを確認できます。 一般的なシナリオでの例を次に示します。

  1. クライアントは、セキュリティ トークン サービスから SAML トークンを要求し、Windows 資格情報を使用して、そのセキュリティ トークン サービスに対して認証を行います。

  2. セキュリティ トークン サービスは、SAML トークンをクライアントに発行します。 SAML トークンは、セキュリティ トークン サービスに関連付けられた証明書を使用して署名され、ターゲット サービス用に暗号化された証明キーを含んでいます。

  3. クライアントにより、"証明キー" のコピーの受け取りも行われます。 クライアントにより、SAML トークンがアプリケーション サービス ("証明書利用者") に提示され、その証明キーを使用したメッセージへの署名が行われます。

  4. SAML トークンの署名は、そのトークンがセキュリティ トークン サービスによって発行されたことを証明書利用者に示します。 また、証明キーを使用して作成されたメッセージ署名は、トークンがそのクライアントに対して発行されたことを示します。

クレームから SamlAttributes

WCF では、SAML トークン内のステートメントは SamlAttribute オブジェクトとしてモデル化されています。Claim オブジェクトが PossessPropertyRight プロパティを持ち、Resource プロパティが String 型である場合、これは Claim オブジェクトから直接設定できます。 次に例を示します。

Claim myClaim = new Claim(
    ClaimTypes.GivenName, "Martin", Rights.PossessProperty);
SamlAttribute sa = new SamlAttribute(myClaim);
Dim myClaim As New Claim(ClaimTypes.GivenName, "Martin", _
Rights.PossessProperty)
Dim sa As New SamlAttribute(myClaim)

注意

セキュリティ トークン サービスによって発行されたか、または認証の一部としてクライアントからサービスに提示されたときに、SAML トークンがメッセージ内にシリアル化される場合、メッセージの最大クォータ サイズが、SAML トークンおよびメッセージの他の部分を格納できるだけの大きさである必要があります。 通常は、既定のメッセージ クォータ サイズで十分です。 ただし、何百ものクレームを含んでいるために SAML トークンのサイズが大きい場合には、シリアル化されたトークンを格納できるように、クォータを増やす必要が生じることがあります。 詳しくは、「データに関するセキュリティ上の考慮事項」をご覧ください。

SamlAttributes からクレーム

SAML トークンがメッセージで受信されると、SAML トークン内のさまざまなステートメントは、 IAuthorizationPolicy オブジェクトに変換され、AuthorizationContext に配置されます。 各 SAML ステートメントのクレームは ClaimSetsAuthorizationContext プロパティによって返され、これを調べることによってユーザーの認証と承認を行うかどうかを決定できます。

関連項目