【问题标题】:Invalid authentication token after session timeout会话超时后身份验证令牌无效
【发布时间】:2015-08-30 19:20:38
【问题描述】:

我已启用CSRF 保护,它会导致以下情况出现问题。

会话超时,用户单击按钮触发需要用户登录的操作。由于会话现已过期,用户首先被带到登录页面,然后重定向到该操作。用户请求的操作 url 以过期的p_auth 参数保存在登录 url 中,这会导致错误

我不想将此操作排除在CSRF 保护之外。如果存在过期的身份验证令牌,是否可以定义调用的默认操作?如果没有,有没有办法解决这个问题?

【问题讨论】:

    标签: java authentication liferay csrf


    【解决方案1】:

    嗯,这里的问题是 Liferay 存储了 lastPath。由于 lastPath 还包含 auth-token,所以这里有点棘手。 Liferay 检测到会话已过期,并正在重定向到登录页面。新登录后,会生成一个新的 authToken 并与该会话相关联。现在 Liferay 尝试将您重定向到存储的 lastPath。这里旧的 AuthToke 仍然存在。分析这么多。

    可行的方法是:

    创建您自己的自定义 PostLoginAction。在该操作中,您检查 lastPath 是否包含 AuthToke。如果是这样,请将令牌的值替换为新的值。将其保存回 lastPath 并交叉手指。实际上,我不是 100% 肯定这会奏效,但我认为它应该 奏效。

    [编辑]

    这是您获得新 AuthToken 的方式:

    AuthTokenUtil.getToken(request)
    

    Request 是一个 HTTPServletRequest 对象,它是 Action 方法中的一个参数。

    【讨论】:

    • 我实际上有一个 PostLoginAction,如果它包含 p_auth,我将删除它。如果我能以某种方式用一个有效的令牌替换它,但还不确定如何生成一个,那就太好了。很好的答案,尽管如此赞成
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    • 2012-08-01
    • 2019-07-26
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    相关资源
    最近更新 更多