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

Per*_*ddy 4 c# rest asp.net-mvc asp.net-mvc-4 asp.net-web-api

我已经创建了一个新的Web Api MVC4项目,并使用API​​控制器构建了一个RESTful API,然后我使用常规的MVC控制器来使用HMTL5/KnockoutJS/JS渲染视图.

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

        this.Post = function (entity) {

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

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

Chr*_*att 5

处理为应用程序创建私有内容的最佳方法是始终在网络级别处理它.甚至不要将Web API暴露给外部世界.将它放在DMZ后面并在防火墙上打一个洞,专门面向面向用户的应用程序.然后,没有其他任何东西能够触摸它.

编辑

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

但是,如果客户端需要提供所有内容,则必须公开Web API.此时,身份验证是您唯一的选择,但保护客户端几乎不可能(您必须存储身份验证令牌或方法来验证客户端,以及允许任何想要查看的人在你的代码中模仿你所做的事情).

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