docs: protected Pair<AccessToken, RefreshToken> generateAccessTokenOAuthGrantTypes(final AccessTokenRequestDataHolder holder) {
          LOGGER.debug("Creating access token for [{}]", holder.getService());
          val clientId = holder.getRegisteredService().getClientId();
          val authn = DefaultAuthenticationBuilder
              .newInstance(holder.getAuthentication())
              .addAttribute(OAuth20Constants.GRANT_TYPE, holder.getGrantType().toString())
              .addAttribute(OAuth20Constants.SCOPE, holder.getScopes())
              .addAttribute(OAuth20Constants.CLIENT_ID, clientId)
              .build();
  
          LOGGER.debug("Creating access token for [{}]", holder);
          val ticketGrantingTicket = holder.getTicketGrantingTicket();
          val accessToken = this.accessTokenFactory.create(holder.getService(),
              authn, ticketGrantingTicket, holder.getScopes(), clientId);
  
          LOGGER.debug("Created access token [{}]", accessToken);
          addTicketToRegistry(accessToken, ticketGrantingTicket);
          LOGGER.debug("Added access token [{}] to registry", accessToken);
  
          updateOAuthCode(holder);
  
          val refreshToken = FunctionUtils.doIf(holder.isGenerateRefreshToken(),
              () -> generateRefreshToken(holder),
              () -> {
                  LOGGER.debug("Service [{}] is not able/allowed to receive refresh tokens", holder.getService());
                  return null;
              }).get();
  
          return Pair.of(accessToken, refreshToken);
      }