创建由 restful 网络服务支持的多租户 SPA
creating a multitenant SPA backed by restful web services
我正在尝试使用 HTML5/Javascript 创建多租户 SPA(单页应用程序)。此应用程序将调用 restful 网络服务进行数据更新。下面是架构图:
这些是我的挑战:
- 身份:服务如何知道来自客户端 JS 的请求对应于数据库中的特定模式?也许我可以发送一个 "APPID" 令牌?但是,这很容易被最终用户欺骗吗?
- 连接池:如果 tomcat 池依赖于连接池,我如何确保使用 "app1" 凭据创建的连接可以访问 APP1 架构,当它返回到 Web 服务时处理来自 App1 JS 的请求?我可能只创建一个可以访问所有模式的数据库帐户,但这可能会成为合规性问题。
我应该只部署多个网络服务副本吗?比如说,app1 JS 查询服务。app1.com 和 app2 JS 查询服务。app2.com?这可能会解决上述两个问题,但我认为它不再是多租户解决方案。
这通常是通过经过身份验证的令牌来完成的。这通常由标准 session cookie(由您使用的任何应用程序服务器实现)或在每次调用时得到验证的较少状态的东西(如 OAuth bearer token)处理。这最终是相同的解决方案,一个使用 cookie(通过 HTTP header 实现),另一个使用 Auth http header。无论如何,基本上发生的是向每个用户发出一个魔术字符串,该字符串在每次调用时都经过身份验证,属于一组特定的凭据。
理论上和你的"APPID"很相似,不同的是token是不透明的,而且很可能无法猜测它们的长度和复杂度(在heat-death宇宙之前) ,因此是有效安全的。不同之处在于,您在服务器端而不是客户端持有令牌与 which "APPID" 之间的绑定。
我正在尝试使用 HTML5/Javascript 创建多租户 SPA(单页应用程序)。此应用程序将调用 restful 网络服务进行数据更新。下面是架构图:
这些是我的挑战:
- 身份:服务如何知道来自客户端 JS 的请求对应于数据库中的特定模式?也许我可以发送一个 "APPID" 令牌?但是,这很容易被最终用户欺骗吗?
- 连接池:如果 tomcat 池依赖于连接池,我如何确保使用 "app1" 凭据创建的连接可以访问 APP1 架构,当它返回到 Web 服务时处理来自 App1 JS 的请求?我可能只创建一个可以访问所有模式的数据库帐户,但这可能会成为合规性问题。
我应该只部署多个网络服务副本吗?比如说,app1 JS 查询服务。app1.com 和 app2 JS 查询服务。app2.com?这可能会解决上述两个问题,但我认为它不再是多租户解决方案。
这通常是通过经过身份验证的令牌来完成的。这通常由标准 session cookie(由您使用的任何应用程序服务器实现)或在每次调用时得到验证的较少状态的东西(如 OAuth bearer token)处理。这最终是相同的解决方案,一个使用 cookie(通过 HTTP header 实现),另一个使用 Auth http header。无论如何,基本上发生的是向每个用户发出一个魔术字符串,该字符串在每次调用时都经过身份验证,属于一组特定的凭据。
理论上和你的"APPID"很相似,不同的是token是不透明的,而且很可能无法猜测它们的长度和复杂度(在heat-death宇宙之前) ,因此是有效安全的。不同之处在于,您在服务器端而不是客户端持有令牌与 which "APPID" 之间的绑定。