在设计REST API或服务时,是否有处理安全性(身份验证、授权、身份管理)的最佳实践?

在构建SOAPAPI时,您可以将WS-Security作为指南,并且有许多关于该主题的文献。我发现关于保护REST端点的信息较少。

虽然我理解REST故意没有类似于WS-*的规范,但我希望已经出现了最佳实践或推荐的模式。

如有任何讨论或相关文件的链接,我们将不胜感激。如果重要的话,我们将使用WCF和POX/JSON序列化消息,用于使用.NET Framework v3.5构建的REST API/服务。


当前回答

SOAP世界被安全标准覆盖得很好,这并不意味着默认情况下它是安全的。首先,标准非常复杂。复杂性不是安全性的好朋友,实现漏洞(如XML签名包装攻击)在这里很常见。

至于.NET环境,我不会有太大帮助,但“用Java构建web服务”(一个有约10位作者的砖)确实帮助我理解了WS-*安全体系结构,尤其是它的怪癖。

其他回答

除了HTTP之外,没有其他REST标准。已经建立了REST服务。我建议你看一眼它们,感受一下它们是如何工作的。

例如,在开发自己的服务时,我们借鉴了亚马逊S3 REST服务的许多想法。但我们选择不使用基于请求签名的更高级的安全模型。更简单的方法是通过SSL进行HTTP基本身份验证。你必须决定什么最适合你的情况。

此外,我强烈推荐O'reilly的《RESTful Web Services》一书。它解释了核心概念,并提供了一些最佳实践。您通常可以使用他们提供的模型并将其映射到您自己的应用程序。

您可能还想看看OAuth,这是一种新兴的基于令牌的授权开放协议,专门针对http api。

它与flickr所采用的方法非常相似,并记住牛奶“rest”api(不一定是restful api的好例子,而是基于令牌的方法的好例子)。

REST本身没有提供安全标准,但OAuth和SAML等东西正在迅速成为这个领域的标准。然而,身份验证和授权只是您需要考虑的一小部分。与web应用程序相关的许多已知漏洞非常适用于REST API。你必须考虑输入验证、会话破解、不适当的错误消息、内部员工漏洞等等。这是一个很大的问题。

我使用了OAuth几次,也使用了一些其他方法(BASIC/DIGEST)。我衷心建议OAuth。以下链接是我见过的关于使用OAuth的最佳教程:

http://hueniverse.com/oauth/guide/

谢谢你的忠告。我们最终使用了一个定制的HTTP头将身份令牌从客户端传递给服务,为将RESTful API和微软即将推出的Zermatt identity框架集成做准备。我已经在这里描述了问题和我们的解决方案。我还采纳了tweet的建议,购买了RESTfulWebServices——如果你正在构建任何类型的RESTfulAPI,这是一本非常好的书。