Passwords 带有用户名/密码的SAML断言-消息的真实外观是什么?

Passwords 带有用户名/密码的SAML断言-消息的真实外观是什么?,passwords,single-sign-on,saml,federated-identity,Passwords,Single Sign On,Saml,Federated Identity,我需要创建一些SAML2.0断言,但我很难找到XML应该是什么样子。大多数文档似乎都是关于使用特定工具的,而不是关于消息的。我有很多可能的模式,但我找不到相关消息在实践中实际是什么样子的示例 业务规则说:为了创建共享身份,用户在系统B上告诉系统a他们的用户名和密码。系统a需要将此信息(以及一些人口统计信息)传递给系统B。系统B验证信息并传回一个唯一标识符,然后可用于引用此用户 有人能给我举个例子,说明SAML2.0断言是什么样子的,以承载这些信息吗 FWIW,我使用的是C#,需要以排除使用第三方

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

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

有人能给我举个例子,说明SAML2.0断言是什么样子的,以承载这些信息吗


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

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

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

标准SAML2.0用例关注于断言身份的一方(身份提供者)和依赖这些断言的另一方(或多方)(服务提供者)。断言携带所谓的名称标识符,身份提供者和服务提供者提前约定使用该标识符

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

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

就您的问题而言,重要的是SAML2.0没有提供创建本地“应用程序”用户帐户或将该本地用户帐户链接到联合身份的方法。这根本不是SAML2.0试图解决的问题

现在,回到你的商业规则

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

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

提供了一个zip文件下载,其中包含XML模式各部分的大量文档,包括示例。阅读协议和概要文件文档也很有价值,因为它们描述了身份对话中涉及的各方之间的消息流

我发现有大量的演示文稿非常有用。具体来说,Eve Maler帮助我开始认识到SAML v2.0试图解决的问题。本演示文稿包括断言的示例。上有更新的演示文稿和指向其他资源的链接


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

是什么保护我的应用程序不处理关于用户的自制虚假断言?当断言以xml形式发送到客户端时,任何人都可以创建一个假断言。我的应用程序应该执行什么样的安全检查来验证处理后的断言最初是由身份提供者发送的?SAML模式对任何可能被视为机密或敏感的元素的数字签名和加密都提供了很好的支持。签名是确保交付的数据完好无损且经过验证的最简单方法