我们正在构建一个处理用户加入应用程序的Web应用程序,并且正在考虑围绕客户端 - 服务器与SPA类型应用程序的一些选项。从用户体验的角度来看,我们的偏好可能完全是客户端SPA,但我有API安全问题。
由于我们不是身份验证用户(他们还不是用户),因此OAuth标准意味着我们需要使用“客户端凭据”授权类型。如果服务器处理这个问题,这不是问题,但在SPA中,凭据本身位于浏览器中供任何人查看,我们的API网关无法区分浏览器中的SPA与脚本之间的合法API调用写了收获的细节。
服务器端应用程序可以隐藏客户端凭据,并且至少确保a)API调用需要活动会话(使用cookie),以及b)我们可以限制某些API调用的数量每个会话只有一个。服务器可以使用自己的私有凭证调用我们的API网关,并进行了一些检查。
另一方面,在浏览器中运行单页面应用程序关于我能想到的唯一控件是在API网关中对API调用进行速率限制,但我怀疑这会实现很少。
随机思考我的一个想法是使用“隐式”OAuth授权类型,就像它是用户身份验证过程一样。当我们重定向到“登录”页面时,它实际上不需要用户交互,而是抓取设备的指纹(例如IP地址,浏览器,语言,屏幕分辨率),然后重定向回“成功”登录。然后,客户端具有唯一的访问令牌,我们跟踪了有关最终用户的一些详细信息,以便进行审计,并进行潜在的风险评估。这需要我们的Auth服务器的定制 - 当然可能但不一定理想。
是否有人采取其他方法来保护SPA网络应用中成功且安全的API调用?或者我是否通过应用基于浏览器的控件的应用服务器停止路由API调用?
欣赏任何想法或见解......
答案 0 :(得分:2)
如果有人关心 - 并从观点数量来判断,可能不是! :) - 我们采取的方法如下:
尽可能:
无法将访问令牌动态插入JavaScript:
我决定反对棘手的重定向指纹选项,因为它太复杂了我们的需求,但是如果上述方法不起作用,其他人可能会想要追求。
希望有人觉得这很有用。