【发布时间】:2019-09-30 05:24:34
【问题描述】:
我正在使用 .NET 核心实现 saml 应用程序。我有疑问
SelectSingleNode(string xpath, XmlNamespaceManager nsmgr)
我的 SAMLResponse 有 saml2 和 saml2p 前缀。
例如
<saml2p:Response xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol">
<saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">
有方法调用
_xmlDoc.SelectSingleNode("/samlp:Response/saml:Assertion", GetNamespaceManager())
其中 _xmlDoc 是具有 saml2 和 saml2p 前缀的 SAMLResponse,而 GetNamespaceManager() 是
private XmlNamespaceManager GetNamespaceManager()
{
XmlNamespaceManager manager = new XmlNamespaceManager(_xmlDoc.NameTable);
manager.AddNamespace("ds", SignedXml.XmlDsigNamespaceUrl);
manager.AddNamespace("saml", "urn:oasis:names:tc:SAML:2.0:assertion");
manager.AddNamespace("samlp", "urn:oasis:names:tc:SAML:2.0:protocol");
return manager;
}
为什么即使 XPATH 选择器是 saml/samlp 前缀,该方法调用也可以返回 SAML2 前缀元素?我对此感到非常困惑。
附言我使用来自 https://github.com/jitbit/AspNetSaml 的库来开发我的 saml 应用程序。
[2019 年 9 月 30 日 14:21 更新 GMT+7] 我尝试将 SelectSingleNode 和 XmlNamespaceManager 中的前缀更改为不是 saml 或 saml2 的前缀。改变的结果是一样的。我认为有一些关于 xml 前缀和命名空间的东西。我需要一些额外的解释。
【问题讨论】:
-
您好,欢迎来到 Stack Overflow。你的问题已经很好了我只是有一些指示:请不要在问题标题中添加标签,除非这些标签在问题中自然出现。另外,请为您的代码围栏提供代码标识符,如下所示:
```[code identifier]。开箱即用支持多种语言,例如c#、xml、xaml,不胜枚举
标签: c# xml xpath saml saml-2.0