@Override
    public Map<String, ?> deliver(final OidcRegisteredService registeredService, final OidcCibaRequest cibaRequest) throws Throwable {
        HttpResponse response = null;
        try {
            val clientNotificationValue = cibaRequest.getAuthentication().getSingleValuedAttribute(OidcConstants.CLIENT_NOTIFICATION_TOKEN, String.class);
            val payload = Map.of(OidcConstants.AUTH_REQ_ID, cibaRequest.getEncodedId());
            val exec = HttpExecutionRequest.builder()
                .bearerToken(clientNotificationValue)
                .method(HttpMethod.POST)
                .url(registeredService.getBackchannelClientNotificationEndpoint())
                .entity(MAPPER.writeValueAsString(payload))
                .httpClient(configurationContext.getHttpClient())
                .headers(CollectionUtils.wrap(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE))
                .build();
            LOGGER.debug("Sending a POST request to [{}] with payload [{}]", exec.getUrl(), exec.getEntity());
            response = HttpUtils.execute(exec);
            FunctionUtils.throwIf(!HttpStatus.valueOf(response.getCode()).is2xxSuccessful(),
                () -> new HttpException("Unable to deliver tokens to client application %s".formatted(registeredService.getName())));
            LOGGER.debug("Marking CIBA authentication request [{}] as ready", cibaRequest.getEncodedId());
            configurationContext.getTicketRegistry().updateTicket(cibaRequest.markTicketReady());
            return payload;
        } finally {
            HttpUtils.close(response);
        }
    }
This is {@link CibaPingTokenDeliveryHandler}.

@author Misagh Moayyed
@since 7.1.0
support/cas-server-support-oidc-core-api/src/main/java/org/apereo/cas/oidc/token/ciba/CibaPingTokenDeliveryHandler.java