- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
WebAPI 的一个常见用例是让 MVC Controller 呈现 shell View ,其中包含 javascript,然后点击您的 API 来访问数据。
但是假设您有一些昂贵的 API 操作,并且您不希望人们远程访问这些端点——您只希望您的应用程序提供的 MVC View 能够访问它们。你怎么能去保护他们?
在这种情况下 Request.IsLocal
不起作用,因为 javascript 正在从他们机器上的客户端浏览器调用它。即使它确实有效,您也需要挖掘才能获得真正的HttpContext
为了找到这个属性——并且该解决方案在自托管的 WebAPI 中不起作用。
对于需要有效 IPrincipal
的 API 端点,您可以使用 [Authorize]
保护它们属性。但是,您希望您的应用程序能够为匿名用户访问的 API 端点呢?
我已经尝试了一个解决方案,并将其作为答案单独发布,因为我不确定它是否是最好的(甚至是好的)方法。
最佳答案
如果您的 MVC 站点使用身份验证,您可以为您的 Web API 方法启用表单例份验证。你可以写一个自定义 [Authorize]
该属性将检查表单例份验证 cookie 是否存在,该 cookie 将从 AJAX 调用发送,如果存在,则构造主体。
另一种可能的解决方案是使用 tokens
保护您的 API。这是一种更 RESTful 的风格。这里的想法是,当用户在您的 MVC 网站上进行身份验证时,您可以生成一个 token 并将其传递给 View ,该 View 将在将 AJAX 请求发送到 Web API 时使用,而 Web API 反过来将验证 token 的有效性及其签名。
另一方面,如果您的站点不使用身份验证,那么事情会变得非常复杂,因为您无法知道请求是否来自受信任的客户端,因为您正在使用 JavaScript 来调用您的 API 方法。
关于asp.net-mvc - 如何使 Web API 操作只能从我的应用程序访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15366436/
有一条(相对)众所周知的 Perl 公理:“只有 Perl 可以解析 Perl”。我想知道 Perl 6 是否仍然如此? 扩大讨论...考虑到 PyPy 最近的更新,我想到了这个问题。 Perl 独特
这是设置。在上一个问题中,我发现我可以通过子组件中的状态传递对象属性,然后使用 componentDidUpdate 获取该对象属性。在这种情况下,状态和属性都称为到达。 这是基本代码... expo
我运行的是 10.5.2 社区版。我已经标记了 源/主要/资源 作为源目录。我可以右键单击并“编译”某些文件,据我所知,这意味着 IDE 将文件复制到与发送类文件的“com.mydomain.pack
我是一名优秀的程序员,十分优秀!