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

在spring-vault中使用多个ClientAuthentiation

符风畔
2023-03-14

我们有一个使用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
}
    null

最终结果将是同时具有两个可用的身份验证机制。一些操作将使用应用程序的凭据(AppRole in Vault)执行,其他操作将使用用户的凭据(LDAP in Vault)执行

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

共有1个答案

商嘉木
2023-03-14

如果您希望有一个附加的VaultTemplatebean,那么您需要自己配置和声明该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并不限制每个类型只能有一个bean,而是允许注册同一类型的多个bean。

 类似资料: