【发布时间】:2013-01-15 14:27:02
【问题描述】:
我想在我的 PHP 服务器上实现 OAuth 服务器,它没有 SSL 连接。 PHP-codeigniter 还没有像样的 OAuth 2 框架。那么我应该使用 OAuth1 还是 OAuth2 呢?
【问题讨论】:
标签: php codeigniter ssl oauth oauth-2.0
我想在我的 PHP 服务器上实现 OAuth 服务器,它没有 SSL 连接。 PHP-codeigniter 还没有像样的 OAuth 2 框架。那么我应该使用 OAuth1 还是 OAuth2 呢?
【问题讨论】:
标签: php codeigniter ssl oauth oauth-2.0
从客户的角度来看,OAuth 2 更容易集成到应用程序中,还有其他好处:How is OAuth 2 different from OAuth 1?
只需将任何外部 Oauth2 库与 Codeigniter 集成。这是一个:https://github.com/bshaffer/oauth2-server-php
【讨论】:
我使用 OAuth2 已经 2 年了,我强烈推荐使用它,因为它非常可靠。 关于 SSL,据我所知,OAuth 应该是利用 SSL 来获得正确的实现,避免这种情况根本不会采用 OAuth 协议。
【讨论】:
简短的回答是:您应该考虑使用 OAuth 1.0a [1] 而不是 OAuth 2.0
长答案如下:
默认情况下,OAuth 2.0 需要使用 SSL/TLS 来确保传输层安全。因此,在实施符合 OAuth 2.0 的授权服务器时,您需要允许客户端应用程序通过安全通道连接到授权端点和令牌端点。请参阅 OAuth 2.0 规范 [2] 中的以下部分:
3.1(授权端点)
“[...] 向授权端点发送请求时,授权服务器必须要求使用第 1.6 节中所述的 TLS。”
3.2(令牌端点)
“[...] 向令牌端点发送请求时,授权服务器必须要求使用第 1.6 节所述的 TLS。”
在您的情况下,当您没有 SSL 连接时,您仍然可以可能考虑使用 OAuth 2.0 和 MAC 访问身份验证 [3],它指定如何通过发出 OAuth 2.0 请求MAC 类型的访问令牌。此类令牌使用共享对称密钥进行加密签名(密钥在客户端应用程序和服务器之间共享)。
重要提示: 但是,在这样的设置中,您仍然需要为客户端提供一种机制,以便能够以安全的方式与您的 OAuth 2.0 服务器建立共享密钥(这是如何实现的)完成取决于您 - 可以通过某些 SSL 通道或带外,具体取决于您的具体用例)。这是允许客户端安全访问受保护资源的严格要求!
"MAC方案需要建立共享对称密钥 客户端和服务器之间。该规范提供了一个 这种向客户端发出一组 MAC 凭证的方法,使用 MAC 类型访问令牌形式的 OAuth 2.0。
这种机制的主要设计目标是简化和改进 不愿意或无法使用的服务的 HTTP 身份验证 为每个请求使用 TLS。特别是,这种机制利用 初始 TLS 设置阶段,用于在 客户端和服务器。然后共享秘密用于 提供针对被动网络的保护的不安全通道 攻击者。”
基于上面的解释,我会考虑使用 OAuth 1.0a [3],它不需要在客户端和授权服务器之间使用传输级别的安全通信(OAuth 1.0a 使用术语“服务提供者” “, 顺便提一句)。相反,它依赖于使用共享对称密钥(或 RSA 密钥)对消息进行签名。然而。请注意,除非您使用 HMAC-SHA1 或 RSA-SHA1 签名(即您决定使用 PlAINTEXT 签名类型),否则无论如何您都需要使用 SSL/TLS。
[1]https://www.rfc-editor.org/rfc/rfc5849
[2]https://www.rfc-editor.org/rfc/rfc6749
[3]https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-http-mac-01
【讨论】: