11

我需要创建一些 SAML 2.0 断言,但我很难找到 XML 应该是什么样子。大多数文档似乎是关于使用特定工具,而不是关于消息。我有模式,有很多可能性,但我找不到相关消息在实践中的实际样子的示例。

业务规则说:为了创建共享身份,用户告诉系统 A 他们在系统 B 上的用户名和密码。系统 A 需要将此信息(以及一些人口统计数据)传达给系统 B。系统 B 验证信息并通过返回一个唯一标识符,然后可以使用该标识符来引用该用户。

有人可以给我一个例子,说明 SAML 2.0 断言会如何携带这些信息?

FWIW,我正在使用 C#,并且需要以排除使用第 3 方工具的方式传递 XML。

4

1 回答 1

27

我不确定您的用例是否完全符合 SAML 2.0 的功能。

您所描述的业务规则实际上看起来像是身份配置的用例,而不是访问管理。

标准 SAML 2.0 用例侧重于声明身份的一方(身份提供者)和依赖这些声明的另一方(或多方)(服务提供者)。断言带有所谓的名称标识符,身份提供者和服务提供者之间事先就使用它达成一致。

这些名称标识符几乎可以是任何东西,但它们大致分为两类:瞬态的和持久的。临时名称标识符仅在当前会话的上下文中有用(本质上只是说,“我知道这个人是谁”),并且倾向于用于保护主体的身份,同时允许某种类型的特权访问。持久标识符可以是不透明的(与使用 OpenID 访问 SO 的方式类似),其中断言方可以重复验证原则的身份而不披露其身份,同时在断言方和依赖方之间保持动态但稳定的共享标识符,或者更重要的,例如 Active Directory UPN(可以提前预先约定)。

谈到密码,正如您在问题中提到的那样,服务提供商(依赖方)永远不会看到用户密码。服务提供者通过身份验证请求将用户移交给身份提供者。身

在您的问题的上下文中,重要的是 SAML 2.0 没有提供一种方法来创建本地“应用程序”用户帐户或将该本地用户帐户链接到联合身份。这根本不是 SAML 2.0 试图解决的问题。

现在,回到您的业务规则...

在我看来,您尝试做的是帐户链接或注册 - 我会这样处理:

  • 用户访问应用程序,单击按钮以使用来自身份提供者的身份
  • 应用程序产生一个身份验证请求并将用户定向到身份提供者,携带该身份验证请求
  • 身份提供者要么登录用户,要么重用现有的身份会话(如果用户有一个)。IdP 生成包含有关用户的断言的响应消息。在您的情况下,此断言至少应带有持久名称标识符。身份提供者将用户引导回应用程序,并携带响应消息。
  • 应用程序处理响应消息。如果存在用于传递的持久标识符的映射条目,则从该映射中识别用户并以该本地应用程序用户身份登录。如果不存在映射条目,则可以要求用户在本地登录,并且在本地登录成功后,可以生成映射条目,或者可以自动创建用户帐户并要求用户输入其他信息(姓名、电子邮件地址等)“公司”用例是不允许自动帐户链接或创建,并且映射必须提前存在。

至于留言内容……

OASIS 安全服务技术委员会有一个 zip 文件下载,其中包含 XML 模式各部分的大量文档,包括示例。还值得阅读协议和配置文件文档,因为它们描述了身份对话所涉及的各方之间的消息流。

我发现有大量的演示文稿非常有用。具体来说, Eve​​ Maler 撰写的SAML v2.0 Basics帮助我开始意识到 SAML v2.0 试图解决的问题。此演示文稿包括断言看起来像的示例。saml.xml.org上有更新的演示文稿和指向其他资源的链接。

我不确定这是否会有所帮助,因为您的用例似乎不是 SAML 2.0 想要做的。您可以根据需要向请求和响应添加属性和扩展,但我看不到许多身份提供者对这些属性和响应做任何事情。

于 2009-07-17T09:15:16.520 回答