在设计REST API或服务时,是否有处理安全性(身份验证、授权、身份管理)的最佳实践?
在构建SOAP API时,您可以使用WS-Security作为指南,并且有许多关于该主题的文献。我发现有关保护REST端点的信息较少。
虽然我理解REST有意没有类似于WS-*的规范,但我希望出现最佳实践或推荐的模式。
任何讨论或相关文档的链接都将不胜感激。如果这很重要,我们将使用带有POX/JSON序列化消息的WCF用于我们的REST API/服务,这些消息是使用.NET框架的v3.5构建的。
发布于 2008-08-11 08:45:13
正如特威尔特所说,亚马逊S3是一个很好的合作模式。他们的请求签名确实有一些功能(例如合并时间戳),可以帮助防止意外和恶意的请求重放。
HTTP Basic的好处是几乎所有的HTTP库都支持它。当然,在这种情况下,您需要使用SSL,因为通过网络发送明文密码几乎是一件坏事。使用SSL时,Basic比Digest更可取,因为即使调用者已经知道需要凭据,Digest也需要额外的往返来交换nonce值。对于Basic,调用者只需在第一次发送凭据。
一旦建立了客户端的身份,授权实际上只是一个实现问题。但是,您可以将授权委托给具有现有授权模型的其他组件。同样,Basic在这里的好处是,您的服务器最终获得了客户端密码的明文副本,您可以根据需要简单地将其传递给基础架构中的另一个组件。
发布于 2008-08-11 06:07:04
除了HTTP之外,没有其他的REST标准。现在已经有成熟的REST服务了。我建议您看一看它们,了解一下它们是如何工作的。
例如,我们在开发自己的S3 REST服务时,借鉴了亚马逊的很多想法。但我们选择不使用基于请求签名的更高级的安全模型。更简单的方法是基于SSL的HTTP基本身份验证。你必须决定什么最适合你的情况。
另外,我强烈推荐O‘’reilly的RESTful Web Services这本书。它解释了核心概念,并提供了一些最佳实践。您通常可以采用他们提供的模型,并将其映射到您自己的应用程序。
发布于 2008-09-18 02:55:07
您可能还想了解一下OAuth,它是一种新兴的开放协议,用于基于令牌的授权,专门针对http。
它与flickr和remember the milk "rest“apis所采用的方法非常相似(不一定是restful apis的好例子,但却是基于令牌的方法的好例子)。
https://stackoverflow.com/questions/7551
复制相似问题