我正在用ASP.NET Core和angular 8(一起托管(构建一个网页。我想只允许从SPA请求到我的API。
在这一点上,我认为应该创建某种只有前端和后端应用程序知道的哈希规则。对于每个请求,我都会计算散列并将其放入请求的头部。收到请求后,我将再次计算哈希,并将其与标头中提供的哈希进行比较。如果他们匹配,那没关系。
我感兴趣的是它有多安全,有没有办法破解它。
我是angular的新手,我也很感兴趣(在生产模式下(是否有可能(由应用程序用户(编写某种js代码,这将调用我的"发送请求"方法(即不通过点击按钮(。
编辑:
我在我的应用程序中使用标准的基于jwt令牌的身份验证,所以如果用户没有经过身份验证,就不可能访问api资源。我想要实现的是,经过身份验证的应用程序用户(开发人员(不应该能够从其他来源发出请求,例如邮递员、C#代码、浏览器控制台。
我有一些"有价值"的数据,我希望它只在我的网页上可见。我想消除盗用事实的行为。。
没有真正安全的解决方案来满足您的需求。原因:
-
JavaScript代码始终可读。每个用户都可以读取和调试您的SPA以及您为保护请求而添加的任何逻辑,开发人员可以在自己的应用程序中查看并重新实现。你可以试着让他们的生活更艰难。。。仅此而已。
-
也就是说:你不能在你的代码中包含秘密。如果开发人员调试您的代码,则在运行时加载的机密将可见。
-
您的服务器无法查看客户端应用程序,因为本机应用程序将使用任何http标头,并且看起来与浏览器完全相同。
常见的"解决方案"是,假设交互使用中通常请求的数据量较低,则通过IP请求的数量来限制和阻止。
让生活变得更艰难的一个简单方法可能是切换到websocket(signalR(而不是http请求——假设标准爬网程序仅限于http。
假设您的Angular SPA将使用链接:http://localhost:4200
在你的Web Api项目的Startup.cs(配置无效方法(添加应用程序。UseCors
app.UseCors(
options => options.WithOrigins("http://localhost:4200").AllowAnyMethod().AllowAnyHeader()
); ;
方法为
public void Configure(IApplicationBuilder app, IWebHostEnvironment env