如何保护RESTful Web服务?


88

我必须实现安全的RESTful Web服务。我已经使用Google进行了一些研究,但遇到了麻烦。

选项:

TLS(HTTPS)+

还有更多可能的选择要考虑吗?如果是OAuth,那么什么版本?有关系吗 从到目前为止的内容来看,带有承载令牌(没有签名)的OAuth 2.0似乎是不安全的

我发现了另一篇有关基于REST的身份验证的非常有趣的文章。

保护您的REST API ...正确的方法

Answers:


59

还有另一种非常安全的方法。它是客户证书。在通过https与服务器联系时,是否知道服务器如何提供SSL证书?好的服务器可以从客户端请求证书,以便他们知道客户端是他们所说的身份。客户端生成证书,并通过安全通道将其提供给您(例如,使用USB密钥(最好是非木马USB密钥)进入您的办公室)。

将证书客户端证书的公共密钥(及其签名者的证书,如有必要)加载到您的Web服务器中,该Web服务器将不接受任何人的连接,拥有证书相应私钥的人除外它知道。它运行在HTTPS层上,因此您甚至可以完全跳过OAuth之类的应用程序级身份验证(取决于您的要求)。您可以抽象一个层并创建本地证书颁发机构,并从客户端签署证书请求,从而可以跳过“使它们进入办公室”并将“将证书加载到服务器上”的步骤。

脖子疼吗?绝对。一切都好吗?不。很安全吗 对。

但是,它确实依赖于客户确保其证书安全(他们不能在线发布其私钥),并且通常在您向客户出售服务而不是让任何人进行注册和连接时使用。

无论如何,这可能不是您要寻找的解决方案(说实话,这可能并不适用),但这是另一种选择。


好的,现在我很困惑,这种方法还是另一种方法更好。你能详细说明吗?:D
fikr4n 2014年

您的答案对高手来说是完美的,但对新手来说却令人困惑。您能否提供一些详细信息或链接以继续阅读?
Rajan Rawal 2014年

如果证书是自签名的,它是否仍然“非常安全”?
乔伊斯

@乔伊斯我认为不会。由于您不受信任(没有冒犯),因此您签名(带有自己的证书)的证书也不会受到信任。我相信自签名证书对于测试更有用。
mbmast

假设最终用户(客户)拥有一个与服务器共享公钥的客户端证书,那么如果客户的计算机被黑客入侵并且其客户端证书被盗,那么整个“非常安全”的事情就不会崩溃吗?
mbmast

18

HTTP Basic + HTTPS是一种常用方法。


3
我认为http摘要不会给您任何通过http basic提供的东西,如果它们都是通过https的话。
pc1oad1etter

3
欢迎您认真添加有关HTTP摘要的好处的有用信息。
pc1oad1etter 2014年

9

如果要在OAuth版本之间进行选择,请使用OAuth 2.0。

OAuth承载令牌应仅与安全传输一起使用。

OAuth承载令牌仅与对会话进行加密的传输一样安全或不安全。HTTPS可以防止重放攻击,因此,承载令牌也不必防御重放。

确实,如果有人拦截了您的承载令牌,他们可以在调用API时冒充您,但有很多方法可以减轻这种风险。如果您给令牌提供了较长的有效期,并希望客户将令牌存储在本地,那么与让令牌短暂到期相比,令牌被拦截和滥用的风险要大得多,这要求客户端为每个会话获取新令牌,并建议客户不要保留令牌。

如果您需要保护通过多个参与者的有效负载,那么您需要的不仅仅是HTTPS / SSL,因为HTTPS / SSL仅加密图形的一个链接。这不是OAuth的错。

承载令牌易于客户获得,易于客户端进行API调用,并且已广泛使用(与HTTPS一起)从Google,Facebook和许多其他服务中保护面向公众的API。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.