我试图在 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 借来的代码。这段代码似乎运行 A-OK,尽管我承认我不明白发生了什么。我注意到,稍后在我的代码中,当我需要检查我的身份时,Thread.CurrentPrincipal.Identity
它是 的一个实例Microsoft.IdentityModel.Claims.ClaimsIdentity
,它具有所有属性的声明,以及一个 nameidentifier 声明,该声明具有我在 saml:Subject 中的 NameIdentifier 元素中的值。它还有一个属性NameClaimType
,指向“http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name”。如果NameClaimType
映射到 nameidentifier 会更有意义,不是吗?我该如何做到这一点?还是我期待名称声明的错误?
谢谢!