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

C# 如何使.NET Web Api仅对我的应用程序专用,c#,asp.net-mvc,asp.net-mvc-4,rest,asp.net-web-api,C#,Asp.net Mvc,Asp.net Mvc 4,Rest,Asp.net Web Api,我创建了一个新的Web Api MVC4项目,并使用Api控制器构建了一个RESTful Api,然后使用常规MVC控制器使用HMTL5/KnockoutJS/JS呈现视图 视图通过REST Api与应用程序交互(baseUrl属性指向给定实体的适当REST端点): 现在,我怎样才能使它只有我的应用程序才能使用(或查看)我的RESTful API呢?使应用程序私有化的最好方法是始终在网络级别处理它。甚至不要向外界公开Web API。把它放在DMZ的后面,在防火墙上打一个洞,专门针对面向用户的应用

我创建了一个新的Web Api MVC4项目,并使用Api控制器构建了一个RESTful Api,然后使用常规MVC控制器使用HMTL5/KnockoutJS/JS呈现视图

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


现在,我怎样才能使它只有我的应用程序才能使用(或查看)我的RESTful API呢?

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

编辑

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

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

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

是的,您可以


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

身份验证和/或授权。您当前如何授权请求?用户是否需要登录?您是否管理这些用户的权限?您不能真正将其设置为“应用程序专用”,但可以拒绝未经授权的请求。不幸的是,这不适用于AJAX调用,因为请求将来自客户端而不是应用程序。如果只有web应用程序与web API进行通信,这将是可行的,但是,您仍然希望在网络级别而不是应用程序级别进行控制。您的应用程序不应该负责防火墙的工作。
        this.Post = function (entity) {

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