来自SAML的ClaimsIdentity中的NameClaimType

时间:2012-08-24 16:20:40

标签: wcf-data-services wif saml

我试图在WCF数据服务/ REST / OData服务器的上下文中理解WIF的世界。我有一个在单元测试项目中运行的被攻击的SelfSTS版本。当单元测试开始时,它将启动一个WCF服务,该服务生成我的SAML令牌。这是生成的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的格式并不是真正的EMAIL,这是我尚未清理的东西。)

在我的实际服务器中,我从Pablo Cabraro / Cibrax借来了一些code。这段代码似乎运行A-OK,虽然我承认我不明白发生了什么。我注意到稍后在我的代码中,当我需要检查我的身份时,Thread.CurrentPrincipal.IdentityMicrosoft.IdentityModel.Claims.ClaimsIdentity的一个实例,它具有所有属性的声明,加上nameidentifier声明,其值在我的NameIdentifier中saml中的元素:主题。它还有一个属性NameClaimType,它指向“http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name”。如果NameClaimType映射到nameidentifier会更有意义,不是吗?我该如何做到这一点?或者我期待名称声称的错误?

谢谢!

1 个答案:

答案 0 :(得分:1)

可以在Web.config中指定NameClaimType的值,允许您将其最适合用作IIdentity.Name的任何内容。

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

  

NameClaimType属性指定用于提供此标识名称的声明类型(Claim.Type)。该名称可通过Name属性访问。

http://msdn.microsoft.com/en-us/library/ee517298.aspx

  

ClaimsIdentity.NameClaimType。 NameClaimType属性旨在用于接收方,以选择用于IIdentity.Name的索赔值。

也就是说,它允许Name属性表示在给定情况下最有意义的东西 - 通常可能是nameidentifier声明类型,尽管在你的情况下它被设置为name。