You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同一Keycloak realm下认证客户端无法访问同领域其他客户端应用

Keycloak同Realm下跨客户端访问令牌调用资源问题

背景说明

我使用Keycloak作为身份提供方,相关应用配置如下:

  • 已注册一个访问类型为confidential的springboot-mvc-client客户端,配置了authorization_code授权类型。访问该应用时会自动跳转至Keycloak登录页,登录成功后可正常访问应用页面,流程运行正常。
  • 另一个springboot-rest-api应用作为资源服务器,初始application.properties配置为:
server.port=8182
spring.security.oauth2.resourceserver.jwt.issuer-uri=http://localhost:8181/auth/realms/my-realm
  • 从springboot-mvc-client提取AccessToken作为Authorization请求头,通过RestTemplate调用springboot-rest-api接口的流程可正常运行。

问题描述

将springboot-rest-api在Keycloak中也注册为confidential访问类型的客户端后,从springboot-mvc-client发起API调用失败,返回的响应为Keycloak登录页的HTML内容。
我的初始理解是:两个客户端都注册在同一个Realm下,应该可以使用springboot-mvc-client认证后获取的令牌调用springboot-rest-api的接口,不确定该理解是否正确。

额外排查结果

  • 将springboot-rest-api的访问类型从confidential改为bearer-only后,调用恢复正常
  • 通过client_credentials授权模式获取springboot-rest-api自身的AccessToken,使用该令牌也可正常调用接口

咨询问题

即便处于同一Realm下,也无法使用一个confidential客户端的访问令牌访问另一个confidential客户端的资源吗?


更新1:问题解决

为springboot-rest-api添加OAuth安全配置后问题解决,可使用从springboot-mvc-client获取的同一个AccessToken调用接口,新增配置如下:

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy;

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity
                .authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .cors()
                .and()
                .csrf()
                .disable()
                .oauth2ResourceServer()
                .jwt();
    }
}

更新2:补充观察

当springboot-rest-api仅作为资源服务器配置,仅在application.properties中添加spring.security.oauth2.resourceserver.jwt.issuer-uri=http://localhost:8181/auth/realms/my-realm配置时,不需要添加上述SecurityConfig配置;但如果需要springboot-rest-api同时作为OAuth Client和资源服务器运行,就需要添加上述SecurityConfig配置。


内容的提问来源于stack exchange,提问作者K. Siva Prasad Reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 08:06:04