【问题标题】:Understanding HTTP Session security mechanism in JHipster了解 JHipster 中的 HTTP Session 安全机制
【发布时间】:2018-10-16 10:17:18
【问题描述】:

我试图弄清楚 JHipster 如何使用 HTTP 会话来保护应用程序和记录用户。 到目前为止,我已经设法理解了这样的流程:

1) 在登录页面 home.component 向api/account 发送请求 使用会话 cookie(如果有)

  • 如果存在有效会话 >> 使用存储的 cookie 中的凭据,然后登录用户
  • if no >> 后端服务器响应 HTTP 401 并发送 XSRF cookie 作为响应

  • 据我了解,对此负责的是 Spring Security

    2) 当没有活动会话时,我们可以填写登录表单并登录 向api/authentication 发送请求(需要步骤 1 中的 XSRF cookie)

  • 如果一切正常 >> 响应 HTTP 200 并发送新的 XSRF cookie
  • 如果没有 >> HTTP 403 并发送新的 XSRF cookie

    3) 当第 2 步成功时,前端将登录表单中的凭据发送到api/account

  • Spring Security 再检查一次 XSRF cookie 值(这次从第 2 步开始)
  • 如果一切正常>>调用用户登录业务逻辑

    但是在所有这些步骤中,我们需要拦截后端发送的 cookie 并将它们发送回来,以便能够通过 CSRF 保护。
    JHipster 项目的哪个部分负责?
    它使用 webpack /browsersync 或者我缺少一些由 JHipster 创建的 Angular 代码?

    编辑
    当我对生成的项目进行大量更改时,我的问题出现了,因为我想使用自定义模板/样式和 JHipster 生成的服务。我已将模板与 jhipster 服务相关联。

    当我尝试登录用户时,我会得到如下的 Spring 控制台输出:
    Forbidden: Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-XSRF-TOKEN'
    从之前的请求到api/authentication 我得到了回复
    Set-Cookie: XSRF-TOKEN=a129cb47-ec96-47be-aaae-69f90848c466; path=/
    在浏览器网络中。

    所以我猜它设置了错误名称的cookie。我已在浏览器中手动将 cookie 名称更改为:X-XSRF-TOKEN 并重新发送请求。新错误如下所示:
    Forbidden: Could not verify the provided CSRF token because your session was not found.

    我对流程的了解不够,所以我无法发现问题出在哪里。也许我搞砸了,也许有一些由 JHipster 生成的代码负责。 JHipster Angular 前端中有一些类,例如 StateStorageService。他们是否参与了我的问题或与该问题无关?

  • 【问题讨论】:

    • Cookies 由浏览器自动发送,这里不需要客户端代码。或者我没听懂你的问题。
    • @GaëlMarziou 我已经更新了我的问题并澄清了一些问题,希望现在更清楚
    • 抱歉,我不知道您所做的与 JHipster 生成的代码有何不同。
    • 也许我选择了不好的方法。你@GaëlMarziou 是否认为将模板、脚本、css 等复制到 JHipster 项目中更好? (当然要进行调整,以便与 JHispter 服务等兼容。)还有一个问题。 JHipster 是否以某种方式配置代理或 Angular 可以修改/设置 cookie,即使后端和前端运行在不同的端口上?我已经读过,即使服务在本地主机上运行在我的机器上,不同的端口也被视为不同的域。这就是为什么 Angular 无法修改不同的域 cookie。
    • “Angular 无法修改不同的域 cookie”是什么意思,javascript 代码不能更改 cookie,尤其是当 httpOnly 为真时(参见 owasp.org/index.php/HttpOnly#What_is_HttpOnly.3F) JHipster webpack 服务器配置已经在 dev 中为您设置代理,请参阅项目中的 proxy.conf.jsonwebpack/webpack.dev.js 文件,如果您想代理到 JHipster 后端以外的另一台服务器,您可以添加更多配置

    标签: csrf jhipster


    【解决方案1】:

    在将移动应用程序连接到 Spring Boot 的后端时,我遇到了同样的问题。所以基本上 Angular 在称为拦截器的核心功能下有一个方法。在拦截器下,响应被收集,X-XSRF-TOKEN 被捕获并在浏览器 Cookie 中更新,或者在我的情况下 Ionic Local Storage 作为 Cookie。

    【讨论】:

      猜你喜欢
      • 2021-07-02
      • 2021-10-18
      • 2018-05-17
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      • 2012-01-08
      • 2012-10-15
      • 1970-01-01
      相关资源
      最近更新 更多