RESTful API安全性

时间:2014-01-30 10:30:12

标签: api security rest authentication

我想为我的Web应用程序开发RESTful API。客户端必须清楚JS + HTML,用户必须以某种方式在系统中进行身份验证。我读过很少关于安全性和RESTful API的文章,但有些观点对我来说仍然不清楚。正如我在第一步中所理解的,用户必须向服务器提供他的凭据。在该服务器必须验证用户凭证并且它们是否有效之后,将一些编码的令牌发送给用户(假设它将是[用户密钥]:[用户IP]:[令牌创建时间])。用户身份验证后,客户端必须在每次API调用时发送此密钥。这就是我理解RESTful API身份验证原则的方式。

通过这样的解决方案,我假设令牌可能被盗,而另一个用户可以访问安全的用户数据(即使包含IP来访问令牌,也会对每个请求进行验证)。为了这个目的,我计划包括令牌创建时间,但据我所知,这样的解决方案我每次到期时都必须更新访问令牌 - 在这种情况下,我不清楚如何实现“记住我”功能。

我不清楚如何为我的RESTful API实现100%安全身份验证。也许我错过了什么。或许我对身份验证原则的理解是错误的。

1 个答案:

答案 0 :(得分:2)

这取决于您使用的身份验证方案。例如,当使用基本身份验证处理ASP.NET MVC + REST时,它将为您生成令牌,该令牌实际上是Base64编码的字符串“{username}:{password}”。你是对的,它可能被盗,这就是为什么Basic Auth HTTPS必须,因为令牌将抛出身份验证标头与基本架构。

对于REST安全性,最合适和安全的是OpenId和OAuth。只是不要重新发明轮子并使用已有的标准。与OpenID相比,OAuth不仅包括身份验证,还包括授权。 OAuth已经描述了令牌续订和令牌创建时间等所有细微差别。

现在实用如何在REST中实现OAuth。首先阅读标准。对于您的案例,请注意Implicit Grant flow,因为标准对于具有不同信任级别和安全性的不同客户端具有多个流。

http://tools.ietf.org/html/rfc6749

之后,您可以在使用Java或.NET的技术堆栈中尝试一些已经实现的库。对于客户端,在比较中使用库并不是很重要,但对于服务器实现

关于此处的潜在安全问题http://tools.ietf.org/html/rfc6749#section-10

Some think that OAuth 2.0 is less secure that OAuth 1.0,它也依赖于令牌格式。无论如何,访问令牌应该在HTTP Header中通过HTTPS传递,并且clientid应该被安全地存储和传递。