【问题标题】:Reasons to choose SP-Initiated or IDP-Initiated SSO [closed]选择 SP-Initiated 或 IDP-Initiated SSO 的原因 [关闭]
【发布时间】:2015-03-26 11:32:17
【问题描述】:

我对 SP-init 和 IDP-init SSO 的理解如下:

IDP-init SSO:IDP生成base64编码的saml响应并发送给SP,SP然后验证响应,如果响应有效,最终用户登录应用程序。

SP-init SSO:从SP 向IDP 发送一个saml 请求,然后IDP 将认证用户然后发回saml 响应,下一部分与IDP-init SSO 相同。

我们如何决定 SSO 是使用 SP-init 还是 IDP-init ?由于身份验证部分,SP-init 似乎比 IDP-init SSO 更安全可靠。

【问题讨论】:

    标签: single-sign-on saml-2.0


    【解决方案1】:

    对我来说,服务提供商应用的业务需求告诉你:

    如果与服务提供商的应用程序的所有用户交互都将从“主页”或默认登录页面开始,那么 IdP 启动可能很有意义(较少中断 - 不需要签名的 AuthnRequest)。

    如果通过电子邮件向您的用户提供了诸如报告之类的“深层链接”(也就是说,用户可以单击一个链接,该链接应该将他们带入服务提供商的应用程序的深处),那么由 SP 发起的就是唯一的出路。

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

    IdP 初始化:

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

    SP-初始化:

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

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

    【讨论】:

    • 对于SP-init,用户点击链接进入SP应用,我认为不是POST绑定,SP如何判断用户是否有token。 “令牌”是什么意思?
    • 应用程序通过它使用的任何会话验证令牌知道您是否通过了它的身份验证。例如,一个 cookie - 该 cookie 存在吗?如果有,是否有效?
    • 在我的理解中,用户在SP初始化SSO第一步中点击应用的链接与IDP发送saml响应的链接相同。我说的对吗?
    • 可能是,但也可能是指向某个报告或不是网站主页的其他页面的深层链接。 IdP 每次可以把你放在一个地方,SP 可以把你放在 SP 应用程序中的任何地方。
    • 一旦 SP 收到 SAML 断言,服务器会将其重定向到带有会话信息的客户端页面。现在我的问题是,就这一步的安全措施而言,最好的方法是什么。
    【解决方案2】:

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

    如果您的要求要求用户从安全(登录)网站 A 开始并在没有密码的情况下导航到网站 B,则根据定义,这是 IdP 发起的。

    另一方面,如果用户希望在未经身份验证的站点上使用来自合作伙伴站点的凭据登录,这就是 SP 发起的场景发挥作用的地方。如果您选择使用 Google 帐户登录,StackOverflow 本身会提供这种登录方式(尽管使用了 SAML 的替代方法)。用户从 StackOverflow 上的某处开始,单击登录链接,将其 IdP(在 SAML 语义中)选择为 Google,并通过身份验证请求发送给 IdP。在未指定类型的凭证质询之后(例如,您的浏览器可能已经在 IdP 站点具有经过身份验证的会话,或者 IdP 可能使用双因素身份验证等),用户将返回到带有 SAML 响应文档的 SP 站点。

    【讨论】:

    • 我认为第一个场景没有理由需要 IdP 发起的 SSO。在这种情况下,A 是 IDP,B 是 SP。这可以使用 SP 发起的 SSO 轻松实现。用户被发送到站点 B,站点 B 检测到未登录到站点 B 的用户。用户被发送到站点 A 进行身份验证。站点 A 检测到用户已经登录,并使用有效断言将用户发送回站点 B
    • 我曾与几个只提供 IdP 发起的服务提供网站合作。这里未说的变量是合作伙伴站点实际支持的交换模式。这并不是说您的反想法无效;我只是在描述可以在哪里使用 IdP 以及它是什么。也有人可能争辩说,场景 A 第一次链接(没有 SSO)到站点 B,只为 SP 发起的 SSO 发送回来增加了跃点,如果 SP 也向 IdP 发出AuthnRequest 消息,肯定会增加复杂性。
    【解决方案3】:

    SP 初始化总是首选。 IDP-initilized 将使 SP 实现的工作更容易,但它带来了许多问题,例如 XSRF、互操作性和深度链接。

    【讨论】:

      猜你喜欢
      • 2014-03-26
      • 1970-01-01
      • 2020-06-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-09
      • 2019-03-23
      • 2017-11-23
      • 2017-02-06
      相关资源
      最近更新 更多