Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring security 使用Spring Security 5.2+在多线程上下文中高效地授权客户端凭证OAuth2Client Request;_Spring Security - Fatal编程技术网

Spring security 使用Spring Security 5.2+在多线程上下文中高效地授权客户端凭证OAuth2Client Request;

Spring security 使用Spring Security 5.2+在多线程上下文中高效地授权客户端凭证OAuth2Client Request;,spring-security,Spring Security,随着SpringSecurity5.2中引入了OAuth2AuthorizedClient管理器,有可能使用HTTP客户端或非WebClient的抽象来处理OAuth2客户端的授权 我们可以用像这样的东西 OAuth2AuthorizedClient authorizedClient = authorizedClientManager.authorize( OAuth2AuthorizeRequest .withClientRegistrationId("registra

随着SpringSecurity5.2中引入了
OAuth2AuthorizedClient管理器
,有可能使用HTTP客户端或非
WebClient
的抽象来处理OAuth2客户端的授权

我们可以用像这样的东西

OAuth2AuthorizedClient authorizedClient = authorizedClientManager.authorize(
    OAuth2AuthorizeRequest
        .withClientRegistrationId("registration-id")
        .principal("client-id")
        .build()
);
参考:

虽然我现在可以从
OAuth2AuthorizedClient
获取访问令牌(例如
String accessToken=authorizedClient.getAccessToken().getTokenValue()
),但我必须始终首先调用
authorizedClient.authorize(oAuth2AuthorizeRequest)
以确保我在调用下游服务之前拥有有效的访问令牌。如果访问令牌过期,则
authorize
调用将对令牌端点执行客户端凭据调用,并使用新令牌返回响应。但是,如果我的microservice同时收到多个调用(例如,在不同的请求线程上),则理论上,
authorize
调用可以为每个请求线程调用令牌端点,因为每个请求线程将确定访问令牌已过期,并在调用下游服务之前请求一个新令牌。只有使用有效令牌更新了
OAuth2AuthorizedClientRepository
,请求线程才会停止调用更多令牌端点调用。此外,可能会有一系列令牌端点响应,这些响应将相互覆盖,最终响应的访问令牌将在存储库中持久化,直到下一个到期

我想找到一种方法,在多线程上下文中有效地授权客户端凭据客户端,这样就不会触发令牌请求的竞争条件。我能想到的唯一解决方法是在访问令牌到期之前安排授权,或者使用Spring安全性来防止在等待第一个响应时进行多个令牌端点调用

如有任何建议,将不胜感激