Spring OAuth2 使用 Keycloak 自动登录

Posted

技术标签:

【中文标题】Spring OAuth2 使用 Keycloak 自动登录【英文标题】:Spring OAuth2 automatical login with Keycloak 【发布时间】:2021-08-18 16:03:48 【问题描述】:

我在 Spring Security 方面经验不足,所以我的问题可能听起来有点奇怪。

我的环境由 4 个部分组成:

Keycloak 授权服务器(授权服务器) Spring 资源服务器应用程序(资源服务器) 2 OAuth2 客户端应用程序(客户端)

我所有的配置都很好,OAuth2 和 SSO 可以在所有应用程序中正常工作。

除了 OAuth2 配置之外,还有更多工作要做。当我的用户使用客户端应用程序时,他将在尝试访问资源时在表单上提供他的凭据。但是我的模型(对于资源)比较复杂,我必须时不时做一些后台(家务)任务。这些任务不是由用户(以用户的名义)完成的,而是由客户端应用程序本身请求的。我的问题是,如何以客户端应用程序本身的名义从我的客户端访问资源服务器的端点。

我的第一个想法是客户端应用程序应该存储一个长期的 JWT 令牌并在调用期间使用这个令牌。但我不确定。我不想把时间浪费在糟糕的道路上,这就是我首先要问的原因。

对我来说最关键和最可疑的部分:

如何从 Keycloak 获得长期 JWT 如何自动登录后台调用(通过 SSO 和 OAuth2) 如何存储用于自动登录的凭据。

感谢您的想法或建议。

【问题讨论】:

【参考方案1】:

您永远不应该拥有长期令牌,因为这是一个安全风险。

如果有人设法获得了长期令牌,那么他们就有很长时间恶意使用它。

我无法指导您如何在 keycloak 等中进行设置。但我会使用 Client Credential Flow 来验证服务器,并在每次需要进行这些“家务工作”之一时获取一个令牌。

您可以在此处阅读更多关于流程的信息Client Credential Flow

【讨论】:

感谢您的指导,我意识到我需要这个客户凭证流,但我不知道名称。

以上是关于Spring OAuth2 使用 Keycloak 自动登录的主要内容,如果未能解决你的问题,请参考以下文章

需要使用 Keycloak 和 oAuth2 保护普通 Spring REST API 的示例

带有 Keycloak 的 Spring Security OAuth2 - 访问用户信息

通过 Spring Boot Keycloak 集成的 OAuth2 客户端凭据流

Spring Boot webservice (REST) - 如何将 JUnit 5 测试从基本身份验证更改为 OAuth2 (Keycloak)

从 Spring Security OAuth2 迁移到 Keycloak 时,如何解决“permitAll 仅适用于 HttpSecurity.authorizeRequests()”?

需要使用Keycloack和oAuth2保护普通Spring REST API的示例