如何使.NET Web Api仅对我的应用程序专用

本文关键字:我的 应用程序 专用 Api 何使 NET Web | 更新日期: 2023-09-27 18:21:51

我创建了一个新的WebApiMVC4项目,并使用Api控制器构建了一个RESTful Api,然后我使用常规MVC控制器使用HMTL5/KnockoutJS/JS渲染视图。

视图通过RESTApi与应用程序交互(baseUrl属性指向给定实体的正确REST端点):

        this.Post = function (entity) {
            return $.ajax(baseUrl, {
                type: 'post',
                data: ko.toJSON(entity),
                contentType: 'application/json',
                dataType: 'json'
            });
        };

现在,我如何才能让它只有我的应用程序可以使用(或查看)我的RESTful API?

如何使.NET Web Api仅对我的应用程序专用

处理使应用程序私有化的最佳方法始终是在网络级别处理它。甚至不要对外公开Web API。把它放在DMZ后面,专门为面向用户的应用程序在防火墙上打一个洞。然后,其他任何东西都无法触摸它。

编辑

抱歉,我没有注意到你是通过AJAX访问它的,所以我的建议在技术上不起作用。然而,如果您只需要对少数端点进行客户端访问,那么这种方法仍然有一些优点。您可以在应用程序中设置仅将请求代理到专用API端点的操作,然后为AJAX而不是直接为Web API调用用户界面应用程序上的操作。

但是,如果所有内容都需要在客户端可用,则必须公开Web API。在这一点上,身份验证是您唯一的选择,但保护客户端几乎是不可能的(您还必须存储身份验证令牌或方法来对客户端进行身份验证,这样任何想查看您的代码的人都可以模仿您所做的操作)。

通常,如果代码是公共的(无需身份验证即可使用),那么您只想公开非原子端点(GET请求和其他实际上不会更改任何数据的东西)。一旦用户通过面向用户的应用程序进行了身份验证,就可以公开原子端点,但应该仅限于他们应该有权更改的内容。您还应该只使用他们的凭据来验证Web API,而不是应用程序的某个全局凭据集。这样,你就可以在Web API级别控制他们的访问,并拒绝对他们不应该访问的内容进行更改的请求。任何更全局的内容都应该只通过你的Web应用程序,代理到一个真正私有的Web API,正如我在回答中首先描述的那样。

是的,你可以!

使用消息处理程序或OWIn中间件检查请求Url,如果它们来自您的域,则允许调用通过。否则,忽略它。

将Authorize属性与角色一起使用。

[Authorize(Roles = "Admin")]
public  class MyPrivateDataController :ApiController