Microsoft AD FS 3.0 和 SAML 2 错误作为异常:'Element' 是无效的 XmlNodeType

Microsoft AD FS 3.0 and SAML 2 errors as Exception: 'Element' is an invalid XmlNodeType

我正在使用 ADFS 3.0 和 SAML 2。我收到如下错误:

  1. 异常: 'Element' 是无效的 XmlNodeType。堆栈跟踪:在 System.Xml.XmlReader.ReadEndElement() 在 Microsoft.IdentityServer.Protocols.Saml.SamlProtocolSerial1)izer.ReadAuthnRequest(XmlReader reader)
  2. 被动管道错误

saml 请求是:

<samlp:AuthnRequest xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="DH7a49776ef7c040d09b2c661821bd5f76" AssertionConsumerServiceURL="https://auth-dev.ServiceProvider.com/clientOrg/SAML/Login" Destination="https://federation.example.net/adfs/ls/IdpInitiatedSignOn.aspx" IssueInstant="2017-04-20T14:49:35.6414575Z" Version="2.0" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
<saml:Issuer>https://auth.ServiceProvider.com/clientOrg</saml:Issuer>
<samlp:NameIDPolicy AllowCreate="true" />
<samlp:forceAuthn>true</samlp:forceAuthn>
</samlp:AuthnRequest>

如果错误消息过于模糊,如何进一步缩小范围并解决从 AD FS 端提出的这个问题?

谢谢。

确保您的请求符合规范。使用成熟的 SAML2 库生成请求,而不是手工制作。

https://auth.ServiceProvider.com/clientOrg 使用什么来生成这些请求?

如果您删除以下字符串,您的请求将符合要求。

<samlp:forceAuthn>true</samlp:forceAuthn>

请参阅 https://msdn.microsoft.com/en-us/library/ee895365.aspx 处的示例,了解如何使用 forceauthn。我还固定了目的地,因为 ad fs 端点是 /adfs/ls 而不是 /adfs/ls/idpinitiatedsignon.aspx

<samlp:AuthnRequest xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ForceAuthn="true" ID="DH7a49776ef7c040d09b2c661821bd5f76" AssertionConsumerServiceURL="https://auth-dev.ServiceProvider.com/clientOrg/SAML/Login" Destination="https://federation.example.net/adfs/ls/" IssueInstant="2017-04-20T14:49:35.6414575Z" Version="2.0" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
  <saml:Issuer>https://auth.ServiceProvider.com/clientOrg</saml:Issuer>
  <samlp:NameIDPolicy AllowCreate="true" />
</samlp:AuthnRequest>

http://docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf 查看规范以获得正确的 authnrequest。

使用像 https://www.samltool.com/validate_xml.php 这样的验证器来检查您的请求是否合规。其他人可能会有更多建议。