We should align (Server|Servlet)OAuth2AuthorizedClientExchangeFilterFunction with OAuth2ClientHttpRequestInterceptor which introduces a PrincipalResolver as a flexible strategy for resolving the Authentication for a given request.

For ServletOAuth2AuthorizedClientExchangeFilterFunction, the interface could be:

@FunctionalInterface
public interface PrincipalResolver {

    @Nullable
    Authentication resolve(ClientRequest request);

}

For ServerOAuth2AuthorizedClientExchangeFilterFunction, it may need to return a Mono<Authentication> to accommodate ReactiveSecurityContextHolder:

@FunctionalInterface
public interface PrincipalResolver {

    @Nullable
    Mono<Authentication> resolve(ClientRequest request);

}

Comment From: evgeniycheban

Hi, @sjohnr can I work on this?

Comment From: jgrandja

@evgeniycheban Are you still interested on working on this?

Comment From: evgeniycheban

Hi @jgrandja, yes, you can assign it to me, however at the moment I'm working on gh-17188, I will submit a draft solution in a few days so we can discuss it further.

Comment From: jgrandja

Thanks and no rush @evgeniycheban. I have quite a bit going on now.