Я пытаюсь понять мир WIF в контексте сервера WCF Data Service/REST/OData. У меня есть взломанная версия 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>[email protected]</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, это то, что я еще не убрал.)
Внутри моего реального сервера я разместил несколько код позаимствован у Пабло Кабраро / Cibrax. Этот код, кажется, работает A-OK, хотя я признаюсь, что не понимаю, что происходит. Я отмечаю, что позже в моем коде, когда мне нужно проверить свою личность, Thread.CurrentPrincipal.Identity
является экземпляром Microsoft.IdentityModel.Claims.ClaimsIdentity
, у которого есть утверждение для всех атрибутов, а также утверждение nameidentifier со значением в моем элементе NameIdentifier в saml:Subject. У него также есть свойство NameClaimType
, указывающее на "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name". Было бы больше смысла, если бы NameClaimType
сопоставлялся с nameidentifier, не так ли? Как мне это сделать? Или я ожидаю неправильного утверждения имени?
Спасибо!