如何使用跨域AJAX调用保护ASP.NET Web API的安全

How to Secure ASP.NET Web API with Cross Domain AJAX Calls?

本文关键字:Web NET API 安全 ASP 保护 何使用 AJAX 调用      更新时间:2023-09-26

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

我如何确保API的安全,使其可以通过AJAX从不同的域访问,但没有人可以访问API来抓取我的所有客户数据和所有库存?

我曾尝试过自己思考不同的解决方案,但它们要么要求人们登录公共网站(这不是一种选择),要么要求在浏览器源代码中公开显示一些秘密"密钥",这些密钥很容易被窃取。

任何想法都将不胜感激。

谢谢!

附言:我在使用Javascript&我现在需要调查的CORS?

根据定义,任何在没有浏览器身份验证的情况下可以访问的东西都是不安全的,所以你无法阻止这种情况。你最好的选择是与customer1.comcustomer2.com的所有者建立关系——这两个网站的服务器应用程序会向你发出HTTP调用,并通过你的服务进行身份验证。这样做也可以避免你所说的CORS问题。

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

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

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

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

查看此以获取详细信息。

在这里提供最低安全性的最简单方法是提供某种令牌系统。每个应用程序都有自己的令牌,或者令牌的组合,必须将其传递给服务器进行验证。你如何生成这些代币取决于你,除了链接到应用程序的访问之外,并不意味着什么。

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

例如,令牌可以只是MD5散列:

7f138a09169b250e9dcb378140907378

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

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

既然您列出了ASP.NET,我还可以向您介绍WCF,它相当复杂,但具有设置一个全面的web服务以为您和您的客户端提供服务所需的所有工具。

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

编辑:

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