【问题标题】:creating a multitenant SPA backed by restful web services创建由 RESTful Web 服务支持的多租户 SPA
【发布时间】:2016-03-01 22:18:29
【问题描述】:

我正在尝试使用 HTML5/Javascript 创建多租户 SPA(单页应用程序)。这个应用程序将调用 RESTful Web 服务进行数据更新。下面是架构的说明:

这些是我的挑战:

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

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

【问题讨论】:

    标签: javascript java deployment architecture multi-tenant


    【解决方案1】:

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

    理论上它与您的“APPID”非常相似,不同之处在于令牌是不透明的,并且很可能无法猜测它们的长度和复杂性(在宇宙热死之前),因此实际上是安全的.不同之处在于您在服务器端而不是客户端持有令牌和哪个“APPID”之间的绑定。

    【讨论】:

    • 感谢 Rob,您的回答。是否有任何库可以实现或轻松使用 Oauth 不记名令牌进行 javascript/java 组合?
    • 如果您想尊重他人的身份验证,OAuth 非常简单(这是通过 facebook 或 google 登录的方式):nat.sakimura.org/2014/12/10/… 就是一个例子。创建您自己的提供程序更深入一点……您可能想要使用像 OpenAM openam.forgerock.org 这样的包。说了这么多,除非您使用多个服务器,否则我真的会从一个普通的旧会话开始,除非您真的需要复杂性。
    猜你喜欢
    • 2019-07-11
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多