JSON Web Tokens、SAML 和 OAuth 2 之间有什么区别。请提供一些指针和对其功能的高级概述。
具体来说,为什么要使用 SAML 而不是 JSON Web 令牌,反之亦然?是否需要 OAuth 2 才能使用 JSON Web Tokens/SAML?或者 JSON Web Tokens/SAML 可以独立使用吗?
JSON Web Tokens、SAML 和 OAuth 2 之间有什么区别。请提供一些指针和对其功能的高级概述。
具体来说,为什么要使用 SAML 而不是 JSON Web 令牌,反之亦然?是否需要 OAuth 2 才能使用 JSON Web Tokens/SAML?或者 JSON Web Tokens/SAML 可以独立使用吗?
SAML 和 OAuth 2 是用于身份验证/授权的协议。JSON Web 令牌 (JWT) 是可用于许多应用程序或协议的令牌规范 - OpenID Connect (OIDC) 协议恰好使用 JWT。SAML 还定义了自己的令牌:SAML Assertion;与 OAuth 2:访问令牌一样。这些协议使用的令牌表示您已通过身份验证/授权并传达有关您或会话的信息。
+----------+----------------+-------------------------------+
| Protocol | Token | Technologies | Design Pattern |
+==========+================+==============+================+
| SAML | SAML Assertion | SOAP, XML | Facade |
+----------+----------------+--------------+----------------+
| OAuth 2 | Access Token | | Proxy |
+----------+----------------+--------------+----------------+
| OIDC | Access Token, | REST, JSON | Decorator |
| | ID Token (JWT) | | |
+----------+----------------+--------------+----------------+
与上表中的每个协议相关的软件设计模式用一句话概括了这些协议的目的。
萨姆勒。Facade 模式为子系统中的一组接口提供了一个统一的接口。SAML 是最初的联合身份系统,由大学发明,允许学生访问其他大学图书馆,但每个大学都维护自己的学生身份系统。大多数企业环境中的事实标准。围绕 XML 和 SOAP 构建。
认证 2。代理,就像它的名字所暗示的那样,允许客户访问您的信息,就好像他们是您的代理一样。
国际数据中心。通过向协议添加用户 ID 和用户信息来扩展 OAuth 2。通常被视为 SAML 的现代版本。在消费领域广泛使用——几乎所有社交媒体网站都支持 OIDC。围绕 JSON 和 REST 构建。
希望这能稍微解开你的问题。您无法将 SAML(协议)与 JWT(令牌)进行比较,但您可以将 SAML 与 OIDC 进行比较。但是,您可以将 SAML 断言与 OIDC JWT 进行比较。OAuth 2 规范没有指定其令牌的底层结构。您可能还会发现有趣的是,OIDC 可以使用 SAML 断言以及它自己的 JWT。
共识是 OIDC 最终将取代 SAML,但 SAML 自 2005 年以来就已经存在并且非常成熟——这是企业环境中的一个重要特征。尽管 OIDC 相对较新(2014 年),但如今(2018 年)的身份验证解决方案有望支持它。SAML 是在 Web 浏览器占主导地位的时代设计的,并且在使用移动或现代 Web 应用程序时有些尴尬。另一方面,OIDC 支持现代技术,例如 REST 和 JSON,这使得如今的应用程序更容易访问它。
但是,OAuth 2、OIDC 和 SAML 实际上并没有指定如何按照传统定义这两个术语的方式完成身份验证和授权。
当您听到身份验证时,您会想到发送到您手机的登录名/密码、指纹或密码——这些协议都没有涵盖这些细节,而是将身份验证委托给身份提供者 (IdP)。这些协议指定应如何将您重定向到 IdP 以进行身份验证,以及如果成功,如何返回令牌/断言。
OAuth 2“授权”涉及获得用户同意,即是否授予服务访问您的信息/数据的权限——这并不意味着访问控制意义上的授权。OIDC 很像 OAuth 2 也支持获得用户同意的方法。虽然 SAML 也支持用户同意,但它通常不在企业/内部网环境中使用。
授权(指的是更传统的访问控制含义)也不在 OAuth 2、OIDC 和 SAML 规范中,但它们允许令牌包含诸如用户是否属于管理员组之类的声明,客户端服务可以根据自己的喜好对其进行解释.
OAuth 2、OIDC 和 SAML 是不同身份验证和授权(访问控制)方案的重要促进者,但实际上并未指定实际的底层机制。
2018 年 9 月 5 日更新。2018 年更新。
2017 年 4 月 26 日更新。修复了关于 SAML 不支持用户同意的错误声明 - 它支持,但未广泛使用。
2017 年 2 月 22 日更新。澄清身份验证、授权(访问控制)和用户同意以响应下面的用户评论。