非SSL网站的OAuth1或OAuth2?

AH.*_*AH. 2 php ssl codeigniter oauth oauth-2.0

我想在我的PHP服务器上实现OAuth服务器,该服务器具有SSL连接.PHP-codeigniter还没有像样的OAuth 2框架.那么我应该使用OAuth1还是OAuth2?

小智 10

简短的回答是:您应该考虑使用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],它指定如何通过发出MAC类型访问令牌来发出OAuth 2.0请求.这些令牌使用共享对称密钥进行加密签名(密钥在客户端应用程序和服务器之间共享).

重要说明:但是,在此类设置中,您仍需要为客户端提供一种机制,使其能够以安全的方式与您的OAuth 2.0服务器建立共享密钥(如何完成此操作取决于您 - 可以通过某些方式完成SSL通道或带外,具体取决于您的确切用例).这是允许客户安全访问受保护资源的严格要求!

"MAC方案要求在客户端和服务器之间建立共享对称密钥.该规范提供了一种这样的方法,用于以MAC类型访问令牌的形式使用OAuth 2.0向客户端发布一组MAC凭证.

此机制的主要设计目标是简化和改进对不愿意或无法为每个请求使用TLS的服务的HTTP身份验证.特别是,该机制利用初始TLS设置阶段在客户端和服务器之间建立共享密钥.然后在不安全的通道上使用共享密钥,以防止被动网络攻击者."

基于上面的解释,我会考虑使用OAuth 1.0a [3],它不需要使用传输级安全性来进行客户端和授权服务器之间的通信(OAuth 1.0a使用术语"服务提供者",顺便说一下).相反,它依赖于使用共享对称密钥(或RSA密钥)签名的消息.然而.请注意,除非您使用HMAC-SHA1或RSA-SHA1签名(即您决定使用PlAINTEXT签名类型),否则无论如何都需要使用SSL/TLS.

[1] https://tools.ietf.org/html/rfc5849

[2] http://tools.ietf.org/html/rfc6749

[3] http://tools.ietf.org/html/draft-ietf-oauth-v2-http-mac-01