@SneakyThrows
    private Future<?> processAuthorizationResult(ExtractedClaims extractedClaims, Config config,
                                                 HttpServerRequest request, ApiKeyData apiKeyData, String traceId, String spanId) {
        Future<?> future;
        try {
            ProxyContext context = new ProxyContext(this, config, request, apiKeyData, extractedClaims, traceId, spanId);
            ControllerTemplate controllerTemplate = ControllerSelector.select(request);
            Controller controller = controllerTemplate.build(this, context);
            future = controller.handle();
        } catch (Exception t) {
            future = Future.failedFuture(t);
        }
        return future;
    }
The method authorizes HTTP request by user access token or (and) API key.
<p>
    There are four possible use cases:
    <ol>
    <li>Both API key and access token are missed</li>
    <li>Both API key and access token are provided</li>
    <li>Just API key is provided</li>
    <li>Just access token is provided</li>
    </ol>
    The 2nd use case has two sub-cases:
    <ol>
    <li>API key is equal to access token. The credentials could be either access token or API key</li>
    <li>API key is not equal to access token. It could be per-request API key sent by an interceptor</li>
    </ol>
</p>

@param request HTTP request
@return the future of {@link AuthorizationResult}
server/src/main/java/com/epam/aidial/core/server/Proxy.java