2011-12-01 54 views
1

我使用Pylons框架在Python中构建了一个RESTful API,为Apache2和mod_wsgi提供服务,并且希望将它连接到iPhone应用程序。我对HTTPS,SSL和证书颁发机构的经验很少,我想知道如何去保护我的API。将iPhone应用连接到安全的RESTful API?

如何确保通过HTTPS提供API?像在this示例中那样,是否有必要设置SSL证书?如果我通过未被iOS认可的权限(例如CACert.org,主要是因为它是免费的)签署SSL证书,是否会影响我的应用与我的服务器通信的能力?其他人如何解决保护基于Web的RESTful API和iPhone应用程序之间通信的问题?

此外,OAuth如何适应这一切?

回答

1

这真的取决于你“保护”你的API的意思。

你的意思是你想要A)保护它,以便未经授权的人无法访问该API或B)你的意思是你想对客户端和服务器之间来回传递的数据进行某种级别的加密?

如果答案是B或两者,那么您肯定需要考虑获取SSL证书并将其安装在服务器上。大多数证书颁发机构都有指导如何做到这一点。

我不确定你的意思是什么“未被iOS认可的权威”,但你仍应该考虑从认可的权威机构获取证书。尽管如果他们提供免费的证书,那么尝试CACert.org仍然不会有什么坏处。在服务器和客户端之间的通信能力受到影响方面,我看不出有任何问题。

在保护您的API免受未经授权的客户端方面,您可以检出OAuth(请参阅http://oauth.net/)。 OAuth有各种Python库。例如,请查看https://github.com/simplegeo/python-oauth2。您可能需要考虑的唯一事情就是在实现OAuth时有一个合理的学习曲线。

上面的第二个链接演示了一个简单的OAuth客户端,并且还具有三脚认证过程的示例代码。

+0

要使OAuth工作,您根本不需要SSL? – john

+0

不,您本身不需要SSL。这确实取决于保护你的API的意思。正如我所提到的,OAuth可以帮助防止未经授权的客户访问您的API。但是,如果没有SSL,客户端和服务器之间的通信仍然是未加密的。也许您正在寻找的是OAuth/SSL组合? – stephenmuss

1

您可以在iOS中以编程方式处理证书。只要您的代码承认指纹,您甚至可以使用自签名证书。我记不清头顶上的细节,但我知道你可以使用didReceiveAuthenticationChallenge来做到这一点。

从长远来看,购买证书比较简单(cacert.org不会这么做)。