使用用户名/密码进行SAML断言 - 消息的真实含义是什么?

时间:2009-07-15 15:24:33

标签: passwords single-sign-on saml federated-identity

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

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

有人能举例说明SAML 2.0断言带有这些信息的样子吗?

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

1 个答案:

答案 0 :(得分:27)

我不确定您的用例是否与SAML 2.0完全相同。

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

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

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

对于密码,正如您在问题中提到的那样,服务提供商(依赖方)从不会看到用户密码。服务提供商通过认证请求将用户交给身份提供者。身份提供者通过响应将用户发送回服务提供者,在成功身份验证的情况下,该响应包含关于身份提供者与服务提供者之间关系的用户身份的断言。

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

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

在我看来,你要做的就是帐户关联或注册 - 我会这样做:

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

关于消息的内容......

OASIS Security Services Technical Committee有一个zip文件下载,包含XML模式部分的大量文档,包括示例。阅读协议和配置文件也非常值得,因为它们描述了身份对话中涉及的各方之间的消息流。

我发现有大量的演示文稿非常有用。具体而言,Eve Maler的SAML v2.0 Basics帮助我开始意识到SAML v2.0试图解决的问题。此演示文稿包含断言的示例。有一个更新的演示文稿以及saml.xml.org上其他资源的链接。

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