@Override
    public boolean isParticipating(final SingleSignOnParticipationRequest ssoRequest) {
        if (properties.isRenewAuthnEnabled() && ssoRequest.isRequestingRenewAuthentication()) {
            LOGGER.debug("The authentication session is considered renewed.");
            return false;
        }

        val registeredService = (WebBasedRegisteredService) getRegisteredService(ssoRequest);
        if (registeredService == null) {
            return properties.isSsoEnabled();
        }

        val isAllowedForSso = registeredService.getAccessStrategy().isServiceAccessAllowedForSso(registeredService);
        LOGGER.trace("Located [{}] in registry. Service access to participate in SSO is set to [{}]",
            registeredService.getServiceId(), isAllowedForSso);

        if (!isAllowedForSso) {
            LOGGER.debug("Service [{}] is not authorized to participate in SSO", registeredService.getServiceId());
            return false;
        }

        val ssoPolicy = registeredService.getSingleSignOnParticipationPolicy();
        if (ssoPolicy != null) {
            val ticketState = getTicketState(ssoRequest);
            if (ticketState.isPresent()) {
                return ssoPolicy.shouldParticipateInSso(registeredService, (AuthenticationAwareTicket) ticketState.get());
            }
        }

        val tgtPolicy = registeredService.getTicketGrantingTicketExpirationPolicy();
        if (tgtPolicy != null) {
            val ticketState = getTicketState(ssoRequest);
            return tgtPolicy.toExpirationPolicy()
                .filter(tgt -> ticketState.isPresent())
                .map(policy -> !policy.isExpired((TicketGrantingTicketAwareTicket) ticketState.get()))
                .orElse(Boolean.TRUE);
        }
        return properties.isSsoEnabled();
    }
This is {@link DefaultSingleSignOnParticipationStrategy}.

@author Misagh Moayyed
@since 5.2.0
core/cas-server-core-webflow-api/src/main/java/org/apereo/cas/web/flow/DefaultSingleSignOnParticipationStrategy.java