使用 JWT 识别 Wildfly 上的服务器端会话

问题描述

我有一个作为中央服务运行的应用程序,它可以作为 i-frame 嵌入到任意网页中。此应用程序在 Wildfly 应用程序服务器中运行,并使用带有 cookie 的服务器端会话。从浏览器的角度来看,这些 cookie 是第三方 cookie。

不久前,Google 宣布他们将在 2022 年在 Chrome 中禁用对第三方 cookie 的支持。我知道如果我想让它与 Chrome 一起使用,我将不得不重新设计应用程序的架构。从理论上讲,我认为应该可以在没有 cookie 的情况下使用会话。我可以通过 Javascript 进行 OAuth 2.0 身份验证,并在每个服务器请求中将访问令牌作为不记名身份验证发送。服务器可以使用此令牌来识别会话。

不幸的是,我不想从头开始构建服务器,我使用 Wildfly 为我处理会话。我知道这是一个高级主题,但如果您提供有关如何让 Wildfly(或任何其他 Jave EE 容器)使用与 cookie 不同的标识符来识别会话的提示,我将不胜感激。

解决方法

servlet 3 规范预见了 3 种管理会话的方法:

  • 饼干
  • 网址
  • SSL

您可以在 web.xml 的战争中指定所需的模式:

<web-app ...>
  <session-config>
    <tracking-mode>URL</tracking-mode>
    <!--<tracking-mode>COOKIE</tracking-mode> -->
  </session-config>
</web-app>

但我认为你也可以全局定义它,我的意思是在 Wildfly 级别(作为默认模式)

有用的链接: https://www.logicbig.com/tutorials/java-ee-tutorial/java-servlet/session-tracking-mode.html