我有一个和许多或多或少相互依赖的服务。角客户端通过网关与服务进行通信。网关和服务(资源服务器)使用OAuth2进行保护,令牌由外部Auth提供。在我们使用假名的服务之间打电话。我们使用RequestInterceptor来假装在服务之间转发用户令牌。但是:一些服务在调用端点时使用AMQP创建事件。在再次侦听事件的服务中,正在调用其他服务。由于没有附加到传入消息的安全上下文,这些调用运行在401错误上。
是否有任何方法将安全上下文附加到AMQP-消息,或者通过客户端_凭据授予让假币获得令牌?
发布于 2021-01-14 09:42:24
正如许多其他来源所述,OAuth2FeignRequestInterceptor是解决该问题的可能方法。我害怕使用它,因为它被标记为不推荐使用。我刚刚看到评论说“在下一个主要版本中将转移到SpringCloudOpenf果真”。
因为这意味着我们的依赖关系将发生变化,所以使用以下解决方案应该没有问题:
@Configuration
public class FeignConfig {
private ClientCredentialsResourceDetails clientCredentialsResource() {
ClientCredentialsResourceDetails resource = new ClientCredentialsResourceDetails();
resource.setAccessTokenUri(<TOKEN_ENDPOINT>);
resource.setClientId(<CLIENT_ID>);
resource.setClientSecret(<SECRET>);
resource.setGrantType("client_credentials");
resource.setAuthenticationScheme(AuthenticationScheme.header);
return resource;
}
@Bean
public RequestInterceptor oauth2FeignRequestInterceptor() {
return new OAuth2FeignRequestInterceptor(new DefaultOAuth2ClientContext(), clientCredentialsResource());
}
}对于Security 5和OAuth2依赖项,如果您只在WebSecurity中使用http.oauth2ResourceServer().jwt()链,则不需要其他注释,正如我从这篇伟大的文章中学到的:https://blog.jdriven.com/2019/11/spring-cloud-gateway-with-openid-connect-and-token-relay/
https://stackoverflow.com/questions/65704934
复制相似问题