首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring -如何在没有用户的情况下通过假装调用安全服务

Spring -如何在没有用户的情况下通过假装调用安全服务
EN

Stack Overflow用户
提问于 2021-01-13 15:28:30
回答 1查看 295关注 0票数 1

我有一个和许多或多或少相互依赖的服务。角客户端通过网关与服务进行通信。网关和服务(资源服务器)使用OAuth2进行保护,令牌由外部Auth提供。在我们使用假名的服务之间打电话。我们使用RequestInterceptor来假装在服务之间转发用户令牌。但是:一些服务在调用端点时使用AMQP创建事件。在再次侦听事件的服务中,正在调用其他服务。由于没有附加到传入消息的安全上下文,这些调用运行在401错误上。

是否有任何方法将安全上下文附加到AMQP-消息,或者通过客户端_凭据授予让假币获得令牌?

  • Spring-version: 2.3.5
  • Spring云:霍克斯顿SR9
EN

回答 1

Stack Overflow用户

发布于 2021-01-14 09:42:24

正如许多其他来源所述,OAuth2FeignRequestInterceptor是解决该问题的可能方法。我害怕使用它,因为它被标记为不推荐使用。我刚刚看到评论说“在下一个主要版本中将转移到SpringCloudOpenf果真”。

因为这意味着我们的依赖关系将发生变化,所以使用以下解决方案应该没有问题:

代码语言:javascript
复制
@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/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65704934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档