我想在我的PHP服务器上实现OAuth服务器,该服务器没有SSL连接。 PHP-codeigniter还没有像样的OAuth 2框架。那么我应该使用哪一个OAuth1或OAuth2?
答案 0 :(得分: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],它指定如何通过发布来生成OAuth 2.0请求MAC类型访问令牌。这些令牌使用共享对称密钥进行加密签名(密钥在客户端应用程序和服务器之间共享)。
重要提示:但是,在此类设置中,您仍需要提供一种机制,让客户端能够以安全的方式与您的OAuth 2.0服务器建立共享密钥(如何完成取决于您 - 可以通过某些SSL通道或带外,具体取决于您的确切用例)。这是允许客户安全访问受保护资源的严格要求!
“MAC方案需要建立共享对称密钥 客户端和服务器之间。该规范提供了一个 这种用于向客户端发送一组MAC凭证的方法 OAuth 2.0采用MAC类型访问令牌的形式。
该机制的主要设计目标是简化和改进 对不愿意或不能的服务进行HTTP身份验证 为每个请求使用TLS。特别是,这种机制可以利用 初始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
答案 1 :(得分:1)
从客户的角度来看,OAuth 2更易于集成到应用程序中,以及其他功能:How is OAuth 2 different from OAuth 1?
只需将任何外部Oauth2库与Codeigniter集成即可。这是一个:https://github.com/bshaffer/oauth2-server-php
答案 2 :(得分:1)
我使用OAuth2已有2年了,我强烈推荐使用它,因为它非常可靠。 关于SSL,据我所知,OAuth应该使用SSL来获得正确的实现,避免这样做只是不采用OAuth协议。