我正在使用ASP.NET Core和angular 8(托管在一起)构建一个网页。我只想允许来自SPA的API请求。
在这一点上,我认为要创建某种只有前端和后端应用程序才知道的哈希规则。对于每个请求,我都会计算哈希并将其放在请求的标头中。收到请求后,我将再次计算哈希并将其与标头中提供的哈希进行比较。如果它们匹配,那就可以了。
我对它的安全性感兴趣,并且有什么方法可以破解它。
我对angular并不陌生,我也对是否有可能(在生产模式下)(由应用程序用户)编写某种js代码感兴趣,这将调用我的“发送请求”方法(即不是点击按钮)。
编辑:
我在我的应用程序中使用基于标准jwt令牌的身份验证,因此如果用户未经身份验证,则无法访问api资源。我想要实现的是,经过身份验证的应用程序用户(开发人员)不应能够从其他来源发出请求,例如邮递员,C#代码,浏览器控制台。
我有一些“有价值的”数据,我希望仅在我的网页上可见。我想消除窃取事实。
答案 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