0

spring-vaultを使用するアプリケーションがあります。 AppRoleを使用してVaultに認証されます。私たちはその操作から得たトークンを使って秘密を読み書きします。 VaultEndpointAppRoleAuthenticationの設定は、プロパティファイルから自動設定されます。複数のClientAuthentiationをスプリングボールで使用

コードは次のようになります。

@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 
} 

私はautowire機能を維持したいが、他の2つのClientAuthentication実装をサポートします:

  • 既存TokenAuthentication
  • カスタムClientAuthentication実装(LDAP auth backend)

最終的には、同時に2つの認証メカニズムを利用できるようになります。一部の操作は、アプリケーションの資格情報(AppRole in Vault)、ユーザーの資格情報(Vault内のLDAP)を使用して実行されるものがあります。

私は複数のAbstractVaultConfigurationクラスを作成でき、それぞれ異なるClientAuthentication派生クラスを返すと思います。しかし、どのように構成クラスのVaultTemplateを作成できますか?

+0

単一認証が使用されるクライアント認証に関するオプションを追加するか、(同じアプリケーションインスタンス内で)同時にアクティブな複数の認証メカニズムをサポートするかどうかを選択しますか? – mp911de

+0

両方とも同じアプリケーションインスタンスで同時にアクティブになります。私の質問を明確にしました、ありがとう! – ixe013

答えて

2

追加のVaultTemplate Beanを追加する場合は、Beanを構成して宣言する必要があります。 AbstractVaultConfigurationによって提供される基盤を維持することができます。あなたは適切なインスタンスを検索することを確認する必要があります(第2 VaultTemplateを使用して)クライアント側で

@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, 
               …); 
    } 
} 

:あなたの設定は次のようになります。 SpringはタイプごとにBeanに制限するのではなく、同じタイプのBeanを複数登録することができます。

関連する問題