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

使用OAuth2身份验证启用Spring Boot健康执行器

阚小云
2023-03-14

我们已经看到了一些与Spring Boot的1.5+版本的健康执行器endpoint相关的问题。经历了其中的一些,我们仍然不知所措。

我们的目标是:

  1. 要利用Spring Boot/Spring security对安全筛选器链接的自动配置(即不必完全实现/配置HttpSecurity)
  2. 启用安全的运行状况访问(查看应用程序的运行状况信息的完整视图)
  3. 启用不安全的运行状况访问(允许endpoint在Kubernetes中充当活性探测器)

我们已经尝试:

    null
  • 匿名请求/healtendpoint作为不安全的
  • /healtendpoint发出的经过预身份验证的请求(即包含经过预身份验证的授权:承载...头的请求),该endpoint没有适当的授权或角色来充当不安全的
  • /healtendpoint发出的经过预身份验证的请求(即包含经过预身份验证的授权:承载...头的请求),该endpoint具有适当的授权或角色,可以作为安全的
  • 运行

我们可以轻松地允许任何请求访问/healt,方法如下:

@Configuration
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
  @Override
  public void configure(WebSecurity web) throws Exception {
    super.configure(web);
    web.ignoring().antMatchers(HttpMethod.GET, "/health", "/info");
  }
}

而这仅仅作为一个准备/活跃度探测是很好的。然而,当用户实际通过身份验证时,它并不能提供查看哪些支持服务可能行为不当的好处。

提前道谢!

共有1个答案

张宣
2023-03-14

我遇到了类似的情况,这在一定程度上起到了作用:为执行器添加一个hacky访问规则,例如:#oauth2.ClientHasRole('role_client')或hasRole('role_anonymon'),它允许为执行器endpoint填充安全上下文(对于经过身份验证的和未经过身份验证的请求),并调整“敏感”执行器endpoint配置。/health在这种情况下应返回匿名的基本信息和身份验证的完整信息,前提是启用管理安全性并将其标记为非敏感。您仍然需要保留筛选器配置

 类似资料:
  • 我们正在Spring Boot2应用程序中使用基于令牌的身份验证(带有Spring Security)。现在我介绍Spring引导执行器到它。我想配置endpoint,使其在没有任何权限的情况下可见,但仅在经过授权后才显示健康检查详细信息。 我找到了属性,该属性应该很有帮助,但现在我正在与Spring Security配置作斗争,以便让每个人都能看到: 在下,使用令牌授权的用户应看到: 你也面临过

  • 我正在使用SpringBoot开发具有微服务架构的Rest Backend。为了保护endpoint,我使用了JWT令牌机制。我正在使用Zuul API网关。 如果请求需要权限(来自JWT的角色),它将被转发到正确的微服务。Zuul api网关的“WebSecurityConfigrerAdapter”如下。 这样,我必须在这个类中编写每个请求授权部分。因此,我希望使用方法级安全性,即“Enabl

  • 我需要在使用PKCE的云运行中验证一个服务帐户(使用容器调用角色)。基本上,我的iOS应用程序发送HTTPS请求来调用特定的云运行容器(使用Django Rest框架)。 我找到了这个示例(它通过自签名的JWT向云运行endpoint进行身份验证,以换取令牌)。这正是我所需要的,但我想添加PKCE。我很困惑,我应该把code_verifier和code_challenge发送到哪里?如果我在容器中

  • 我正在将一个项目从Spring Boot1.x迁移到Spring Boot2.x。唯一剩下的,给我带来麻烦的是Spring引导执行器。 现在我使用了执行器库的较新版本,我不再接收那些附加信息(在提供凭据时)。我只看到: 一开始我想也许我没有正确设置凭据,但通过故意提供无效凭据,我得到了401未经授权。所以不可能是身份验证。 有什么建议吗?

  • 我需要改变频率来检查springboot执行器中的DB运行状况。默认DB运行状况检查查询每毫秒执行一次。我想让这个查询每1分钟后执行一次,而不是毫秒。有什么方法可以自定义它吗?

  • null 我研究了OAuth2隐式授权,但它要求用户在成功验证后批准/拒绝应用程序。它在我的情况下不起作用,因为我同时拥有应用程序和API。 我查看了OAuth2密码授权,它并不完美,因为我需要公开client_id/client_secret。 我关注OAuth2的原因是因为该API最终将是公开的。 忘记OAuth2,在用户发布用户名/密码时手动生成access_token(在本例中,当API公