加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-15 19:03:30 所属栏目:asp.Net 来源:网络整理
导读:WebAPI的常见用例将是由MVC控制器呈现的视图,其中包含 JavaScript,然后打开您的API来访问数据. 但是假设您有一些昂贵的API操作,并且您不希望人们远程访问这些端点 – 您只希望应用程序提供的MVC视图来访问它们.你怎么去保护他们? 在这种情况下,Request.IsLo
WebAPI的常见用例将是由MVC控制器呈现的视图,其中包含 JavaScript,然后打开您的API来访问数据.

但是假设您有一些昂贵的API操作,并且您不希望人们远程访问这些端点 – 您只希望应用程序提供的MVC视图来访问它们.你怎么去保护他们?

在这种情况下,Request.IsLocal不起作用,因为javascript正在其机器上的客户端浏览器中调用它.即使它工作,你需要挖掘来获得真正的HttpContext,以便找到这个属性 – 而且这个解决方案将不能在自我托管的WebAPI中运行.

对于需要有效IPrincipal的API端点,您可以使用[Authorize]属性来保护它们.但是,您希望您的应用程序能够访问匿名用户的API端点呢?

我已经尝试了一个解决方案,并将其作为答案分开发布,因为我不知道它是否是最好的(甚至是好的)方法.

解决方法

如果您的MVC站点使用身份验证,则可以为Web API方法启用表单身份验证.您可以编写一个自定义[Authorize]属性,该属性将检查是否存在将从AJAX调用发送的表单验证cookie,如果存在则构造主体.

另一个可能的解决方案是使用更加REST风格的tokens来保护您的API.这里的想法是,当用户在您的MVC网站上进行身份验证时,您可以生成并将一个令牌传递给将AJAX请求发送到Web API时将使用的视图,该API将会验证令牌及其签名的有效性.

另一方面,如果您的网站不使用身份验证,则会因为您使用JavaScript调用API方法而无法知道请求是否来自受信任的客户端,所以会变得非常复杂.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读