为啥机密和公共客户端需要应用程序来处理 spring/keycloak 适配器中的会话?

Posted

技术标签:

【中文标题】为啥机密和公共客户端需要应用程序来处理 spring/keycloak 适配器中的会话?【英文标题】:Why confidential and public clients require apps to handle sessions in the spring/keycloak adapter?为什么机密和公共客户端需要应用程序来处理 spring/keycloak 适配器中的会话? 【发布时间】:2020-08-29 11:16:58 【问题描述】:

浏览我们发现此声明的 keycloak 文档:

您必须提供一个会话身份验证策略 bean,对于公共或机密应用程序应该是 RegisterSessionAuthenticationStrategy 类型,对于仅承载应用程序应该是 NullAuthenticatedSessionStrategy

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

【讨论】:

以上是关于为啥机密和公共客户端需要应用程序来处理 spring/keycloak 适配器中的会话?的主要内容,如果未能解决你的问题,请参考以下文章

在哪里/如何存储或生成客户端机密?

我可以从 HTTP 客户端获取 TLS 机密来解密我自己的 HTTPS 对话吗?

如何在 CI 管道中存储多个客户端的机密文件?

如何在数据库中存储加密的机密用户信息,需要在运行时解密?

Keycloak 前端和后端客户端

Keycloak 公开与机密客户