0

Wir haben eine Anwendung mit spring-vault. Es authentifiziert sich mit einer AppRole bei Vault. Wir verwenden das Token, das wir von dieser Operation erhalten, um Geheimnisse zu lesen und zu schreiben. Die Konfiguration für die VaultEndpoint und AppRoleAuthentication wird automatisch aus einer Eigenschaftendatei konfiguriert.Verwenden Sie mehrere ClientAuthentation mit Spring-Vault

-Code sieht wie folgt aus:

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

Ich möchte autowire Fähigkeiten halten, sondern auch unterstützen zwei weitere clientAuthentication Implementierungen:

  • Die bestehende TokenAuthentication
  • Eine benutzerdefinierte ClientAuthentication Implementierung (LDAP Auth-Backend)

Das Endergebnis wäre, dass zwei Authentifizierungsmechanismen gleichzeitig zur Verfügung stehen. Einige Vorgänge werden mit den Anmeldeinformationen der Anwendung ausgeführt (AppRole in Vault), andere mit den Anmeldeinformationen des Benutzers (LDAP in Vault).

Ich denke, ich kann mehrere AbstractVaultConfiguration Klassen erstellen, die jeweils eine andere ClientAuthentication Ableitung zurückgeben. Aber wie kann ich ein VaultTemplate für die Konfigurationsklasse erstellen?

+0

Möchten Sie Optionen zur Clientauthentifizierung hinzufügen, für die eine einzelne Authentifizierung verwendet wird, oder möchten Sie mehrere Authentifizierungsmechanismen unterstützen, die gleichzeitig (innerhalb derselben Anwendungsinstanz) aktiv sind? – mp911de

+0

Beide sind gleichzeitig in derselben Anwendungsinstanz aktiv. Klar meine Frage, danke! – ixe013

Antwort

2

Wenn Sie eine zusätzliche VaultTemplate Bean haben möchten, müssen Sie die Bean selbst konfigurieren und deklarieren. Sie können das Fundament von AbstractVaultConfiguration erhalten. Ihre Konfiguration könnte wie folgt aussehen:

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

Auf der Client-Seite (die zweite VaultTemplate verwenden) Sie müssen sicherstellen, die entsprechende Instanz zu suchen. Spring beschränkt Sie nicht auf eine Bean pro Typ, sondern ermöglicht die Registrierung mehrerer Beans desselben Typs.

Verwandte Themen