当前位置: 首页 > 知识库问答 >
问题:

Spring boot:允许特定服务避免安全性

锺离韬
2023-03-14

我有多种服务。他们都使用jwt进行授权。但是,当我的服务相互通信时,我不希望它们进行身份验证。当客户端向serviceA发送请求,serviceA需要serviceB提供数据时,serviceA验证令牌就足够了(当客户端向serviceB发送请求时也是如此)。我使用eureka作为注册表,使用openfeign在服务之间进行通信。现在我总是收到这样的401回复:

feign.FeignException$Unauthorized: [401] during [GET] to [http://userservice/eschuler]

更具体地说,我的authservice希望向userservice发送请求。

@FeignClient(name = "userservice")
public interface UserClient {
    @GetMapping(value = "/{id}")
    ResponseEntity<UserAccount> getUserById(@PathVariable String id);
}

这是包含getUserById方法的UserController:

@RestController
@RequestMapping(value = "/kimoji/rest/users")
public class UserController {

    private final UserRepository userRepository;
    private final PasswordEncoder encoder;
    private final JwtTokenService jwtTokenService;

    public UserController(UserRepository userRepository, PasswordEncoder encoder, JwtTokenService jwtTokenService) {
        this.userRepository = userRepository;
        this.encoder = encoder;
        this.jwtTokenService = jwtTokenService;
    }

    @GetMapping(value = "/{id}")
    public ResponseEntity<UserAccount> getUserById(@PathVariable String id) {
        Optional<UserAccount> userAccount = userRepository.findById(id);
        return userAccount.map(ResponseEntity::ok).orElseGet(() -> ResponseEntity.notFound().build());
    }


 ...
    
}

这是来自我的用户服务的WebSecurityConfig:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private JwtAuthenticationEntryPoint unauthorizedHandler;

    @Autowired
    private JwtAuthenticationProvider jwtAuthenticationProvider;

    @Autowired
    public void configureAuthentication(AuthenticationManagerBuilder authenticationManagerBuilder) {
        authenticationManagerBuilder.authenticationProvider(jwtAuthenticationProvider);
    }

    @Bean
    public JwtAuthenticationTokenFilter authenticationTokenFilterBean() {
        return new JwtAuthenticationTokenFilter();
    }

    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity
                .csrf().disable()
                .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
                .authorizeRequests()
                .antMatchers(HttpMethod.POST, "/kimoji/rest/users/register").permitAll()
                .anyRequest().authenticated();

        httpSecurity.addFilterBefore(authenticationTokenFilterBean(), UsernamePasswordAuthenticationFilter.class);
        httpSecurity.headers().cacheControl();
    }

}

共有1个答案

贺俊材
2023-03-14

你要做的不是逃避安全,而是传递一个令牌。

如果服务A正在调用服务B,并且请求来自外部客户端。只需将源于客户端的相同令牌传递给服务B,再传递给服务A。

如果服务A正在发起呼叫(某种维护作业),则使用客户端凭据流转到您的身份提供商,并为服务A创建令牌以传递给服务B。

 类似资料:
  • 我们可以设置并允许跨源资源共享 所有域、特定域,不允许任何域 但我想知道允许CORS为特定的领域有意义。 如果黑客知道服务器允许的域。(例如) 黑客可以将请求中的源头伪造为 因此,从安全的角度来看。我认为只允许所有域而不允许任何域是有意义的。因为很容易伪造请求者的来源 我说的对吗??

  • 我有一个实现远程后台服务的应用程序。这个服务是用来下载线程中的文件的(我想说这个服务是作为下载管理器工作的)。 当我想下载一个文件时,我将url发送给服务,服务启动一个线程(我使用的是AsyncTask,但它只在Android4.1中工作)。但下载迟早会停止,我能够知道这一点,因为我显示的通知不再更新。当我单击取消下载的通知时,将向服务发送一个挂起的意图,告诉它取消下载,但当服务重新创建时,将取消

  • 我有一个Terraform用来管理我的云资源的服务帐户,我们称之为。我需要给予它足够的访问权限来创建/删除/编辑其他服务帐户,但不能更改它自己或项目中不应该接触的其他SAs。 我试着在那里添加一个条件,但看起来‘服务帐户’不是可以在条件(?)中使用的资源类型之一。下面是绑定该角色的HCL片段(我使用Terraform的事实与此无关): 当我删除该条件时,一切正常,但的权限远远超过它所需的权限。它甚

  • 问题内容: 我在Heroku服务器上托管了一个网站( 我是Heroku btw的新用户 ),并且由于它是免费软件包,因此在 闲置30m 后便 进入 休眠 状态 ,并在用户点击它后再次将其投入使用,大约需要7秒才能成功。 我正在考虑运行nodejs作业或每隔29m就会打开网站的一次作业,以使服务器永不休眠,最初,我得到的是这样的内容: 注意:那只是在浏览器中打开它,而不是关闭它。 首先,这样做是否合

  • 我想在springboot应用程序中为我的Spring https REST服务(当前不安全)启用基本身份验证。多个客户机正在使用这些服务,虽然有些客户机可以转移到安全的服务,但有些客户机仍然希望使用不安全的版本几个月。如何在同一个spring boot应用程序中同时公开安全和不安全的服务? 虽然我已经为Apache cxf REST服务做到了这一点,方法是在不同的端口中托管相同的服务&只保护一个

  • 在过去的几天里,我一直在和Spring保安公司战斗,所以我希望有人能在这里帮助我。 我正在使用Spring Boot 1.2.5 我使用的是Spring Actuator和Spring Remote Shell,它们已经从类路径中删除,认为它们可能会引起问题 我排除了SecurityAutoConfigsion,因为它可能会导致我的问题 这是我的主要课程 这是我的安全配置 我的问题/问题是 > C