c# - 保护匿名 Web API 请求的方法

标签 c# asp.net asp.net-mvc

我有一个 ASP.NET MVC(不是 ASP.NET Core)单页应用程序,前端带有 angular js

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

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

我正在寻找一种方法来单独保护我的 Web API 调用,尤其是 POST/PUT 请求。总之,我想阻止任何用户直接从 POSTMAN 或 Fiddler 调用我的 Web API。 Web API,尽管是匿名的,但只能从发起请求的浏览器 session 中调用。

  • 我有哪些选择可以实现这一点?

  • 我可以在此处使用防伪 token (无需身份验证)吗?

  • 我能想到的一种方法是为每个请求添加一个自定义 header ,并在 header 中存储某种 session key 。然后,验证我从客户端收到的每个请求的自定义 header 。是否有任何其他方法可以在不使用自定义解决方案的情况下实现这个开箱即用的或一些经过验证的库?

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

最佳答案

首先,当您删除登录并且您的应用程序中没有身份验证机制时,真的没有办法保护任何东西,因为任何人都可以访问您的 API。我认为您想要的是确保您的 API 仅从您自己的网站调用。不幸的是,您无法完全实现这一点,因为您的 Web API 是 http/https,任何人(例如 postman、fiddler 等)都可以创建 http 请求并调用您的 API。

您所能做的就是让您的 API 更难响应请求,就像您提到的使用防伪造一样。

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

最后我建议您使用 CORS,这样浏览器将只允许您的域调用您的 API。因此,没有人可以在来自不同域的浏览器中调用您的 API。

关于c# - 保护匿名 Web API 请求的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47935231/

相关文章:

c# - 什么是等同于在 Rhino Mocks 中使用 Ordered() 的 AAA 语法

c# - 当 MVC Core Controller 抛出异常时,如何在中间件中设置不丢弃的 HTTP 响应 header ?

c# - 母版页值中的下拉列表在新选择后未更新

c# - 在 api Controller 初始化之前设置参数

asp.net-mvc - 如何处理集合的每一行重复相同形式的 MVC 模型绑定(bind)前缀?

c# - 向 WPF 窗体添加和显示 FixedDocument

C# 在 linq 上检索 where 子句

asp.net - 在ASP.NET MVC 5 Controller 方法中调试多个线程

asp.net - 将 ASP.NET Core Razor 页面部署到 Azure 应用服务

asp.net - 对旧的 page.aspx 使用 MVC 路由?