我整天阅读了有关如何将Spring Security OAuth与Cucumber连接的文章,但是没有一个与我的用例匹配,我只是看到人们有相同的问题:
目标是能够从黄瓜方案中访问“受限制的” API端点,并且不会由于@PreAuthorize方法拒绝访问而引起烦人的401错误。这与使用MockMvc的@WebMvcTest测试非常相似,您可以在其中轻松注入安全过滤器链,并且它甚至不关心是否在OAuth中或不在后台,因为过滤器链不是真正的。
因此,对于黄瓜,我希望能够进行一个带有注释的简单测试
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
可以使用类似@WebMvcTest的@WithMockUser(...)的方法,但这显然不起作用,因为在OAuth安全过滤器链中,应该使用真正的jwt令牌,并且我在API端点上进行操作(因此是某种黑匣子):
所以我现在可以发布各种代码,但是我向您保证,安全配置实际上是SpringSecurity配置的基本设置,如下所示,尝试在黄瓜方案中进行身份验证:
@Override
public void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.sessionAuthenticationStrategy(sessionAuthenticationStrategy())
.and()
.exceptionHandling().authenticationEntryPoint((req, rsp, e) -> rsp.sendError(HttpServletResponse.SC_UNAUTHORIZED, e.getMessage()))
.and()
.authorizeRequests()
.antMatchers("/**").authenticated();
}
我考虑过以下解决方案,但都不是真正的解决方案或有效的解决方案:
所以也许有人在那里知道有关如何使用Spring Security OAuth对黄瓜中的场景进行身份验证这一非常普遍的问题的解决方案,假设那里没有真正的授权服务器可以与之交谈没有端到端测试。因此,我想我必须采用创建“测试JWT”并将其附加到假客户端请求的方法,但是该怎么做呢?生成不是问题,但是,如果这是首选方法,那么如何正确附加它?
当我从控制器内部删除@PreAuthorize批注时,将“ .antMatchers(” / “)。authenticated()”更改为“ .antMatchers(” / “))。 ()”,那么它正在工作。 ..