为什么机密客户端和公共客户端要求应用处理 spring/keycloak 适配器中的会话?



浏览 keycloak 文档时,我们发现了以下语句:

您必须提供会话身份验证策略 Bean,该策略的类型应为RegisterSessionAuthenticationStrategy用于公共或机密应用程序,NullAuthenticatedSessionStrategy类型应为仅持有者应用程序。

最后一部分(仅限持有者(对我们来说很有意义,因为"状态"存在于 JWT 令牌中,但是我们不明白为什么公共/机密客户端要求应用程序管理状态,记住令牌仍然由 keycloak 提供。

谁能帮助我们理解为什么?

为了回答您的问题,我建议考虑两种方法:

  1. 仅持有者 + 公共。 例如,将参与标准流程的无状态后端 + SPA 应用程序:加载时重定向到 Keycloak,并在 Keycloak 端登录完成后检索令牌对。前端还负责引用代币。

  2. 老式的单体,比如带有JSP或类似的东西的应用程序。在这种情况下,不是从前端请求中检索访问令牌,而是从内部 Http 会话(由应用程序 cookie 如 JSESSIONID 标识(检索令牌。令牌刷新也由后端执行(Keycloak适配器将在幕后执行所有魔术(

我希望现在很清楚,即使 SSO 状态在令牌中封装,令牌对反过来也可以在应用程序状态中封装(如会话范围的 bean(

顺便说一句,机密客户端也可以作为仅持有者客户端工作(您可以为它们禁用"标准流"开关(。当您的服务必须代表自身而不是代表用户对其他服务进行一些调用时,这很有用。请参阅"服务帐户"文档。