我已经查看了类似的问题并阅读了几篇关于 SAML 2.0 的文章,但我仍然无法理解 SAML Auth Request。
我已经实施了几个基于 SAML 的 SSO 解决方案,我的公司是 IdP(身份提供商)。我们一直通过 SAML 响应将用户从我们的网站发送给第三方:
- 用户登录我们的网站。
- 用户点击我们网站上的特殊链接。
- 我们准备 SAML 响应 XML。
- 我们用我们的私钥对它进行电子签名。
- 将其作为 HTML 表单中的隐藏字段连同“RelayState”参数一起发送回我们用户的浏览器。
- 我们将此表单自动发布到 SP(服务提供商)URL。
而已。
SAML 2.0 文章(例如,关于 SAML 2.0 的 Wikipedia 概述文章)表明我们缺少一个步骤:“SAML Auth Request”。似乎 SP 需要通过首先向 IdP(我们)发送“SAML Auth Request”来启动 SSO,然后我们应该使用 SAML Response 对其进行响应。
SP 如何决定何时初始化 SSO?SP 甚至不知道我们会按照他们的方式发送用户。用户当前已登录我们的网站,何时单击该链接取决于用户,这将“神奇地”在 SP 网站中对他们进行身份验证。
谢谢!
PS 我理解 SAML 2.0 是“既定的行业标准”,但我使用它的次数越多,我就越觉得它是一种矫枉过正的做法。由于其复杂性,有大量不同的不兼容实现(根据我的经验)。每次我们与新合作伙伴进行 SSO 时——这都是一种痛苦。大公司通过销售“开箱即用”的 SAML 解决方案赚了很多钱,没有人知道如何正确配置和排除故障,因此人们几乎被迫花钱请昂贵的承包商来进行设置。公司希望能够雇佣低薪员工来支持那些过于复杂的 SAML 解决方案。在与第三方建立 SSO 时,我经常与那些不知道 SSO 是什么的人打交道,他们只是被训练点击按钮并通过电话向我阅读神秘的错误消息。这都是由于 SAML 被过度设计。但是,嘿 - 有一个好的一面:我得到了很好的报酬,因为我对 SAML 的理解足够好,至少可以让它发挥作用。:)