21

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

谢谢

更新:对不起,忘了提——没有使用 SSL。基本上我在这里寻找一些算法/策略的想法。感谢您的建议!

4

3 回答 3

5

这里的一般想法是,您将使用 HTTPS,客户端配置为使用 API 提供者通过其他一些安全方法颁发给他们的 X.509 证书来签署他们的请求。服务器也将拥有此证书(或者更好的是客户端证书是其子证书的证书),并且可以验证传入请求是否已使用它进行签名。这是服务器到服务器通信的标准。如果您正在构建一个供最终用户在本地运行的应用程序,则它不起作用,因为坏人可以轻松地从客户端应用程序中提取此证书并破坏整个方案

有很多关于如何配置它的技术特定文章,你还没有指定你正在使用什么堆栈,但这里有一篇通用文章只是为了证明我没有编造这些东西 :) http://www。 ibm.com/developerworks/lotus/library/ls-SSL_client_authentication/

于 2012-07-03T04:05:40.347 回答
2

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

您还记得哈希可以用来保证完整性吗?例如,如果您对请求进行哈希处理,并且服务器接收到请求并提取哈希,服务器将对请求进行哈希处理并比较请求,服务器和客户端。如果它们匹配,您可以确定请求在转换中没有被修改。如果您有一个私有值(没有人应该知道它!),比如说“hiworld”(这些值实际上是 guid 或随机值)并且您使用该值作为散列参数,您将获得一个特殊的散列值。如果您使用哈希特殊值发送请求,并且服务器(知道私有值)使用该特殊值对请求进行哈希处理,并且两个哈希都匹配,则服务器可以确定请求没有被篡改,并且您是谁送的。

于 2017-02-06T05:47:25.697 回答
0

您应该查看 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)。

于 2012-07-03T04:02:43.480 回答