首页 > 解决方案 > 了解 JHipster 中的 HTTP Session 安全机制

问题描述

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

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

  • 如果存在有效会话 >> 使用存储的 cookie 中的凭据,然后登录用户
  • 如果没有 >> 后端服务器响应 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'
    从 previuos 请求到我 在浏览器网络中 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。他们参与了我的问题还是与该问题无关?

  • 标签: csrfjhipster

    解决方案


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


    推荐阅读