0

WCF データ サービス/REST/OData サーバーのコンテキストで WIF の世界を理解しようとしています。単体テスト プロジェクト内で実行されている SelfSTS のハッキング バージョンがあります。単体テストが開始されると、SAML トークンを生成する WCF サービスが開始されます。これは、生成される SAML トークンです。

<saml:Assertion MajorVersion="1" MinorVersion="1" ... >
  <saml:Conditions>...</saml:Conditions>
  <saml:AttributeStatement>
    <saml:Subject>
      <saml:NameIdentifier Format="EMAIL">4bd406bf-0cf0-4dc4-8e49-57336a479ad2</saml:NameIdentifier>
      <saml:SubjectConfirmation>...</saml:SubjectConfirmation>
    </saml:Subject>
    <saml:Attribute AttributeName="emailaddress" AttributeNamespace="http://schemas.xmlsoap.org/ws/2005/05/identity/claims">
      <saml:AttributeValue>bob@bob.org</saml:AttributeValue>
    </saml:Attribute>
    <saml:Attribute AttributeName="name" AttributeNamespace="http://schemas.xmlsoap.org/ws/2005/05/identity/claims">
      <saml:AttributeValue>bob</saml:AttributeValue>
    </saml:Attribute>
  </saml:AttributeStatement>
  <ds:Signature>...</ds:Signature>
</saml:Assertion>

(NameIdentifier の Format が実際には EMAIL ではないことはわかっています。これはまだ片付けていないものです。)

実際のサーバー内に、Pablo Cabraro / Cibrax から借用したコードをいくつか入れました。このコードは A-OK を実行しているように見えますが、何が起こっているのか理解できません。コードの後半で、ID を確認する必要がある場合は、すべての属性に対するクレームと、saml:Subject の NameIdentifier 要素の値を持つ nameidentifier クレームを持つ のThread.CurrentPrincipal.Identityインスタンスであることに注意してください。Microsoft.IdentityModel.Claims.ClaimsIdentityまたNameClaimType、「http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name」を指すプロパティもあります。nameidentifier にマップした方が理にかなっNameClaimTypeていますね。どうすればそれを実現できますか?それとも、名前の主張の間違ったことを期待していますか?

ありがとう!

4

1 に答える 1

1

NameClaimType の値は Web.config で指定できるため、IIdentity.Name として使用するのに最も適していると思われるものを作成できます。

http://msdn.microsoft.com/en-us/library/system.security.claims.claimsidentity.nameclaimtype.aspxによると

NameClaimType プロパティは、この ID の名前を提供するために使用される要求の種類 (Claim.Type) を指定します。名前には、Name プロパティを介してアクセスします。

そしてhttp://msdn.microsoft.com/en-us/library/ee517298.aspx状態

ClaimsIdentity.NameClaimType. NameClaimType プロパティは、受信側で IIdentity.Name に使用するクレーム値を選択するために使用することを目的としています。

つまり、 Name プロパティは、特定の状況で最も意味のあるものを表すことができます。これは、多くの場合、nameidentifier クレーム タイプである可能性がありますが、あなたの場合は name に設定されています。

于 2012-08-28T17:01:19.937 に答える