@SuppressWarnings("FutureReturnValueIgnored")
    protected void sendPushNotification(final OidcRegisteredService registeredService,
                                        final OidcCibaRequest cibaRequest,
                                        final Map payload) {

        val verification = configurationContext.getCasProperties().getAuthn().getOidc().getCiba().getVerification();
        val delayInSeconds = Beans.newDuration(verification.getDelay()).toSeconds();
        configurationContext.getTaskScheduler().schedule(
            () -> {
                HttpResponse response = null;
                try {
                    val clientNotificationValue = cibaRequest.getAuthentication().getSingleValuedAttribute(OidcConstants.CLIENT_NOTIFICATION_TOKEN, String.class);
                    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);
                    if (!HttpStatus.valueOf(response.getCode()).is2xxSuccessful()) {
                        LOGGER.error("Unable to deliver tokens to client application [{}]", registeredService.getName());
                        configurationContext.getTicketRegistry().deleteTicket(cibaRequest);
                    }
                } catch (final Exception e) {
                    LoggingUtils.error(LOGGER, e);
                } finally {
                    HttpUtils.close(response);
                }
            },
            LocalDateTime.now(Clock.systemUTC()).plusSeconds(delayInSeconds).toInstant(ZoneOffset.UTC));
    }
This is {@link CibaPushTokenDeliveryHandler}.

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