保护REST API / Web服务的最佳实践
在设计REST API或服务时,是否存在处理安全性(身份验证,授权,身份管理)的最佳实践?
在构建SOAP API时,您可以使用WS-Security作为指导,有关该主题的文献很多。 我找到了有关保护REST端点的更少信息。
尽管我了解REST故意没有类似于WS- *的规范,但我希望最佳实践或推荐模式已经出现。
任何有关文件的讨论或链接将非常感激。 如果它很重要,我们将使用WCF和POX / JSON序列化消息来构建使用.NET Framework v3.5构建的REST API / Services。
正如tweakt所说,Amazon S3是一个很好的合作模式。 他们的请求签名确实具有某些功能(如合并时间戳),有助于防止意外和恶意请求重播。
HTTP Basic的好处在于几乎所有的HTTP库都支持它。 当然,在这种情况下,您需要SSL,因为通过网络发送明文密码几乎普遍是一件坏事。 使用SSL时,基本优于摘要,因为即使调用者已经知道需要凭证,摘要也需要额外的往返来交换随机数值。 使用Basic,呼叫者只需首次发送凭证。
一旦建立了客户的身份,授权实际上只是一个实现问题。 但是,您可以使用现有授权模型将授权委托给其他组件。 再次,关于Basic的好处在于您的服务器以客户密码的纯文本副本结束,您可以根据需要简单地将其传递到基础结构中的其他组件。
除HTTP以外,没有REST标准。 在那里建立了REST服务。 我建议你先看看他们,并了解他们的工作方式。
例如,我们在开发自己的产品时从亚马逊的S3 REST服务中借鉴了很多想法。 但我们选择不使用基于请求签名的更高级的安全模型。 更简单的方法是通过SSL的HTTP基本身份验证。 你必须决定什么在你的情况下效果最好。
另外,我强烈推荐O'reilly的RESTful Web服务。 它解释了核心概念并确实提供了一些最佳实践。 您通常可以采用他们提供的模型并将其映射到您自己的应用程序。
您可能还想看看OAuth,一种新兴的开放协议,用于基于令牌的授权,专门针对http apis。
这与flickr采取的方法非常相似,并记住牛奶“休息”apis(不一定是宁静apis的好例子,但是基于令牌的方法的好例子)。
链接地址: http://www.djcxy.com/p/1927.html