【问题标题】:Securing a SPA with Spring Boot, OAuth, and JWT?使用 Spring Boot、OAuth 和 JWT 保护 SPA?
【发布时间】:2018-03-16 03:52:42
【问题描述】:

我一直在浏览this tutorial,它展示了如何使用从简单到将身份验证委托给提供者的我们自己的授权服务器等多种场景来保护单页应用程序。第一个场景使用Authorization Code Grant 让用户登录。

假设我们在这种情况下用我们自己的替换 Facebook 的 OAuth 服务器,并将其配置为返回 JWT 令牌。

如果 SPA 想要使用 JWT 令牌通过在资源服务器之间进行负载平衡的边缘服务器来保护请求,那么它应该使用哪个 OAuth 流?

另外,如果我们想使用 JWT 令牌替换 spring 中替换默认的 JSESSION 和 CSRF 支持,应该如何配置 spring boot / spring security? IIUC JWT 令牌可用作这两个功能的替代品。

更新

根据 Manish 的回答,假设我们使用的是 OAuth 2 隐式流程,我们:

  • 将@EnableResourceServer 注解放在资源服务器上
  • 使用 OpenID Connect 客户端实现隐式流程

所以一旦完成,POST 请求是安全的,假设每个请求都包含 JWT 令牌作为 Bearer Header,还是我们还需要配置 CSRF?

【问题讨论】:

    标签: spring-mvc spring-security oauth spring-cloud netflix-zuul


    【解决方案1】:

    这取决于您的应用程序对安全性的敏感程度,但建议公共客户端 (SPA) 使用隐式流。

    教程基于授权码流程,如果您将 Facebook 替换为您的 STS,它仍将使用授权码流程,因为 @EnableOAuth2Sso 将 JWT 令牌存储在服务器上并将 cookie 发送到浏览器,它还使用刷新令牌来获取新的 JWT 令牌。它是一种自定义流程,基于 API 网关模式通过公共客户端 (SPA) 实现授权代码流程。

    要实现隐式流程 - 不要在服务器端使用 @EnableOAuth2Sso,只需公开 REST API 并使用 @EnableResourceServer 保护它。而你需要使用oidc-client来实现隐式流链接在这里https://github.com/IdentityModel/oidc-client-js

    仅当您将 JWT 令牌或会话标识符存储在浏览器的 cookie 中时,才需要 CSRF 保护。

    【讨论】:

    • 如果我们从授权代码流转移到隐式,以便客户端管理令牌,我们如何自定义 Spring 安全配置,以便 JWT 令牌识别用户会话(无需在服务器端创建会话) 并同时执行 CSRF?
    • 不要在服务器端使用 EnableOAuth2Sso,只需公开 REST API 并使用 @EnableResourceServer 保护它。而你需要使用oidc-client来实现隐式流链接在这里github.com/IdentityModel/oidc-client-js
    • 感谢 OpenID 连接提示 - 现在正在研究 - 我稍微更新了我的问题 - CSRF 保护还需要打开吗?
    • 仅当您将 JWT 令牌或会话标识符存储在浏览器的 cookie 中时才需要 CSRF。
    猜你喜欢
    • 2016-02-23
    • 2023-03-11
    • 2021-03-20
    • 1970-01-01
    • 2020-01-16
    • 2014-12-01
    • 2019-01-14
    • 2015-12-09
    • 2017-10-07
    相关资源
    最近更新 更多