【发布时间】:2018-10-16 10:17:18
【问题描述】:
我试图弄清楚 JHipster 如何使用 HTTP 会话来保护应用程序和记录用户。 到目前为止,我已经设法理解了这样的流程:
1) 在登录页面 home.component 向api/account 发送请求
使用会话 cookie(如果有)
据我了解,对此负责的是 Spring Security
2) 当没有活动会话时,我们可以填写登录表单并登录
向api/authentication 发送请求(需要步骤 1 中的 XSRF cookie)
3) 当第 2 步成功时,前端将登录表单中的凭据发送到api/account
但是在所有这些步骤中,我们需要拦截后端发送的 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.json和webpack/webpack.dev.js文件,如果您想代理到 JHipster 后端以外的另一台服务器,您可以添加更多配置