2016-03-01 84 views
-1

我正尝试使用HTML5/Javascript创建多租户SPA(单页应用程序)。这个应用程序将调用宁静的web服务进行数据更新。下面是说明的架构:enter image description here创建一个由静态web服务支持的multitenant SPA

这是我的挑战:

  • 身份:一个服务将如何知道,从客户端来了JS的请求对应于数据库的特定模式?可能我可以发送“APPID”令牌吗?但是,最终用户可以很容易地欺骗这个问题?
  • 连接池:如果Tomcat池依赖于连接池,如何确保使用可以访问APP1模式的“app1”凭证创建的连接在处理来自App1 JS的请求时返回到Web服务?我可能只需创建一个可访问所有模式的数据库帐户,但这可能会成为合规性问题。

我应该只部署多个Web服务副本吗?说,app1 JS查询services.app1.com和app2 JS查询services.app2.com?这可能会解决上述两个问题,但我认为它不再是多租户解决方案。

回答

1

这通常是通过验证令牌来完成的。这通常由标准会话cookie(通过您使用的任何应用程序服务器实现)处理,或者在每次调用时得到验证的状态较少(如OAuth bearer token)。这最终是同一个解决方案,一个使用cookie(通过HTTP头实现),另一个使用Auth http头。无论如何,基本上会发生的是,每个用户都会收到一个魔术字符串,该字符串在每次调用中都会被认证为属于一组特定的凭证。

它与理论上的“APPID”非常相似,区别在于令牌是不透明的,并且对于它们的长度和复杂性(在宇宙的热死亡之前)非常可能是不可猜测的,因此是有效的安全。区别在于,您保持令牌与服务器端的“APPID”之间的绑定,而不是客户端。

+0

感谢罗布,为您的答案。是否有任何库实现或容易使用JavaScript/Java组合的Oauth承载令牌? – Jay

+0

如果你想尊重别人的身份验证(这是通过Facebook或谷歌类型的东西登录工作)OAuth是非常简单:http://nat.sakimura.org/2014/12/10/making-a-javascript-openid -connect-client就是一个例子。创建你自己的提供者会更深入一些......你可能想使用OpenAM http://openam.forgerock.org/这样的包。所有这一切,除非你使用多台服务器,否则我会真正开始一个普通的旧会话,除非你真的需要复杂性。 –

相关问题