@Override
    public TicketValidationResult validate(final String ticketId, final String serviceId) throws Throwable {
        val service = webApplicationServiceFactory.createService(serviceId);
        val assertion = centralAuthenticationService.validateServiceTicket(ticketId, service);
        val authentication = assertion.getPrimaryAuthentication();
        val principal = authentication.getPrincipal();
        val registeredService = servicesManager.findServiceBy(service);
        val authenticationAttributes = authenticationAttributeReleasePolicy.getAuthenticationAttributesForRelease(
            authentication, assertion, new HashMap<>(), registeredService);

        return TicketValidationResult
            .builder()
            .principal(principal)
            .service(service)
            .attributes(authenticationAttributes)
            .assertion(assertion)
            .registeredService(registeredService)
            .build();
    }
This is a ticket validator that uses CAS back channels to validate ST.

@author Kirill Gagarski
@since 6.1.0
core/cas-server-core-tickets-api/src/main/java/org/apereo/cas/util/InternalTicketValidator.java