0

I need some help with securing a single page multi-tenant saas application.

Questions: 1) What is the best way to implement it? I am trying the build the application using angularjs, spring mvc and REST. 2) Can this be done using Spring Security? Any example with creating login page and securing REST, calls will be helpful?

I have found a sample for implementing spring security with Spring JPA (http://krams915.blogspot.com/2012/01/spring-security-31-implement_3065.html) but it is not for SPA and SaaS.

I understand this a very broad question but i am new to SPA, REST and SaaS so any pointers will be helpful.

Thanks...

4

1 回答 1

0

我已经参与了 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 关于如何在这些代码中进行安全性有一些有趣的想法。我没有找到好的链接,也许这个这个会有帮助(搜索“许可”)。

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

于 2013-05-06T13:03:13.070 回答