如何在KeyClope中进行令牌交换模拟?

zzwlnbp8  于 2021-09-29  发布在  Java
关注(0)|答案(0)|浏览(240)

我正在尝试使用令牌交换功能模拟用户,但我总是得到一个错误,即不允许客户端交换。
这是我正在使用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();

我做错了什么?为什么需要允许客户端交换,因为这是模拟而不是客户端令牌交换。客户是否需要对此保密?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题