【发布时间】:2020-07-13 10:30:04
【问题描述】:
我有 Spring Spring OAuth2 授权服务器。这是我的微服务之一(称为用户管理)。它在数据库中保存用户和密码,还保存一些其他“安全相关”实体。这意味着我有 UserDetailsService 的自定义实现,它包装了 Spring Security 操作的用户加载。 这个微服务是授权服务器,但它也是资源服务器,因为存在一些与用户、组织、组织成员等相关的持久性和域逻辑......我的大多数 REST 端点都使用标头中的 OAuth2 令牌访问,一切正常。
但我也在使用通常由 Spring Boot Admin 服务器访问的 Spring Actuator。对于这些端点,我使用的是 Http 基本身份验证,因此我有一些用于 /actuator/** 端点的自定义 WebSecurityConfigurerAdapter。在所有微服务中,我都有在 application.yaml 配置中定义的这些执行器端点访问的用户,它工作正常。但是...如果使用自定义 UserDetailsService 实现的这种用户管理将不起作用。
问题是,在执行执行器端点调用的基本身份验证时,DaoAuthenticationProvider 对我的自定义 UserDetailsService 有引用,它试图在我的数据库中查找用户,但它不存在。当所有其他微服务发生这种情况时,就会有 UserDetailsService 的 InMemoryUserDetailsManager 实现(由 DaoAuthenticationProvider 使用),其中包含来自 application.yaml 的用户。
知道如何解决或解决问题吗?
- 创建执行器端点访问数据库的用户?我不喜欢它,因为它与我的其他微服务不同
- 创建一个委托 UserDetailsService 来检查两个用户存储?我不知道如何配置它,因为 InMemoryUserDetailsManager 看起来不像托管 bean,所以有一些手动编程。
- 或者有什么不同的正确方法吗?如何配置?
非常感谢, 卢卡斯
【问题讨论】:
标签: spring-security basic-authentication spring-security-oauth2