gpt4 book ai didi

asp.net-mvc - 如何使 Web API 操作只能从我的应用程序访问?

转载 作者:行者123 更新时间:2023-12-04 01:11:33 27 4
gpt4 key购买 nike

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com