将多个客户端身份验证与弹簧库一起使用



我们有一个使用 spring-vault 的应用程序。它使用 AppRole 向保管库进行身份验证。我们使用从该操作中获取的令牌来读取和写入机密。VaultEndpointAppRoleAuthentication的配置是从属性文件自动配置的。

代码如下所示:

@Autowired
private ApplicationContext context;
@Autowired
private VaultOperations vault;
private Logger logger = LoggerFactory.getLogger(VaultFacade.class);
public VaultFacadeImpl() {
    logger.debug("Creating VaultFacade with autowired context");
    context = new AnnotationConfigApplicationContext(VaultConfig.class);
    vault = context.getBean(VaultTemplate.class);
    //vault variable ready to use with vault.read or vault.write 
    //in our VaultFacadeImpl
}

我想保留自动连线功能,但也支持另外两个客户端身份验证实现:

  • 现有TokenAuthentication
  • 自定义ClientAuthentication实现(LDAP 身份验证后端(

最终结果是同时具有两种可用的身份验证机制。某些操作将使用应用程序的凭据(保管库中的 AppRole(执行,其他操作将使用用户的凭据(保管库中的 LDAP(执行。

我想我可以创建多个AbstractVaultConfiguration类,每个类返回不同的ClientAuthentication导数。但是,如何为配置类创建 VaultTemplate?

如果你想有一个额外的VaultTemplate bean,那么你需要自己配置和声明 bean。您可以保留AbstractVaultConfiguration提供的基础。您的配置可能如下所示:

@Configuration
public class CustomConfiguration {
    @Bean
    public VaultTemplate ldapAuthVaultTemplate(ClientFactoryWrapper clientHttpRequestFactoryWrapper, 
                            ThreadPoolTaskScheduler threadPoolTaskScheduler) {
        return new VaultTemplate(…, 
                clientHttpRequestFactoryWrapper.getClientHttpRequestFactory(), 
                ldapSessionManager(threadPoolTaskScheduler));
    }
    @Bean
    public SessionManager ldapSessionManager(ThreadPoolTaskScheduler threadPoolTaskScheduler) {
        ClientAuthentication clientAuthentication = new MyLdapClientAuthentication(…);
        return new LifecycleAwareSessionManager(clientAuthentication,
                                                threadPoolTaskScheduler, 
                                                …);
    }
}

在客户端(使用第二个VaultTemplate(,您需要确保查找适当的实例。Spring 并不限制每种类型的豆子,但允许注册同一类型的多个豆子。

相关内容

  • 没有找到相关文章

最新更新