protected Optional<Credentials> buildUserProfile(final Credentials credentials, final String dPopProof,
                                                     final String clientId, final JWKThumbprintConfirmation confirmation) throws Throwable {
        val signedProof = getSignedProofOfPosessionJwt(dPopProof);
        val userProfile = new CommonProfile(true);
        userProfile.setId(clientId);
        userProfile.addAttributes(signedProof.getJWTClaimsSet().getClaims());
        userProfile.addAttribute(OAuth20Constants.DPOP, dPopProof);
        userProfile.addAttribute(OAuth20Constants.DPOP_CONFIRMATION, confirmation.getValue().toString());
        credentials.setUserProfile(userProfile);
        return Optional.of(credentials);
    }
This is {@link OidcDPoPAuthenticator}.

@author Misagh Moayyed
@since 6.6.0
support/cas-server-support-oidc-core-api/src/main/java/org/apereo/cas/oidc/authn/OidcDPoPAuthenticator.java