我正在开发一个使用WIF创建安全Web应用程序和STS的项目,除了我想要返回 名称标识符的实例之外,一切正常。< / p>
在这种情况下,我收到以下SamlAssertion错误:
“A SamlAssertion requires at least one statement”
现在这里是奇怪的一点 - 我正在使用nameidentifier的标准xmlsoap架构定义(http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier),它只是在这个声明时被发送错误发生。
如果我发送(例如)http://schemas.xmlsoap.org/ws/2005/05/identity/claims/email或我编写的一个,这一切都有效 - 如果您更改nameidentifier声明中的大小写(使用http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameIdentifier),它甚至可以正常工作! / p>
nameidentifier是否可能是SAML或WIF中的关键字,因此不能是唯一发送的声明? WIF显然允许发送单个声明,而不是自己发送的名称标识符。
答案 0 :(得分:0)
就我个人而言,我从未使用NameIdentifier
声明。应使用Name
类型(http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
)传递用户名。
我确认您的观察 - 您不能将NameIdentifier(无论是什么)作为唯一索赔,但您当然可以将名称作为唯一索赔。
答案 1 :(得分:0)
nameidentifier是否可能是SAML或WIF中的关键字
是。在SAML令牌格式中,您有一个单独的主题概念(唯一标识实体的东西)和属性概念(有关实体的信息)。
WIF模型将所有这些内容表示为声明。将大多数声明写入SAML标记时,大多数声明都会映射到SAML属性,但nameidentifier是特殊的,它会被写为主题。
但看起来你正在生成一个带有完全为空的AttributeStatement的SAML令牌。你确定吗?您使用的是任何类型的自定义令牌处理程序吗?
我不确定,但我认为默认情况下,当WIF遇到仅具有nameidentifier声明的ClaimsIdentity时,它应该在AuthenticationStatement和AttributeStatement下将此声明写为SAML主题,所以错误你不应该发生。