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

如何在自定义Keycloak协议映射器中获取OAuth2AuthorizeRequest属性?

问题描述

我通过以下代码获取Token:

OAuth2AuthorizeRequest oAuth2AuthorizeRequest = OAuth2AuthorizeRequest
                    .withClientRegistrationId(clientRegistration.getRegistrationId())
                    .attributes(attr->attr.put("scope", "cccc"))
                    .principal(PRINCIPAL_NAME)
                    .build();

OAuth2AuthorizedClient client = oAuth2AuthorizedClientManager.authorize(oAuth2AuthorizeRequest);

return client.getAccessToken().getTokenValue();

请问能否在如下签名的自定义Keycloak协议映射器中访问通过attr.put("scope", "cccc")设置的属性?

@Override
public AccessToken transformAccessToken(AccessToken token, ProtocolMapperModel mappingModel, KeycloakSession session,
    UserSessionModel userSession,
    ClientSessionContext clientSessionCtx) {}

回答

不能直接访问。

你在Spring Security端OAuth2AuthorizeRequest里设置的attributes是客户端本地的请求属性,这些数据只会在Spring Security的授权流程内部传递,不会被发送到Keycloak服务器。Keycloak的协议映射器运行在服务端,它能访问的只有Keycloak自身存储的会话数据(比如userSession、clientSessionCtx)、发送到Keycloak的授权请求参数,或者Keycloak中配置的用户/客户端属性。

如果想让Keycloak端拿到"cccc"这个值,需要把它作为授权请求参数发送给Keycloak,之后在协议映射器里通过clientSessionCtx.getAuthenticationSession().getClientNote("自定义参数名")或者从授权请求上下文里获取对应参数值。

内容的提问来源于stack exchange,提问作者Fotios

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 00:25:59