无需登录/密码即可“保护”API的最佳做法

时间:2012-07-03 03:57:56

标签: api rest mobile backend

我有一个客户端应用程序,可以用一些UID识别。 我有一个后端服务,客户端应用程序需要调用它来检索一些列表。 获得此后端服务的最佳做法是什么?我不希望通过登录/密码进行保护(因为客户端不应该被要求“登录”以检索列表),但是,我不希望任何人轻易地调用此后端API并为自己的目的检索这些列表。 将客户端视为自定义Flash客户端或移动客户端等。 通信是通过HTTP REST进行的。 有什么想法吗?

由于

更新:抱歉,忘记提及 - 不使用SSL。基本上我在这里寻找一些算法/策略的想法。感谢您的建议!

3 个答案:

答案 0 :(得分:2)

这里的一般想法是,您将使用HTTPS配置为使用API​​提供程序通过其他安全方法向其发出的X.509证书来签署其请求的客户端。服务器将拥有此证书(或者更好的是客户端证书所属的证书)并且可以验证使用它来签署命令请求。这是服务器到服务器通信的标准。如果您为最终用户构建一个应用程序以在本地运行,它不起作用,因为坏人可以轻松地从客户端应用程序中提取此证书并击败整个方案

有很多关于如何配置这一技术的特定于技术的文章,你还没有指定你正在使用的堆栈,但这里只是为了证明我没有制作这些东西的通用文章:) {{3 }}

答案 1 :(得分:1)

您应该查看OAuth以获取授权,并且连接应始终为HTTPS,因此无法轻易地嗅探数据包。

在没有身份验证的情况下使用它是非常不安全的,因为任何人都可以尝试模拟有效的客户端。连接HTTPS只会减慢黑客的速度。

请参阅:

http://oauth.net

http://en.wikipedia.org/wiki/OAuth

http://library.edgecase.com/securing-apis-using-rack-middleware(适用于Rails / Rack)

http://developers.sun.com/identity/reference/techart/restwebservices.html

http://www.slideshare.net/mohangk/securing-your-web-api-with-oauth

这也可能很有趣:(没有OAuth)

http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/

答案 2 :(得分:0)

您好我认为您可以看看这篇文章,它使用了hmac身份验证。 http://bitoftech.net/2014/12/15/secure-asp-net-web-api-using-api-key-authentication-hmac-authentication/

您是否记得哈希可用于保证完整性?例如,如果您对请求进行哈希处理,并且服务器收到请求和哈希数据挖掘,则服务器将对请求进行哈希处理并比较请求,服务器和客户端。如果匹配,则可以确保在转换中未修改请求。 如果你有一个私有值(没有人应该知道它!),让我们说,“hiworld”(值实际上是guids或随机值)并且你使用该值作为哈希的参数,你会得到一个特殊的哈希值。 如果您沿着散列特殊值发送请求,并且服务器(知道私有值)使用该特殊值散列请求,并且两个散列数据都匹配,则服务器可以确保请求未被篡改,并且您谁发送它。