class AuthenticationChain {

    public CompletableFuture<AuthenticationResult> authenticate(final RequestContext requestContext,
            final DittoHeaders dittoHeaders) {

        return CompletableFuture
                .runAsync(() -> LogUtil.enhanceLogWithCorrelationId(dittoHeaders), authenticationDispatcher)
                .thenApply(voidValue -> doAuthenticate(requestContext, dittoHeaders));
    }

    private  AuthenticationChain(final Collection<AuthenticationProvider<?>> authenticationProviders,
            final AuthenticationFailureAggregator authenticationFailureAggregator,
            final Executor authenticationDispatcher);

}