O problema é que, como apontou @HBruijn, o valor TOTP usado para fazer login em um serviço pode ser usado pelo invasor para efetuar login em outro serviço. E isso dentro de um intervalo de tempo de talvez dois minutos. Embora seu timestep possa ser apenas 30sec, o RFC especifica que o serviço de validação deve pesquisar o valor OTP para frente e para trás no tempo. Isto é recomendado devido ao desvio do relógio. link
O outro ponto é que todo o seu sistema é tão seguro quanto a parte mais semanal. Se algum dos sistemas / bancos de dados perder o segredo do OTP, todos os sistemas serão comprometidos.
Ao terminar sua pergunta, você deve pensar em usar um sistema centralizado, que armazena os segredos e realiza a validação. Dessa forma, não há possibilidade de ataques de repetição e você só precisa proteger o segredo da OTP em um só lugar.
Você pode querer dar uma olhada em privacyIDEA , que exatamente faz isso. É um sistema de autenticação que gerencia centralmente os dispositivos de autenticação, como tokens TOTP ou Apps para usuários. Todos os aplicativos autenticados contra esse serviço. (Isenção de responsabilidade: sou desenvolvedor principal do privacyIDEA)
O problema é que todos os aplicativos conectados precisam estar conectados, ou seja, cada aplicativo deve poder conversar com o privacyIDEA. Para isso, o aplicativo deve ser capaz de atuar como um cliente RADIUS ou falar com o API REST de autenticação . Existem vários plug-ins para muitos aplicativos diferentes como o OTRS, ownCloud, Wordpress, dokuwiki, Typo3 ...