### Description

Currently, the [`tryAuthenticateToken`](https://github.com/elastic/elasticsearch/blob/55088d154d1764a6d4fa8e9078bde9da1e9ff9a5/x-pack/plugin/security/src/main/java/org/elasticsearch/xpack/security/authc/TokenService.java#L458) method calls `decodeAndValidateToken` which ends up sending two `GetRequest` for the same token ID. First in [`decodeToken`](https://github.com/elastic/elasticsearch/blob/55088d154d1764a6d4fa8e9078bde9da1e9ff9a5/x-pack/plugin/security/src/main/java/org/elasticsearch/xpack/security/authc/TokenService.java#L602) and second in [`checkIfTokenIsValid`](https://github.com/elastic/elasticsearch/blob/55088d154d1764a6d4fa8e9078bde9da1e9ff9a5/x-pack/plugin/security/src/main/java/org/elasticsearch/xpack/security/authc/TokenService.java#L1977). The second call is unnecessary as we already fetched the access token in the first call, it's just simply dropped. We should refactor these two methods to avoid sending second get request just to validate the access token.
x-pack/plugin/security/src/main/java/org/elasticsearch/xpack/security/authc/TokenService.java
/**
     * Performs the actual invalidation of a collection of tokens. In case of recoverable errors ( see
     * {@link TransportActions#isShardNotAvailableException} ) the UpdateRequests to mark the tokens as invalidated are retried using
     * an exponential backoff policy.
     *
     * @param tokenIds              the tokens to invalidate
     * @param tokensIndexManager    the manager for the index where the tokens are stored
     * @param backoff               the amount of time to delay between attempts
     * @param srcPrefix             the prefix to use when constructing the doc to update, either refresh_token or access_token depending on
     *                              what type of tokens should be invalidated
     * @param previousResult        if this not the initial attempt for invalidation, it contains the result of invalidating
     *                              tokens up to the point of the retry. This result is added to the result of the current attempt
     * @param listener              the listener to notify upon completion
     */
    private void indexInvalidation(
        Collection<String> tokenIds,
        SecurityIndexManager tokensIndexManager,
        Iterator<TimeValue> backoff,
        String srcPrefix,
        @Nullable TokensInvalidationResult previousResult,
        ActionListener<TokensInvalidationResult> listener
    ) {
        if (tokenIds.isEmpty()) {
            logger.warn("No [{}] tokens provided for invalidation", srcPrefix);
            listener.onFailure(invalidGrantException("No tokens provided for invalidation"));
        } else {
            BulkRequestBuilder bulkRequestBuilder = client.prepareBulk();
            for (String tokenId : tokenIds) {
                UpdateRequest request = client.prepareUpdate(tokensIndexManager.aliasName(), getTokenDocumentId(tokenId))
                    .setDoc(srcPrefix, Collections.singletonMap("invalidated", true))