选择SP-启动或IDP-启动SSO的原因

3
在我理解中,SP-init和IDP-init SSO如下:
IDP-init SSO:IDP生成一个经过base64编码的SAML响应并发送给SP,SP验证响应,如果响应有效,则用户就会登录到应用程序。
SP-init SSO:SP向IDP发送SAML请求,然后IDP将验证用户,之后再发送SAML响应,接下来的步骤与IDP-init SSO相同。
我们如何决定选择使用SP-init还是IDP-init SSO?SP-init似乎比IDP-init SSO更安全可靠,因为它包含了身份验证部分。
3个回答

14

对于服务提供商的应用程序,业务需求告诉你:

如果所有用户与服务提供商的应用程序的交互都将从“主页”或默认着陆页面开始,则 IdP-initiated 可能是很有意义的选择(更少出错 - 无需签名的 AuthnRequest)。

如果向您的用户提供了“深度链接”,如通过电子邮件提供的报告(即用户可以单击链接,以便在服务提供商的应用程序内部进行深入操作),那么 SP-initiated 是唯一的可行之路。

在两种情况下,用户都会根据 IdP 的身份验证规则在 IdP 上进行身份验证 - 在这方面,SP-init 或 IdP-init 都不“更安全”。具体流程如下:

IdP-init:

  1. 用户点击启动 IdP-init SSO 的链接
  2. IdP 验证用户是否已经被认证 - 如果未认证,则重定向进行认证
  3. IdP 将身份验证属性(如用户名、电子邮件等)转换为 SAML 断言并将用户重定向到 SP
  4. SP 将 SAML 断言转换为 SP 应用程序令牌并重定向到应用程序

SP-Init:

  1. 用户点击链接以进入 SP 应用程序
  2. SP 应用程序确定用户没有令牌并重定向到 SP
  3. SP 重定向到 IdP
  4. IdP 验证用户是否已经被认证 - 如果未认证,则重定向进行认证
  5. IdP 将身份验证属性(如用户名、电子邮件等)转换为 SAML 断言并将用户重定向到 SP
  6. SP 将 SAML 断言转换为 SP 应用程序令牌并重定向到应用程序

如您所见,唯一的区别在于前三个步骤。


1
对于 SP-init,用户点击链接进入 SP 应用程序,我认为这不是一个 POST 绑定,那么 SP 如何确定用户是否拥有令牌。"令牌" 意味着什么? - tony.0919
2
应用程序通过其使用的会话验证令牌知道您是否已对其进行身份验证。例如,cookie - 该cookie是否存在?如果存在,它是否有效? - Andrew K.
在我看来,在SP init SSO的第一步中,用户点击的链接与IDP发送SAML响应的链接是相同的。我理解得对吗? - tony.0919
1
这可能是一个 deeplink 进入某个报告、或者其他不是站点主页的页面。IdP 每次只能将您放在一个地方,而 SP 可以将您放在 SP 应用程序的任何地方。 - Andrew K.
一旦SP接收到SAML断言,服务器将使用会话信息将其重定向到客户端页面。现在我的问题是,在安全措施方面,这一步骤的最佳方法是什么。 - Kartikeya Mishra
@KartikeyaMishra,这可能更适合作为一个独立的问题。有很多选择...在头部或查询参数中使用已签名和加密的JWT似乎是一个不错的选择。 - Andrew K.

5

根据所需或必要的用户导航流程进行选择(假设基于您的描述,浏览器POST绑定)。

如果您的要求规定用户从安全(已登录)网站A开始,并在不使用密码的情况下导航到网站B,则这是定义上的IdP启动。

另一方面,如果预计用户将在未经身份验证的站点上,但使用来自合作伙伴站点的凭据进行登录,则SP启动场景就发挥作用了。 StackOverflow本身提供了这种登录方式,如果您选择使用Google帐户登录(虽然使用了SAML的替代方法)。用户在StackOverflow的某个位置开始,单击登录链接,选择其IdP(在SAML语义中)为Google,并随着一个authn请求被发送到IdP。在未指定类型的凭据挑战之后(例如,您的浏览器可能已经在IdP站点上具有已验证的会话,或者IdP可能使用两因素认证等),用户将返回到带有SAML响应文档的SP站点。


1
我认为第一个场景没有必要使用IdP启动的SSO。在这种情况下,A是IDP,B是SP。这可以很容易地通过SP启动的SSO来实现。用户被发送到站点B,站点B检测到未登录站点B的用户。用户被发送到站点A进行身份验证。站点A检测到用户已经登录并使用有效的assertion将用户发送回站点B。 - Stefan Rasmusson
1
我曾经与几个只提供IdP-initiated的服务网站一起工作过。这里未表达的变量是伙伴网站实际支持哪些交换模式。 这并不是说您的反对意见无效; 我只是在描述IdP可能用于何处以及它是什么。也可以认为方案A首先链接(没有SSO)到网站B,只是为了回传SP-Initiated SSO,增加了跳数,并且如果SP还向IdP发出“AuthnRequest”消息,则肯定增加了复杂性。 - Scott Heaberlin

1

始终优先选择SP-initialized。IDP-initialized会使SP实现更加容易,但它带来了一系列问题,如XSRF、互操作性和深度链接。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接