【问题标题】:securing SPA multi-tenant SaaS application保护 SPA 多租户 SaaS 应用程序
【发布时间】:2013-04-23 20:10:14
【问题描述】:

我需要一些帮助来保护单页多租户 saas 应用程序。

问题: 1)实现它的最佳方法是什么?我正在尝试使用 angularjs、spring mvc 和 REST 构建应用程序。 2)这可以使用 Spring Security 来完成吗?任何有关创建登录页面和保护 REST 的示例,调用会有所帮助吗?

我找到了一个使用 Spring JPA (http://krams915.blogspot.com/2012/01/spring-security-31-implement_3065.html) 实现 Spring Security 的示例,但它不适用于 SPA 和 SaaS。

我理解这是一个非常广泛的问题,但我是 SPA、REST 和 SaaS 的新手,所以任何指针都会有所帮助。

谢谢...

【问题讨论】:

    标签: login angularjs spring-security saas single-page-application


    【解决方案1】:

    我已经参与了 SPA 和安全方面的两个项目。最后一个是 GWT + Spring Security。我确信您可以成功地同时使用 Angular 和 Spring Security。

    不幸的是,在 Spring Security AFAIK 中没有内置配置参数“我们处于 SPA 模式”。因此,有必要从 Spring Security 方面进行一些调整/配置。例子: 想象一下,在登录期间,您调用内置的 Spring Security 登录控制器。默认情况下,如果认证成功,用户将被重定向到索引页面,在失败的情况下,它将被重定向到相应的错误页面。这是标准 Web 应用程序的正常行为,但对 SPA Web 应用程序没有太大用处。在 SPA 的情况下,您需要检测 AJAX 调用并使用用户名/角色打印 JSON 以获取成功案例,或发送 401 代码以获取失败(然后在 JS 中检测 401 并显示相应的错误)。您可以使用 Spring Security 中的相应扩展点来执行此操作:AuthenticationSuccessHandlerAuthenticationFailureHandler

    还有一点需要调整:默认情况下,会话到期后,用户将被重定向到登录页面(SPA 应用程序接收登录页面作为对下一次 AJAX 调用的响应)。

    查看我的个人经验一般指南将是这样的:登录后将角色列表加载到 JS 中。使用它在 UI 端显示/隐藏相应的组件。 在服务器端也应用相同的限制列表。确保用户不在浏览器中编辑 JS(尽管在某些中型应用程序的缩小 JS 的情况下,这将是非常复杂的任务)。在服务器端,您必须选择:

    1. AJAX 调用的安全 URL
    2. 保护一些 Java 方法。

    我更喜欢第二个(服务上的安全业务方法)。我认为这更方便,因为通常我们想要安全的业务运营,而不是某些端点。作为adwantage,您将能够通过其他一些协议公开您的业务逻辑,并且安全性已经存在。从另一方面来说,我可以想象一些业务要求对不同的端点/协议具有不同的权限。所以这更多地取决于你的实际情况。

    大型 JS 应用程序必须拆分为模块。为了减少直接依赖,最好使用直接调用的事件来在模块之间进行通信。 Addy Osmany 关于如何在这些代码中进行安全性有一些有趣的想法。我没有找到好的链接,也许thisthis 会有所帮助(搜索“许可”)。

    随时发布任何问题。祝你好运。

    【讨论】:

      猜你喜欢
      • 2012-05-17
      • 2014-07-27
      • 2012-07-24
      • 2012-04-10
      • 1970-01-01
      • 2017-01-28
      • 2017-01-07
      • 1970-01-01
      • 2017-03-02
      相关资源
      最近更新 更多