2012-04-12 145 views
0

我工作的一个项目,以创建一个安全的Web应用程序和STS只返回的NameIdentifier要求和除了在我想回到了的NameIdentifier一个实例一切正常身份。您可以通过使用WIF WIF

在这种情况下,我得到以下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或我编了一个,这一切都有效 - 如果您更改名称标识声明(适用于http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameIdentifier)的套管,它甚至可以工作!

是否有可能nameidentifier是SAML或WIF中的关键字,因此不能是唯一发送的声明? WIF明确允许发送单一声明,而不是自己的名称标识。

回答

1

Is it possible that nameidentifier is a keyword in SAML or WIF

是的。在SAML令牌格式中,您有单独的主题概念(唯一标识实体的内容)和属性概念(关于实体的信息)。

WIF模型代表所有这些东西作为声明。当您将其写入SAML令牌时,大多数索赔都映射到SAML属性,但nameidentifier是特殊的,它会作为主题写入。

但它看起来像你正在生产一个完全空的AttributeStatement的SAML令牌。你可否确认?你使用任何类型的自定义令牌处理程序?

我不确定,但我认为当WIF遇到只有nameidentifier声明的ClaimsIdentity时,它应该在AuthenticationStatement和AttributeStatement下将此声明作为SAML主体写入,所以错误你不应该发生。

+0

感谢您对延迟的确认和道歉 - 我解决了这个问题,但只是急于确定我的想法是否属实。为了我的目的,只传递名称标识就足够了,但我已经通过向令牌添加了额外的声明并从那里继续工作。干杯! – aaaaa 2012-05-09 07:58:20

0

我个人从未使用过NameIdentifier声明。用户名应使用Name类型(http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name)传递。

我确认你的观察 - 你不能将NameIdentifier(不管它是什么)作为唯一的索赔,但你当然可以将Name作为唯一索赔。