У меня есть XML из в SAML утверждения, что выглядит следующим образом:Вытащите SecurityToken из SAML Assertion
<saml:Assertion MajorVersion="1" MinorVersion="1" AssertionID="_9b6e6302-d6a8-47f0-9155-1051a05edbfb" Issuer="http://example.com/adfs/services/trust" IssueInstant="2013-04-29T19:35:51.197Z" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion">
...
</saml:Assertion>
Я пытаюсь получить SecurityToken из этого XML, используя код, подобный следующему:
// Loading the XML referenced above.
XDocument doc = XDocument.Load(new StringReader(assertion));
// Creating config to use in TokenHandlers below; required if not using a SecurityTokenHandlerCollection.
SecurityTokenHandlerConfiguration config = new SecurityTokenHandlerConfiguration();
config.AudienceRestriction.AllowedAudienceUris.Add(new Uri("https://localhost/Orchard/"));
config.CertificateValidator = X509CertificateValidator.None;
// Both of these lines throw Exceptions, as explained below.
new Saml11SecurityTokenHandler() { Configuration = config }.ReadToken(doc.CreateReader());
new Saml2SecurityTokenHandler() { Configuration = config }.ReadToken(doc.CreateReader());
Если я пытаюсь прочитать маркер с помощью Saml11SecurityTokenHandler
, я получаю следующее исключение:
ID4075: SAML утверждение неверно пойте требуемый атрибут MajorVersion.
Если я пытаюсь прочитать маркер с помощью Saml2SecurityTokenHandler
, я получаю различные исключения:
элемент «Утверждение» с именем пространства имен «урновыми: оазис: Названия: дц: SAML: 2.0: утверждение ' не был найден.
Очевидно, что для Saml2SecurityTokenHandler
имеет смысл, так как это утверждение SAML 1.1. Однако почему SAML 1.1 TokenHandler не может прочитать это утверждение?
EDIT: Читатель кажется пустым; почему это? doc
- контент.
string notEmpty = doc.FirstNode.ToString();
string empty = doc.CreateReader().ReadOuterXml();
Попробуйте использовать XDocument.LoadXML вместо –
@Stefan: документ имеет данные; это либо читатель, либо то, как код получал данные от читателя, который этого не делает. Однако я нашел ответ, который работает (ниже). – zimdanen