OAuth 2.0 两腿身份验证与 SSL/TLS

Posted

技术标签:

【中文标题】OAuth 2.0 两腿身份验证与 SSL/TLS【英文标题】:OAuth 2.0 two-legged authentication vs SSL/TLS 【发布时间】:2015-06-20 14:47:34 【问题描述】:

我有两台需要以安全方式进行通信的企业服务器,并且正在比较使用 SSL(使用客户端/服务器证书来验证双方)与使用 OAuth 2.0(可选使用 MAC 令牌或 JWT 令牌)的双腿身份验证.

从历史上看,OAuth 似乎是为了完全不同的目的而创建的(用户允许服务在某处访问某些数据的三足案例),尽管现在将两足的情况集成到 OAuth 2.0 规范中,但从我所看到的两条腿的 OAuth 2.0 似乎并没有为 SSL 提供太多额外的保护。

我能想到的唯一一点是,OAuth 可能比 SSL 更容易配置,而且在接受可能危及安全性的错误 SSL 证书之类的事情上很容易出错。但是,我不确定这是否足以与 OAuth 一起使用。

请注意,我将这些作为单独的选项提到,但我认为使用 OAuth 可能需要在 HTTPS/SSL 之上使用它,因此两者都将被使用。

使用 OAuth 2.0 两条腿方案进行服务器到服务器通信(不涉及用户)有什么真正的优势吗?

注意:我确实找到了一个有点相似的帖子here,但那已经很老了,但我觉得它在这个问题上没有给出令人满意的答案。

【问题讨论】:

【参考方案1】:

回答您的问题“在此之上使用 OAuth(2 腿或类似的)将服务器相互授权(假设没有用户参与)有什么价值。”

你可以参考下面

https://salesforce.stackexchange.com/questions/93887/mutual-authentication-two-way-ssl-oauth

【讨论】:

【参考方案2】:

我会回复这条评论:

我的问题是,假设我使用 SSL 和适当的客户端/服务器证书来识别每台机器,那么在此之上使用 OAuth(2 条腿或类似的)来授权服务器彼此的价值是什么(假设有没有用户参与)。谢谢 - Locksleyu

总结:我不会费心去做这两件事。

详细信息:2-legged OAUTH 仅与消费者机密一样安全。同样,相互验证 SSL 仅与私钥一样安全。我假设您会将这些存储在每台服务器上的某个加密存储中。由于两者都存储在同一个地方,我看不到添加 OAUTH 带来的额外安全性。

现在,如果您正在考虑在相互身份验证 SSL 和带身份验证的标准 SSL 之间进行选择,也许 OAUTH 可以在其中发挥作用。我会选择那些看起来更容易的选项。因此,如果您有一个 OAUTH 系统并且可以轻松地将服务器身份验证添加到它,那么也许这就是要走的路。否则,只需使用相互身份验证 SSL。配置起来有点麻烦,但一旦设置好就可以快速运行。

【讨论】:

【参考方案3】:

抱歉,如果您已经知道这一点,但在您的帖子中并不清楚。

OAuth 和 SSL\TLS 是 OSI 模型的两个独立层。 OAuth 用于身份验证,位于第 7 层的顶部,而 SSL\TLS 用于第 4 层的传输安全。很容易将 SSL 与客户端证书混淆,因为它们都使用 PKI。

您对 OAuth 的理解是正确的...它用于授权个人而不是组织\服务器。 2-legged OAuth 是一个包含各种替代 OAuth 流程的术语,所有这些流程都不遵循标准。

在我看来,您希望使用客户端证书来保护您的服务器-服务器通信...真正需要的是一个可以用作 SSL(传输安全)和客户端证书(授权)的 x509 证书;虽然使用 2 个证书是常态。

【讨论】:

感谢您的回复。需要明确的是,“2 条腿”是指“客户端凭据”授权类型,我认为它记录在 OAuth 2.0 协议规范中。我的问题是,假设我使用 SSL 和适当的客户端/服务器证书来识别每台机器,那么在此之上使用 OAuth(2 条腿或类似的)来授权服务器相互之间有什么价值(假设没有用户参与)。谢谢

以上是关于OAuth 2.0 两腿身份验证与 SSL/TLS的主要内容,如果未能解决你的问题,请参考以下文章

使用 Laravel API 实现 OAuth 2.0 身份验证

使用 oauth 2.0 和 wicket 实现身份验证

asp.net core 2.0 中的 WCF - 无法为具有权限的 SSL/TLS 安全通道建立信任关系

如何使用基本身份验证而不是 OAuth 2.0 将 Alexa 用户与 3rd 方应用程序相关联

如何在 JMeter 中进行 OAuth 2.0 身份验证?

OAuth 2.0 与 JWT