SP 发起的 SSO 和 IDP 发起的 SSO 之间的区别

Posted

技术标签:

【中文标题】SP 发起的 SSO 和 IDP 发起的 SSO 之间的区别【英文标题】:Differences between SP initiated SSO and IDP initiated SSO 【发布时间】:2012-09-28 13:47:01 【问题描述】:

谁能向我解释SP 发起的 SSOIDP 发起的 SSO 之间的主要区别是什么,包括哪个是结合实施单点登录的更好解决方案使用 ADFS + OpenAM 联合?

【问题讨论】:

澄清单点登录概念的新手:SP = 服务提供者(用户想要使用的系统)和 IdP = 标识提供者(对用户进行身份验证的系统) 【参考方案1】:

在 IDP Init SSO(未经请求的 Web SSO)中,联合过程由 IDP 向 SP 发送未经请求的 SAML 响应来启动。在 SP-Init 中,SP 生成一个 AuthnRequest,作为联合过程的第一步发送给 IDP,然后 IDP 以 SAML 响应进行响应。恕我直言,ADFSv2 对 SAML2.0 Web SSO SP-Init 的支持比其 IDP-Init 支持更强:与第 3 方 Fed 产品的集成(主要围绕对 RelayState 的支持),因此如果您有选择,您将希望使用 SP-初始化,因为它可能会使 ADFSv2 的生活更轻松。

这里有一些来自 PingFederate 8.0 入门指南的简单 SSO 描述,您可以浏览一下,这也可能会有所帮助 -- https://documentation.pingidentity.com/pingfederate/pf80/index.shtml#gettingStartedGuide/task/idpInitiatedSsoPOST.html

【讨论】:

【参考方案2】:

IDP 发起的 SSO

来自 PingFederate 文档:- https://docs.pingidentity.com/bundle/pf_sm_supportedStandards_pf82/page/task/idpInitiatedSsoPOST.html

在这种情况下,用户登录到 IdP 并尝试访问远程 SP 服务器上的资源。 SAML 断言通过 HTTP POST 传输到 SP。

加工步骤:

    用户已登录 IdP。 用户请求访问受保护的 SP 资源。用户未登录到 SP 站点。 (可选)IdP 从用户数据存储中检索属性。 IdP 的 SSO 服务向浏览器返回一个 HTML 表单,其中包含一个包含身份验证断言和任何其他属性的 SAML 响应。浏览器会自动将 HTML 表单发送回 SP。

SP 发起的 SSO

来自 PingFederate 文档:- http://documentation.pingidentity.com/display/PF610/SP-Initiated+SSO--POST-POST

在这种情况下,用户尝试在未登录的情况下直接访问 SP 网站上的受保护资源。用户在 SP 站点上没有帐户,但有一个由第三方 IdP 管理的联合帐户。 SP 向 IdP 发送身份验证请求。请求和返回的 SAML 断言都是通过用户的浏览器通过 HTTP POST 发送的。

加工步骤:

    用户请求访问受保护的 SP 资源。请求被重定向到联合服务器以处理身份验证。 联合服务器向浏览器发送一个 HTML 表单,其中包含来自 IdP 的身份验证的 SAML 请求。 HTML 表单会自动发布到 IdP 的 SSO 服务。 如果用户尚未登录到 IdP 站点或需要重新验证,IdP 会要求提供凭据(例如 ID 和密码),然后用户登录。

    可以从用户数据存储中检索有关用户的其他信息,以包含在 SAML 响应中。 (这些属性是作为 IdP 和 SP 之间的联合协议的一部分预先确定的)

    IdP 的 SSO 服务向浏览器返回 HTML 表单,其中包含身份验证断言和任何其他属性的 SAML 响应。浏览器自动将 HTML 表单发送回 SP。 注意: SAML 规范要求对 POST 响应进行数字签名。

    (未显示)如果签名和断言有效,SP 为用户建立会话并将浏览器重定向到目标资源。

【讨论】:

Re SP 发起的 SSO - 上面的第 3 点说“如果用户尚未登录到 IdP 站点或者如果需要重新验证,则 IdP 会要求提供凭据(例如,ID 和密码)并且用户登录。”系统如何确定用户是否登录到 IdP 站点?例如,它会生成 cookie 吗? @Edwardo 您的假设是正确的。当与 IdP 建立会话时,IdP 通常会生成一个 cookie 来维护该会话。 我还有一个问题***.com/questions/43861315/…。可以看看吗? 链接已损坏【参考方案3】:

SP 发起的 SSO

向用户收费:“嘿,吉米,给我看这份报告”

Jimmy the SP:“嘿,我还不确定你是谁。我们这里有一个流程,所以你可以先向 IdP Bob 进行验证。我相信他。”

IdP 鲍勃:“我看到 Jimmy 派你来这里了。请给我你的凭据。”

比尔用户:“嗨,我是比尔。这是我的凭据。”

IdP 鲍勃:“嗨,比尔。看起来你已经退房了。”

IdP 鲍勃:“嘿,吉米。这家伙比尔检查了一下,这里有一些关于他的额外信息。你可以从这里做任何你想做的事情。”

Jimmy the SP:“好吧,酷。看起来比尔也在我们的已知客人名单中。我会让比尔进来。”

IdP 发起的 SSO

向用户收费:“嗨,鲍勃。我想去吉米家。那里的保安很严密。”

IdP 鲍勃:“嘿,吉米。我相信比尔。他检查了,这里有一些关于他的额外信息。你可以从这里做任何你想做的事。”

Jimmy the SP:“好吧,酷。看起来比尔也在我们的已知客人名单中。我会让比尔进来。”


我在这里详细介绍,但仍然保持简单:https://jorgecolonconsulting.com/saml-sso-in-simple-terms/。

【讨论】:

我不认为第二次对话是正确的......相反应该是: IdP:“嘿,这里有一些关于 Sal 的信息,请让她进来”/ SP:“好的,我相信你,我会让她进来” 第一次对话也不对:在第一步中,SP 还不知道它是哪个用户,只有在 IdP 用户才会登录并将自己标识为“Sal” 第一个对话应该是:SP:“嘿,你的ID呢?” IdP:“等一下,我会检查它。请让我看看你的 ID。好的,兄弟让她进来,她叫 Sal,她 21 岁(可选)” SP:“酷哥,你太棒了!嘿,你进来!” 我相信这个答案不值得它得到的反对票。它以一种创造性的方式回答了这个问题,可能不像某些人指出的那样准确,但也很有创意。 以这种格式看到正确答案会很有趣。阅读投票赞成的答案时,我的眼睛发呆,这种格式有助于快速掌握一般概念。我知道的不够多,无法自信地根据 cmets 自己创建答案。【参考方案4】:

https://support.procore.com/faq/what-is-the-difference-between-sp-and-idp-initiated-sso

还有更多内容,但这是关于哪个是哪个的高级概述。

Procore 支持 SP 和 IdP 发起的 SSO:

身份提供商发起的(IdP 发起的)SSO。使用此选项,您的最终用户必须登录身份提供者的 SSO 页面(例如 Okta、OneLogin 或 Microsoft Azure AD),然后单击图标登录并打开 Procore Web 应用程序。要配置此解决方案,请参阅为 Microsoft Azure AD 配置 IdP 发起的 SSO、为 IdP 发起的 Okta SSO 配置 Procore 或为 OneLogin 配置 IdP 发起的 SSO。 要么 服务提供商发起的(SP 发起的)SSO。称为 Procore 发起的 SSO,此选项使您的最终用户能够登录 Procore 登录页面,然后向识别提供者(例如 Okta、OneLogin 或 Microsoft Azure AD)发送授权请求。一旦 IdP 验证了用户的身份,用户就会登录到 Procore。要配置此解决方案,请参阅为 Microsoft Azure Active Directory 配置 Procore-Initiated SSO、为 Okta 配置 Procore-Initiated SSO 或为 OneLogin 配置 Procore-Initiated SSO。

【讨论】:

以上是关于SP 发起的 SSO 和 IDP 发起的 SSO 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

spring saml - IDP 发起的 SSO

在哪里测试 IdP 发起的 SSO?

SAML IDP 发起的 SSO 事务

OpenID Connect 和 IDP 发起的 SSO

我们是不是需要 IDP 发起的 SSO (SAML) 中的 Keystore/JKSKeyManager?

Spring security SAML IDP 发起的 SSO