我正在尝试使用令牌交换功能模拟用户,但我总是得到一个错误,即不允许客户端交换。
这是我正在使用webflux webclient执行的请求:
MultiValueMap<String, String> formData = new LinkedMultiValueMap<>();
formData.add("grant_type", "urn:ietf:params:oauth:grant-type:token-exchange");
formData.add("requested_token_type", "urn:ietf:params:oauth:token-type:access_token");
formData.add("client_id", keycloakClientId);
formData.add("requested_subject", userId);
formData.add("subject_token", token);
return WebClient.create()
.post()
.uri(authServerUrl + "/realms/" + authServerRealm + "/protocol/openid-connect/token")
.contentType(MediaType.APPLICATION_FORM_URLENCODED)
.body(BodyInserters.fromFormData(formData))
.exchangeToMono(clientResponse -> clientResponse.bodyToMono(AccessTokenResponse.class));
我得到的答复是:
{"error":"access_denied","error_description":"Client not allowed to exchange"}
如何兑换上述代币:
KeycloakBuilder.builder()
.serverUrl(authServerUrl)
.realm(authServerRealm)
.grantType(OAuth2Constants.PASSWORD)
.username(keycloakAdminUsername)
.password(keycloakAdminPassword)
.clientId(keycloakClientId)
.build();
我做错了什么?为什么需要允许客户端交换,因为这是模拟而不是客户端令牌交换。客户是否需要对此保密?
暂无答案!
目前还没有任何答案,快来回答吧!