我创建了一个新的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'
});
};
现在,我怎样才能使我的应用只能使用(或查看)我的RESTful API?
答案 0 :(得分:5)
处理为应用程序设置私有内容的最佳方法是始终在网络级别处理它。甚至不要将Web API暴露给外界。将它放在DMZ后面,在防火墙上打一个洞,专门面向面向用户的应用程序。然后,没有其他任何东西可以触摸它。
修改强>
抱歉,我没有注意到你通过AJAX访问它的事实,所以我建议的技术上不会工作。但是,如果您只需要少数端点的客户端访问,那么这种方法仍然有一些优点。您可以在应用程序中设置仅将请求代理到专用API端点的操作,然后在面向用户的AJAX应用程序上调用操作,而不是直接调用Web API。
但是,如果客户端需要提供所有内容,则必须公开Web API。此时,身份验证是您唯一的选择,但保护客户端几乎不可能(您必须存储身份验证令牌或方法来验证客户端,以及允许任何想要访问的人查看您的代码以模拟您已完成的工作。
通常,如果代码是公共的(可以在不进行身份验证的情况下使用),那么您只需要公开非原子端点(GET请求和其他实际上不会对您的任何数据进行更改的内容)。一旦用户使用面向用户的应用程序进行了身份验证,您就可以公开原子的端点,但它应该仅限于他们应该有权更改的内容。您还应该仅使用其凭据通过Web API进行身份验证,而不是使用应用程序的一些全局凭据集。这样,您可以在Web API级别控制其访问权限,并拒绝更改他们应该无权访问的内容的请求。更全面的东西应该只通过你的web应用程序,代理一个真正私有的Web API,如我在答案中所述。
答案 1 :(得分:1)
是的,你可以!
使用消息处理程序或OWIn中间件检查请求Url,如果它们来自您的域,则允许该呼叫通过。否则,请忽略它。