我有一个与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,或者如何(以某种方式)将传入令牌添加到有效的一个列表中?。可能过滤器列表顺序有问题,但是
1条答案
按热度按时间nbysray51#
imo您的httpsecurity配置看起来不正确。如果应该公开的端点是
/api/messages
并且应保护所有其他端点,然后应按如下方式更改配置:iirc通过这种方式定义从上到下应用的过滤器。意味着如果请求到达后端,并且配置的第一部分与请求匹配,则第二部分不再相关。另一方面,如果一个请求击中了与第一部分不匹配的后端,那么将检查第二部分,依此类推。
本指南解释了一般行为:https://spring.io/guides/topicals/spring-security-architecture
让我知道代码是否有效(代码段是从内存中创建的)。:)