3

我想在 www.MyDomain.com 创建一个 API,可以从公共网站 www.Customer1.com 和 www.Customer2.com 访问。这些公共网站显示每个客户的库存并且没有任何登录功能。他们将使用 AJAX 调用从我的 API 读取数据。

如何保护 API 以便可以从不同域通过 AJAX 访问它,但没有人可以访问 API 来抓取我所有的客户数据和他们的所有库存?

我曾尝试自己考虑不同的解决方案,但它们要么要求人们登录公共网站(这不是一个选项),要么需要在浏览器源代码中公开显示一些秘密“密钥”然后很容易被盗。

任何想法将不胜感激。

谢谢!

PS 我现在需要研究使用 Javascript 和 CORS 时会遇到的任何障碍吗?

4

3 回答 3

1

任何无需通过浏览器进行身份验证即可访问的内容根据定义是不安全的,因此您无法阻止它。您最好的选择是必须与和的所有者建立关系customer1.com-customer2.com这两个网站的服务器应用程序会向您发出 HTTP 调用并使用您的服务进行身份验证。采用这种方式还可以避免您正在谈论的 CORS 问题。

如果您已经设计了客户端功能,您仍然可以在不对 javascript 进行太多更改的情况下进行操作 - 让它指向customer1.com其 AJAX 调用而不是您的 API,并customer1.com接受此请求并充当您 API 的代理. 除了身份验证之外,其余的请求和响应可能只是传递给您的 API。

于 2013-09-03T15:51:05.887 回答
1

您可以使用 Microsoft.AspNet.WebApi.Cors。

webapi config在 ASP.NET WEB API 中使用 CORS只需要添加一行:

config.EnableCors("*","*","*");

详细查看此内容

于 2013-09-04T01:29:33.910 回答
0

在这里提供最低安全性的最简单方法是提供某种令牌系统。每个应用程序都有自己的令牌或令牌组合,它必须传递给服务器以进行验证。您如何生成此令牌取决于您,除了与应用程序的访问相关联之外,没有任何意义。

为每个 API 实施者提供一种向您开户的方式。通过这种方式,您将知道谁在访问什么,并且在某些情况下您可以阻止/停止服务。

例如,一个令牌可以只是一个 MD5 哈希:

7f138a09169b250e9dcb378140907378

在数据库中,此哈希链接到他们的帐户。在每个请求中,他们都会发送带有所需内容的令牌。首先验证它是否有效,然后再填充请求。如果令牌无效,那么您可以决定如何处理它。要么不返回任何东西,要么返回“拒绝访问”(或任何你想要的东西)。

要避免的一件事是为每个人提供一个令牌,尽管这可以作为一个起点。这样做的原因是,如果一些未经授权的应用程序获得了这个令牌并利用它,你必须为每个人更改令牌,而不仅仅是以某种方式泄露令牌的应用程序。您也无法控制某人是否可以访问某些内容。

由于您列出了 ASP.NET,我还可以向您指出 WCF,它相当复杂,但具有设置综合 Web 服务为您和您的客户提供服务所需的所有工具。

我希望这能给你一个起点!

编辑:

如果有人以某种方式泄露了他们的令牌密钥,这里就会存在安全问题。确保您设置了一种方式,使应用程序/您的服务无论如何都不会公开令牌。如果发生令牌被利用的情况,还可以通过您的客户在您的客户中灵活地阻止令牌。

于 2013-09-03T16:10:29.397 回答