保护匿名Web API请求的方法

Ank*_*jay 15 c# asp.net asp.net-mvc

我有一个ASP.NET MVC(非ASP.NET核心)单页面应用程序,前端有角度js.

我的客户端(浏览器)通过ASP.NET Web API与服务器通信.现在,Web应用程序是https匿名.没有登录/用户身份验证.

Web应用程序采用向导的形式,用户可以来回移动并在网页上添加或更新输入字段.然后,通过Web API在服务器上更新表单输入值.

我正在寻找一种方法来保护我的Web API调用,尤其是POST/PUT请求.总之,我想阻止任何用户直接从POSTMAN或Fiddler调用我的Web API.Web API虽然是匿名的,但只能从发出请求的浏览器会话中调用.

  • 我有什么选择来实现这一目标?

  • 我可以在这里使用Anti-Forgery令牌(无需身份验证)吗?

  • 一种方法,我可以想到实现这一点是为每个请求添加一个自定义标头,并在标头中存储某种会话密钥.然后,在我从客户端收到的每个请求上验证自定义标头.有没有其他方法可以实现这个开箱即用或一些经过验证的库而无需自定义解决方案?

  • 如果我必须采用上述自定义解决方案,我需要注意哪些陷阱或潜在问题?

Kah*_*azi 6

首先,当您删除登录并且您的应用程序中没有任何身份验证机制时,实际上无法保护任何内容,因为任何人都可以访问您的API.我想你想要的是确保你的API只能从你自己的网站上调用.遗憾的是,您无法完全实现这一点,因为您的Web API是http/https,任何人(如邮递员,小提琴手......)都可以创建http请求并调用您的API.

您所能做的就是让API更难以响应请求,例如您提到的使用Anti-Forgery.

此外,我建议您为您的应用程序添加一个cookie,并在每个请求中检查该cookie,在这种情况下,使用Fiddler或Postman调用您的API会更复杂(并非不可能).

最后我建议您使用CORS,因此浏览器只允许您的域名调用您的API.因此,没有人可以在不同域的浏览器中调用您的API.