如何保护RESTful Web服务?

我必须实现安全的RESTful Web服务。 我已经使用谷歌做了一些研究,但是我被卡住了。

选项:

TLS(HTTPS)+

  • HTTP基本(pc1oad1etter)
  • HTTP摘要
  • 双腿OAuth
  • 基于Cookie的方法
  • 客户端证书(Tom Ritter和这里)
  • 使用HMAC签署的请求和有限的生命周期
  • 是否有更多可能的选择需要考虑? 如果OAuth那么是什么版本? 它甚至重要吗? 从迄今为止我读到的OAuth 2.0与无记名代币(没有签名)似乎是不安全的。

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

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


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

    如果需要,您可以将证书客户端证书的公钥(以及他们的签名者证书(如有必要))加载到您的Web服务器中,并且Web服务器不会接受除具有相应证书私钥的人员之外的任何人的连接它知道。 它在HTTPS层上运行,因此您甚至可以完全跳过应用程序级别的认证,如OAuth(取决于您的要求)。 您可以将图层抽象出来并创建本地证书颁发机构,并从客户端签署证书请求,从而允许您跳过“让他们进入办公室”和“将证书加载到服务器”的步骤。

    疼痛脖子? 绝对。 对一切都好? 不。 非常安全? 对。

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

    无论如何,这可能不是你要找的解决方案(它可能不是诚实的),但它是另一种选择。


    HTTP基本+ HTTPS是一种常用方法。


    如果选择OAuth版本,请使用OAuth 2.0。

    OAuth承载令牌只能与安全传输一起使用。

    OAuth承载令牌与加密会话的传输一样安全或不安全。 HTTPS负责防范重播攻击,因此无记名令牌不必防止重播。

    虽然确实如果有人拦截你的不记名标记,他们可以在调用API时模仿你,但有很多方法可以减轻这种风险。 如果您给予代币很长的到期期限并期望您的客户将代币存储在本地,那么与令牌短期到期相比,您的代币被拦截和滥用的风险更大,要求客户为每次会话获取新代币,并建议客户不要坚持代币。

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

    承载令牌易于客户获取,客户可以轻松使用API​​调用,并广泛使用(使用HTTPS)以保护来自Google,Facebook和其他许多服务的面向公众的API。

    链接地址: http://www.djcxy.com/p/21957.html

    上一篇: How to secure RESTful web services?

    下一篇: How do I implement login in a RESTful web service?