【问题标题】:Securing AngularJS SPA with Spring Security 3.2使用 Spring Security 3.2 保护 AngularJS SPA
【发布时间】:2014-12-01 05:18:53
【问题描述】:

欢迎任何帮助、建议和经验。

我目前在 Apache HTTP 服务器上有一个单独的 AngularJS SPA,在 Tomcat 7 Servlet 上有一个 Spring 后端。后端用作 SPA 的 Rest API。 一些剩余资源需要用户具有特定的角色。

我已经在互联网上搜索了几天,以了解什么以及如何实施最佳安全策略:

  • 基本认证
  • 摘要
  • oAuth
  • 无状态,Cookie?会议?代币? CSRF?

您将如何将 Json 或 XML 中的 Spring Security 传递给您的 SPA,以向用户显示身份验证页面或“您成功通过身份验证的页面”?

感谢任何帮助。

【问题讨论】:

    标签: angularjs spring-security


    【解决方案1】:

    我强烈推荐观看Spring's introductory video。它使用 Java 配置从头开始解释 Spring Security 的使用。除了基本配置,身份验证和 CLRF 令牌使用也深入到现场安全性。虽然在服务器上使用 Thymeleaf 模板,但也可以为基于 REST 的应用程序提供很多智慧。

    【讨论】:

    • 我确实看过,我确实理解其中的概念,但不同之处在于我不使用模板。 SPA 与后端通信的唯一方式是通过 JSON。我可以只使用 HTTPS Basic 无状态,但我的网站容易受到 CSRF 的攻击。我将如何关闭那个洞?
    【解决方案2】:

    我终于想出了如何让 SPA 使用我的 Rest 后端进行身份验证。

    在 spring security 我创建了一个

    • 自定义 SimpleUrlAuthenticationFailureHandler,如果登录尝试失败,则返回 HTTP-Unauthorized。
    • 自定义 SavedrequestAwareAuthenticationSuccessHandler 如果登录尝试成功则返回 Http-Oke。
    • 自定义 AuthenticationEntryPoint 返回 Http-Unauthorized 而不是重定向。
    • 返回 Http-OK 的自定义 LogoutSuccessHandler。
    • 我禁用了 CSRF。

    如果有人需要更多帮助,请随时告诉我或给我发消息。

    【讨论】:

    • 你为什么决定禁用 CSRF?
    • 原因是我不知道如何在前端用angularjs处理token...
    • 啊,好吧,很公平。我做了一些关于在 CSRF 的 SPA 上做什么的挖掘工作,这让我找到了jira.spring.io/browse/SEC-2460。从这张票中,Rob 在stackoverflow.com/questions/20862299/… 提到了一个 SO,这导致了一个博客 (patrickgrimard.com/2014/01/03/…) 有一个相当不错的解决方案。要点是一个 HEAD 请求,读取 CSRF 令牌并设置一个 Angular HTTP 拦截器。
    猜你喜欢
    • 2014-10-10
    • 2014-04-13
    • 2018-02-18
    • 2014-07-29
    • 2017-03-08
    • 2022-12-11
    • 2014-02-21
    • 2016-09-01
    相关资源
    最近更新 更多