未经授权或用户登录即可保护web api 2

时间:2015-04-09 10:20:20

标签: c# security azure asp.net-mvc-5 asp.net-web-api2

我到处寻找关于保护我的webApi的答案,但我始终指向OAuth或openID,但我不希望用户登录或验证。这是我的问题:

我有一个通过Javascript调用的webapi来获取Json中的数据。该数据用于该页面的Html。 (部署在Azure上)

现在我不希望别人通过Javascript或简单的GET请求获取该数据。只允许我的html页面这样做。

我正在寻找能够保护我的Webapi只能被我想要的应用程序使用的东西。如果我查看OAuth和Azure的东西,人们总是要登录,但我希望这个页面是公开的,但只有webapi需要是安全的。

我无法检查IP,因为呼叫是在浏览器的客户端完成的。

3 个答案:

答案 0 :(得分:1)

无法进行身份验证,因此无法保护特定客户端(完全在浏览器中运行,如SPA)运行的API。您无法保护应用发送到API的数据。 (有关更多详细信息,请参见Protecting REST API behind SPA against data thiefs

如果您不想引入用户和最终用户身份验证,则可以在服务器端构建一些模块,然后使用一些基于令牌的服务器与服务器进行通信。

当然,这也是您如何解释安全性的问题。

  • 如果只是您不希望其他Web应用程序使用数据- CORS政策将胜任。不太可能会有更多 而不是用户使用浏览器以外的其他一些孤立案例 曾经很受CORS欢迎。
  • 如果不希望大量下载数据,则可以 实现一些基于IP的客户端过滤。甚至可以做到 在网络层上,因此无需在任何情况下修改API 方式。

答案 1 :(得分:0)

作为建议,您可以确保请求具有您定义的某些标头。例如,您可以使用只有您知道的令牌设置Authorization标头。例如,您可以根据您和webapi共享的密钥创建令牌,并在调用api时对其进行加密。 web api收到请求并且:

1 - 检查请求是否具有所需的令牌;

2 - 如果有,它会以与页面相同的方式创建令牌;

3 - 将其令牌与请求令牌匹配;

如果您通过javascript调用webapi,则可能会暴露该方法。但是,这是一个想法

答案 2 :(得分:0)

看看CORS(跨源资源共享),它可能是您的解决方案。
在综合中,您可以仅允许来自某些特定网站的Api请求。大多数,几乎所有浏览器都支持它。

这是您在Web Api 2中启用和配置它的方法。