HeadlinesBriefing favicon HeadlinesBriefing.com

SAML:糟糕设计的碎形

Hacker News •
×

SAML 诞生于学术界,成长于企业 IT 部门,安全断言标记语言(SAML)认证协议仍然是这些组织中的主要支柱。然而,是时候让它退役了。随着 2000 年代后期软件即服务(SaaS)公司的兴起,IT 部门需要一种让用户向许多新 Web 服务进行身份验证的方法。SAML 和蓬勃发展的单点登录(SSO)行业满足了这一需求。然而,SAML 正被其自身的复杂性压垮。是时候弃用它,转向 OpenID Connect(OIDC)等现代替代方案了。

SAML 入门:SAML 的阴险之处在于它实际上大部分都相当容易理解,但它建立在沙、骨灰和灰烬的基础上;如果你假设 XML 签名验证是可靠的,它就能工作。但 XML 签名验证深受诅咒,而且非常复杂,以至于大多数已部署的 SAML 实现都在包装 libxmlsec,一个没人读的复杂 C 代码库。—— Thomas Ptacek,2023 年

SAML 由结构化信息标准促进组织(OASIS)安全服务技术委员会(SSTC)于 2002 年创建。XML 尽管有一些可取之处,但与 JSON 等更新的替代方案相比相当复杂。此外,一个由小组委员会组成的委员会开会是“厨房水槽”式协议设计的秘诀。果然,我们现在已经把四个(!)基于 XML 的安全协议塞进了一个:来自 Netegrity 的安全服务标记语言(S2ML)、来自 Securant 的 AuthXML、来自 VeriSign 的 XML 信任断言服务规范(X-TASS),以及来自 Jamcracker 的信息技术标记语言(ITML)。

然而,对此类协议的渴望是不可否认的。随着互联网从 Web 1.0 转向 Web 2.0,用户和组织需要一种简单的方法来向许多新的 Web 服务进行身份验证。学术界是最大的推动力:2002 年耶鲁大学的中央认证服务(CAS)、2003 年 Internet2 的 Shibboleth IdP、2003 年 Microsoft 的 ADFS,以及 2007 年左右 Uninett 的 simpleSAMLphp。所有这些身份验证项目最终都支持 SAML。一旦这个基础层建立起来,商业行业就接过它,奔向一个数十亿美元的产业。SSO、身份和身份验证提供商行业也开始兴起:Ping Identity(2002 年)、OneLogin(2009 年)、Okta(2009 年)和 Duo Security(2010 年)。这些公司基本上都建立在 SAML 协议之上,除了 Duo,他们将在 2015 年推出他们的第一个 SSO 产品,这就是我进入这个故事的地方。我参与了 Duo 的第一个本地部署 Access Gateway 产品(DAG),它建立在 simpleSAMLphp 和显然的 SAML 协议之上。正是在那里,我对 SAML 协议变得非常熟悉,并花费了多年时间消化其冗长的规范。当 Kelby Ludwig 发现 XML 注释时,我就在场……