Spring security Spring安全性:具有多个客户端的自定义RequestEntityConverter

Spring security Spring安全性:具有多个客户端的自定义RequestEntityConverter,spring-security,spring-security-oauth2,Spring Security,Spring Security Oauth2,我正在使用Auth0获取客户端凭据流,以便使用SpringSecurity5.4.1。我创建了一个小演示应用程序供参考: 一切正常,但我想知道如何处理多个OAuth2客户机。据我所知,在中进行的配置对任何提供程序的所有客户端凭据流都有效,对吗 如果我有另一个提供者,并且不想以同样的方式转换RequestEntity,该怎么办?多租户通常没有完美的答案,因为这在很大程度上取决于您希望在多早的请求中分叉行为 在Spring Security的OAuth 2.0客户端支持中,ClientRegistr

我正在使用Auth0获取客户端凭据流,以便使用SpringSecurity5.4.1。我创建了一个小演示应用程序供参考:

一切正常,但我想知道如何处理多个OAuth2客户机。据我所知,在中进行的配置对任何提供程序的所有客户端凭据流都有效,对吗


如果我有另一个提供者,并且不想以同样的方式转换RequestEntity,该怎么办?

多租户通常没有完美的答案,因为这在很大程度上取决于您希望在多早的请求中分叉行为

在Spring Security的OAuth 2.0客户端支持中,
ClientRegistration
是租户,租户信息在大多数客户端API中都可用

例如,根据请求中的
ClientRegistration
,您的
Auth0RequestEntityConverter
可能具有不同的行为:

公共请求实体转换(
OAuth2ClientCredentialsGrantRequest(请求){
ClientRegistration client=request.getClientRegistration();
如果(客户…){
}否则,如果(客户…){
} ...
}
或者,如果您需要配置比请求实体转换器更多的东西,您可以通过为每个提供程序构建一个
OAuth2AuthorizedClient管理器
来提前分叉行为:

公共类ClientsOAuth2AuthorizedClientManager实现OAuth2AuthorizedClientManager{
私人最终地图管理员;
// ...
公共OAuth2AuthorizedClient授权(OAuth2AuthorizeRequest请求){
字符串clientRegistrationId=request.getClientRegistrationId();
返回此.managers.get(clientRegistrationId).authorize(request);
}
}