SP启动的SSO和IDP启动的SSO之间的区别

122

有人能为我解释一下SP启动的SSOIDP启动的SSO之间的主要区别吗?同时,包括在与ADFS + OpenAM联合实现单点登录时哪种方法更好?


8
对于那些刚接触单点登录概念的人,需要澄清一下:SP代表服务提供商(即用户想要使用的系统),而IdP代表身份提供商(即验证用户身份的系统)。 - Seafish
4个回答

95

IDP发起的SSO

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

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

处理步骤:

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

SP发起的SSO

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

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

处理步骤:

  1. 用户请求访问受保护的SP资源。该请求被重定向到联合服务器以处理身份验证。
  2. 联合服务器向浏览器发送一个带有SAML身份验证请求的HTML表单,要求IdP进行身份验证。HTML表单会自动发布到IdP的SSO服务。
  3. 如果用户尚未登录IdP网站或需要重新验证身份,则IdP会要求提供凭据(例如ID和密码),用户登录。
  4. 可以从用户数据存储中检索有关用户的其他信息,以包含在SAML响应中。(这些属性作为IdP和SP之间联合协议的一部分预先确定)

  5. IdP的SSO服务返回一个带有身份验证断言和任何其他属性的SAML响应的HTML表单给浏览器。浏览器会自动将HTML表单发布回SP。注意: SAML规范要求POST响应进行数字签名。

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


1
关于SP启动的SSO - 上面第3点说:“如果用户尚未登录到IdP站点或需要重新验证,则IdP会请求凭据(例如ID和密码),然后用户登录。”系统如何确定用户是否已登录到IdP站点?例如,它是否生成了一个cookie? - Edwardo
1
@Edwardo 你的假设是正确的。通常情况下,当与 IdP 建立会话时,IdP 会生成一个 cookie 来维护该会话。 - jekennedy
我有另一个问题https://dev59.com/FaHia4cB1Zd3GeqPVpMt。你能看一下吗? - kawadhiya21
链接已经失效。 - Heinzlmaen
IdP发起的SSO-POST,SP发起的SSO-POST-POST。 - Andrei Damian-Fekete

79

SP发起的单点登录

用户Bill:“嘿Jimmy,给我看那份报告吧。”

服务提供商(SP)Jimmy:“嘿,我还不确定你是谁。我们这里有一个流程,你先到身份提供商Bob那里进行验证。我信任他。”

身份提供商(IdP)Bob:“我看到Jimmy把你送来了。请给我你的凭据。”

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

身份提供商Bob:“嗨,Bill。看起来你是合法用户。”

身份提供商Bob:“嘿Jimmy,这个Bill是可信的,并且这里还有关于他的一些额外信息。你可以从这里开始做任何事情。”

服务提供商Jimmy:“好的,很酷。看起来Bill也在我们已知客人列表中。我会让Bill进入的。”

IdP发起的单点登录

用户Bill:“嘿Bob,我想去Jimmy那里。那边安全性很高。”

身份提供商Bob:“嘿Jimmy,我信任Bill。他是可信的,并且这里还有关于他的一些额外信息。你可以从这里开始做任何事情。”

服务提供商Jimmy:“好的,很酷。看起来Bill也在我们已知客人列表中。我会让Bill进入的。”


详细内容可以在这里查看,但仍然保持简单:https://jorgecolonconsulting.com/saml-sso-in-simple-terms/


36
我认为第二段对话不太正确...正确的应该是: IdP:“嘿,这里有关于 Sal 的一些信息,请让她进来。” / SP:“好的,我相信你,我会让她进来的。” - Jeff Olson
4
第一次对话也不正确:在第一步中,SP 还不知道是哪个用户,只有在 IdP 上该用户才会登录并确认其身份为 “Sal” 。 - Allie
4
第一段对话应该是这样的:SP:“嘿,你的身份证在哪里?” IdP:“等一下,我查一下。请出示你的身份证。好了,兄弟,让她进来吧,她叫Sal,今年21岁(可选)。” SP:“太棒了,你真棒!嘿,你,快进来!” - Erdal G.
4
我认为这个回答不应该被那么多人给踩。它用一种有创意的方式回答了问题,也许不像一些人指出的那样准确,但依然很有创造力。 - Aaron C
3
看到正确答案以这种格式呈现会很有趣。我读了那些得到赞同的答案,眼睛都花了,而这种格式可以帮助快速掌握总体概念。我不够了解,无法自信地根据评论创建答案。 - Sean Connolly
显示剩余2条评论

75
在IDP Init SSO(非请求Web SSO)中,联合过程由IDP向SP发送一个非请求的SAML响应来启动。在SP-Init中,SP生成一个AuthnRequest作为联合过程的第一步发送到IDP,然后IDP以SAML响应做出回应。我认为ADFSv2对于SAML2.0 Web SSO SP-Init的支持要比其对IDP-Init的支持更强,特别是在与第三方Fed产品集成方面(主要围绕RelayState的支持),因此如果可以选择,您会想使用SP-Init,因为它可能会让使用ADFSv2变得更加容易。
以下是PingFederate 8.0入门指南中的一些简单的SSO描述,您可以查看,这也可能有所帮助--https://documentation.pingidentity.com/pingfederate/pf80/index.shtml#gettingStartedGuide/task/idpInitiatedSsoPOST.html

0

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

这只是一个高层次的概述,还有更多内容。

Procore支持SP和IdP启动的SSO:

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


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