仅允许来自SPA的api请求

时间:2020-03-28 13:03:06

标签: angular security asp.net-core

我正在使用ASP.NET Core和angular 8(托管在一起)构建一个网页。我只想允许来自SPA的API请求。

在这一点上,我认为要创建某种只有前端和后端应用程序才知道的哈希规则。对于每个请求,我都会计算哈希并将其放在请求的标头中。收到请求后,我将再次计算哈希并将其与标头中提供的哈希进行比较。如果它们匹配,那就可以了。

我对它的安全性感兴趣,并且有什么方法可以破解它。

我对angular并不陌生,我也对是否有可能(在生产模式下)(由应用程序用户)编写某种js代码感兴趣,这将调用我的“发送请求”方法(即不是点击按钮)。

编辑:

我在我的应用程序中使用基于标准jwt令牌的身份验证,因此如果用户未经身份验证,则无法访问api资源。我想要实现的是,经过身份验证的应用程序用户(开发人员)不应能够从其他来源发出请求,例如邮递员,C#代码,浏览器控制台。

我有一些“有价值的”数据,我希望仅在我的网页上可见。我想消除窃取事实。

2 个答案:

答案 0 :(得分:3)

没有真正安全的解决方案可以满足您的要求。原因如下:

  • JavaScript代码始终可读。每个用户都可以读取和调试SPA以及添加的用于保护请求的任何逻辑,开发人员可以在自己的应用程序中查看和重新实现。您可以尝试让他们的生活更艰难...仅此而已。

  • 那是说:您不能在代码中包含秘密。如果开发人员调试您的代码,则在运行时加载的秘密将可见。

  • 您的服务器看不到客户端应用程序是什么,因为本机应用程序将使用任何http标头,并且看起来完全像浏览器。

为此,通常的“解决方案”是限制和阻止来自IP的请求数量,前提是假定交互式使用中通常请求的数据量很少。


让生活更加艰辛的一种简单方法可能是切换到websockets(signalR)而不是使用HTTP请求-假设标准搜寻器仅限于http。

答案 1 :(得分:0)

假设您的Angular SPA将使用链接:http://localhost:4200

在您的Web Api项目的Startup.cs(配置void方法)中添加app.UseCors

        app.UseCors(
            options => options.WithOrigins("http://localhost:4200").AllowAnyMethod().AllowAnyHeader()
            ); ;

方法是

public void Configure(IApplicationBuilder app, IWebHostEnvironment env