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

Mik*_*tor 11 passwords saml federated-identity single-sign-on

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

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

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

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

Mic*_*zen 27

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

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

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

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

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

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

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

在我看来,你想要做的是帐户链接或注册 - 我会这样做:

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

至于消息的内容......

OASIS安全服务技术委员会有可用XML模式的部分,包括实例的大量文档zip文件下载.阅读协议和配置文件也非常值得,因为这些描述了身份对话中涉及的各方之间的消息流.

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

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