Mic*_*ael 14 security api rest restful-authentication restful-architecture
我有2台服务器,一台负责前端应用程序和用户身份验证.此服务器呈现以javascript编码的单个页面应用程序.这个javascript应用程序通过第二台服务器上托管的REST api从第二台服务器渲染数据.
我想保护第二台服务器.我想只有前端应用程序能够调用后端服务器.
目前,任何人都可以从浏览器调用其余的api来查询数据.
谢谢你的帮助.
dth*_*rpe 15
javascript应用程序可以在浏览器客户端中执行的任何操作都可以由其他人查看并完成,以访问应用程序外部的后端REST API服务器.
实际上,客户端应用程序是用JavaScript实现的这一事实是微不足道的 - 任何在控件之外的机器上执行的应用程序都无法完全信任.在javascript应用程序上反向设计可解决的本机代码比使用ViewSource更难一点,但并非不可能.绝不依赖安全.
您最好的选择是让浏览器应用程序要求最终用户登录并从受信任的身份提供程序获取身份验证令牌,并在浏览器应用程序对REST API的每个请求中显示该身份验证令牌.然后,REST API可以验证身份验证令牌,以查看它是否来自可信提供程序,以及在令牌内命名的用户是否有权使用REST API.
这将REST API调用的授权与用户而不是应用程序联系起来,并利用未驻留在浏览器应用程序中的秘密(用户凭据)供全世界查看.
有了这个,您可以根据正在进行呼叫的用户来限制对REST API的访问.您仍然可以根据发出请求的应用程序来过滤访问权限,但这应该是次要的,而不是主要的安全因素,因为复制应用程序描述比使用用户凭据更容易.
另一个选择可能是让您的Web服务器充当REST API服务的代理,以便浏览器应用程序必须通过Web服务器从REST API获取数据.如果浏览器应用程序维护会话状态,Web服务器可以验证以确定请求来自真正的应用程序而不是来自其他人,则这可能是可行的.虽然这可能允许您将REST API保留在公共网络之外,但它并没有真正改变您的授权问题 - 您只是将其移动到Web服务器,在那里您可能有更多会话上下文来区分应用程序内请求与闯入者请求.最好不要使用,除非你对你的应用会话状态非常有信心,否则不推荐.
无论您选择何种解决方案,事实仍然是,如果您的REST API可以从客户端应用程序(浏览器或其他方式)访问,那么它是一个公共REST API,应该这样处理(和强化).没有可以从客户端计算机访问的私有Web API.