WS-Trust、OpenID 和 SAML Passive 之间有啥区别?

Posted

技术标签:

【中文标题】WS-Trust、OpenID 和 SAML Passive 之间有啥区别?【英文标题】:What's the difference between WS-Trust, OpenID, and SAML Passive?WS-Trust、OpenID 和 SAML Passive 之间有什么区别? 【发布时间】:2011-04-03 09:53:42 【问题描述】:

似乎 Microsoft ADFSv2 支持 WS-Trust 和 SAML Passive,但它所构建的 WIF 堆栈不支持 SAML。

WS-Trust 和 SAML-P 有什么区别?它们是否具有相同的安全漏洞,如果有,它们是什么?

注意:这里有一个类似但不同的问题:

SAML vs OAuth

【问题讨论】:

【参考方案1】:

我假设您指的是 [新发布的] ADFS v2?

是的,ADFS v2 支持 WS-Trust(和 WS-Federation)和 SAML2 被动,而 WIF 仅支持 WS-Trust(和 WS-Federation)而不支持 SAML2(既不被动也不主动)。

WS-Federation 使用 WS-Trust 来执行 [基于浏览器的] 被动联合,并且在很多方面类似于 SAML2 被动 - 在很多方面都不是。 WS-Federation 和 SAML2 被动之间的一个显着区别是 WS-Federation v1.1(ADFS v2 支持的新版本)支持自动元数据发现。您只需要在 WS-Federation 中提供一个元数据端点(一个 URL),而在 SAML 中您必须通过某些选择的方法(U 盘、邮件等)交换元数据文档。

我不知道这两种协议中是否存在任何实际的安全漏洞,但元数据交换的方法可以永远争论不休。 WS-Federation 方法使许多事情变得更容易,例如证书翻转、自动更新、“免费”自动供应联盟中的新成员等。但是,SAML2 中的“手动”交换过程至少可以理论上更安全。

至于为什么 SAML 支持不包含在 WIF 中,我只能推测。一个不错的猜测可能是有人希望使用 WIF 的网站与 ADFS 联合,而不是直接与其他 [第三方] IdP 联合 :-)

【讨论】:

SAML/WS-Fed 之间的底层加密是否相同?比较 SAML2 与 WS-Fed 是否比 SAML2 与 WS-Trust 更好?哪个更像是“苹果对苹果”的比较? 鉴于 ADFS 也支持 SAMLP,WIF 团队更有可能只是没有时间添加(和测试)该功能。 WIF 确实具有添加其他协议/令牌格式的扩展点。甚至微软也没有无限的资源:-) @makerofthings7 SAML2 被动配置文件可以与 WS-Fed 进行比较,而 SAML2 主动配置可以与 WS-Trust 进行比较(至少在较高级别上)。就加密而言,它取决于协议配置。一般来说,它们支持相同的算法,实际上,平台(.Net、Java 等)通常是限制因素,因为它们通常不支持规范允许的所有选项。然而,在协议中“要求”加密本身,尽管在某些情况下加密是一个好主意(例如,用于证明令牌或如果隐私是一个问题)。 @Eugenio Pace 可能虽然我对此表示怀疑 :-) 但是,MS 似乎对在 WIF 中添加 SAML2 支持的想法持开放态度,因为 Vittorio 已经多次暗示未来可能提供支持(甚至在他的编程 WIF 书中)。鉴于 oiosaml.net OSS 项目在 .Net 中提供了出色的 SAML2 支持,这种可能性已经存在(并且还有几个付费选项)。【参考方案2】:

2015 年的更新和更正答案

OpenID-Connect(或 OIDC) - 新的单点登录协议 是 OpenID 版本 3,不向后兼容, 基于 OAuth 技术构建 使用 JWT(用于令牌,以及其他 JSON Web 技术和定义) WS-Federation(或 WS-Fed) - 旧的单点登录协议 使用 SAML 作为其令牌

定义:

JWT - 安全令牌的 JSON 定义(在 OAuth 和 OIDC 中) 发音像“jot”这个词。 SAML - 安全令牌的 XML 模式和定义(在 WS-Fed 中)

OAuth

OAuth - 是将授权从请求应用程序(客户端)委托给授权服务的一组规范。 授权使用在“范围”中给出 范围由一组安全“claims”和所需的“resources”组成 授权范围在 JWT 资源令牌中返回 可以通过多种方式返回令牌。最常见的是: 直接返回的令牌:在隐式流中 - 用于基于浏览器的 (javascript) 应用程序 在收到“访问代码”后分两个阶段返回令牌 - 用于基于服务器的(REST 或 Web API)调用。 在某些情况下,人类用户会看到一个 UI 以同意授权所有或部分请求的“资源”。 令牌可能包含实际信息,或者是包含信息的服务器的引用

OIDC(开放 ID 连接)

通过请求具有 OpenID-Connect 类型声明的 OAth 范围开始 OP - OIDC 提供程序是符合 OIDC 协议的 OAuth 服务器 OP(OIDC 提供程序)返回一个身份令牌。 身份令牌包含有关用户的信息(声明) 在某些情况下,人类用户会看到一个 UI,以授权部分或全部请求的信息和资源。

见Travis Spenscer's OAuth and OIDC article - 它很容易阅读。

如果没有更正,请将其标记为答案。谢谢。

【讨论】:

【参考方案3】:

来自The SSO Academy,很简单的区别,

很多人对 SAML、OpenID 之间的区别感到困惑 和 OAuth,但实际上非常简单。虽然有一些 重叠,这里有一个非常简单的方法来区分 三。

OpenID – single sign-on for consumers
SAML – single sign-on for enterprise users
OAuth – API authorization between applications

【讨论】:

以上是关于WS-Trust、OpenID 和 SAML Passive 之间有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

OAuth & OpenID & SAML 工作流程梳理对比

Azure AD B2C OpenID使用WS-Federation和SAML声明提供程序连接单一注销

OpenID Connect 最终会取代 SAML 成为 SSO 的主导协议吗?

认证与授权——单点登录协议盘点:OpenID vs OAuth2 vs SAML

.net 核心和 SAML 2.0

Spring Boot/Angular整合Keycloak实现单点登录