您能否通过 WIF 仅返回名称标识符声明



我正在开发一个使用 WIF 创建安全 Web 应用程序和 STS 的项目,除了我只想返回标识的名称标识符的情况外,一切都正常工作。

在这种情况下,我收到以下 SamlAssertion 错误: “A SamlAssertion requires at least one statement”

现在这是奇数位 - 我使用名称标识符 (http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier) 的标准 xmlsoap 架构定义,只有当仅发送此声明时才会发生错误。

如果我发送(例如)http://schemas.xmlsoap.org/ws/2005/05/identity/claims/email 或我编造的,一切都有效——如果您更改名称标识符声明的大小写(适用于 http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameIdentifier),它甚至可以工作!

名称标识符是否有可能是 SAML 或 WIF 中的关键字,因此不能是唯一发送的声明?WIF 明确允许发送单个声明,只是不允许发送名称标识符本身。

名称标识符是否有可能是 SAML 或 WIF 中的关键字

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

WIF 模型将所有这些内容表示为声明。当您将声明写入 SAML 令牌时,大多数声明都会映射到 SAML 属性,但是名称标识符是特殊的,它被写入为主题。

但看起来您正在生成一个 SAML 令牌,其中包含一个完全为空的属性语句。你能证实吗?您是否使用任何类型的自定义令牌处理程序?

我不确定,但我认为默认情况下,当 WIF 遇到仅具有名称标识符声明的 ClaimsIdentity 时,它应该将此声明作为 SAML 主题写入身份验证语句和属性语句,因此您得到的错误不应该发生。

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

我确认您的观察 - 您不能将 NameIdentifier(无论它是什么)作为唯一的声明,但您当然可以将名称作为唯一的声明。

相关内容

最新更新