0

我目前正在我的 mvc4 应用程序中实现 web api,并且对验证 web api 服务的调用者有疑问。

在我的 web 应用程序中,web api 将用于 2 个不同的原因。首先,我的 javascript 与服务器通信,其次是第三方组件与我的应用程序通信。

因此,我想对服务的调用者进行身份验证。在标头中为任一呼叫者传递用户名和密码是直截了当的,但标头可以被非法人员嗅探。如果我将服务设为 https,这将防止这种情况发生,但它会导致我的 js 在富应用程序中调用它时出现性能问题。

我已经查看了网络上的示例,但目前还没有找到涵盖 mt 场景并保护我的服务的解决方案。我有兴趣听到有关如何解决此问题的建议?例如,现有公司如何保护他们的服务,例如 twitter。我想保护我的服务、允许的第三方和我的 javascript。请教育我!

4

1 回答 1

0

一种方法是使用数字签名。客户端计算请求数据(POST 或 GET 参数)的哈希值并使用密钥对哈希值进行签名,并将签名放入请求标头中。然后服务器验证签名的哈希。

为了防止重放攻击,您可能希望每个请求都包含一个永远不能重复使用的随机数值。这通常被实现为一个不断增加的整数值(例如时间戳),其中服务器存储给定键的最后使用值并拒绝允许数字低于最后使用值的请求。

有两种常见的方法来实现这一点,一种是使用 HMAC 签名,其中客户端和服务器共享一个用于签署请求的公共“秘密”(密钥)。这很简单,但需要您将秘密存储在服务器上(并适当地保护它们)。

第二种方法是使用非对称密钥(例如 RSA),客户端使用他们的私钥对请求进行签名,然后您使用他们的公钥验证签名。这稍微复杂一些,但不需要您在服务器上存储和保护私钥 - 只有客户端需要。

于 2012-10-18T13:34:43.440 回答