我创建了一个新的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?
处理使某些内容私有化的最佳方法始终是在网络级别进行处理。甚至不要将Web API暴露给外界。将其放在DMZ后面,并专门针对您的面向用户的应用程序穿过防火墙。然后,其他任何东西都将无法触及它。
编辑
抱歉,我没有注意到您通过AJAX访问它的事实,因此我建议的内容在技术上是行不通的。但是,如果您只需要少数几个端点的客户端访问,则此方法仍有一些优点。您可以在应用程序中设置动作,该动作仅将请求代理到私有API端点,然后在面向用户的应用程序中针对AJAX调用这些动作,而不是直接针对Web API。
但是,如果所有内容都需要在客户端可用,则必须公开Web API。那时,身份验证是您唯一的选择,但是保护该客户端几乎是不可能的(您还必须存储身份验证令牌或方法来对客户端进行身份验证,从而允许任何想要查看的人在您的代码上模仿您所做的事情)。
通常,如果代码是公开的(无需进行身份验证即可使用),则您只想公开非原子性的端点(GET请求和其他实际上不会更改任何数据的事物)。用户通过面向用户的应用程序进行身份验证后,便可以公开原子的终结点,但是该终结点应仅限于他们有权访问的事物。您还应该仅使用其凭据来通过Web API进行身份验证,而不是使用应用程序的某些全局凭据集。这样,您可以在Web API级别上控制他们的访问,并拒绝更改他们不应访问的内容的请求。全局性更高的内容应仅通过您的Web应用程序进行访问,并代理到真正的私有Web API,如我的答复中首先描述的那样。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句