如何使spring忽略botframework端点中的令牌

prdp8dxp  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(375)

我有一个与oauth2authenticationprocessingfilter相关的问题,我的应用程序需要来自microsoft Team bot framework(/api/messages)的传入消息。
消息可能会被过滤,因为它包含无效的令牌,但此端点应该是公共的,因为它是在配置中设置的(nosecurityallowedurlpatterns包含该端点):

http.requestMatchers()
          .and()
          .authorizeRequests()
          .antMatchers(noSecurityAllowedUrlPatterns.toArray(new String[0]))
          .permitAll()
          .anyRequest()
          .authenticated();

以下是筛选器中引发异常的行:

Authentication authResult = this.authenticationManager.authenticate(authentication);

这是终点:

@PostMapping({"/messages"})
@PreAuthorize("permitAll()")
public CompletableFuture<ResponseEntity<Object>> incoming(
      @RequestBody Activity activity,
      @RequestHeader(value = "Authorization", defaultValue = "") String authHeader) {
...
}

如何成功地设置配置以避免此端点中的oauth,或者如何(以某种方式)将传入令牌添加到有效的一个列表中?。可能过滤器列表顺序有问题,但是

nbysray5

nbysray51#

imo您的httpsecurity配置看起来不正确。如果应该公开的端点是 /api/messages 并且应保护所有其他端点,然后应按如下方式更改配置:

http.authorizeRequests()
    .antMatchers("/api/messages")
    .permitAll()
    .and()
    .authorizeRequests()
    .anyRequest()
    .authenticated();

iirc通过这种方式定义从上到下应用的过滤器。意味着如果请求到达后端,并且配置的第一部分与请求匹配,则第二部分不再相关。另一方面,如果一个请求击中了与第一部分不匹配的后端,那么将检查第二部分,依此类推。
本指南解释了一般行为:https://spring.io/guides/topicals/spring-security-architecture
让我知道代码是否有效(代码段是从内存中创建的)。:)

相关问题