# 2FA
The current core implementation allow us to implement multiple steps. If the first provider returns a positive
value smaller than 100 indicates that the authentication was successful, but that further services should
also perform their own authentication.
This can be used to implement a second authentication.
## Implementation ideas
@TODO: Check: \url{https://www.heise.de/ct/artikel/Passwortloses-Anmelden-dank-FIDO2-4494951.html}
Implement LoginProvider for BE and FE
**TwoFactorAuthenticationProviderInterface**
- getLoginTemplate(): string
- authenticate(ServerRequestInterface $request): bool
**EmailAuthenticationProvider implements TwoFactorAuthenticationProviderInterface**
- send an e-mail with auth code
- require an email address in the user record
**SMSAuthenticationProvider implements TwoFactorAuthenticationProviderInterface**
- send a SMS with auth code
- require a valid phonenumber in the user record
- require an additional interface to implement different calling provider, like SMS77, twillio, etc.
**OneTimePasswordAuthenticationProvider implements TwoFactorAuthenticationProviderInterface**
- use an app like Google Authenticator (\url{https://support.google.com/accounts/answer/1066447?co=GENIE.Platform%3DAndroid\&hl=de)} or Authy (\url{https://authy.com/)}
- require a setup process in the user settings (BE) and a complete new process in EXT:felogin (for FE)
**TANAuthenticationProvider implements TwoFactorAuthenticationProviderInterface**
- use an old school TAN list
- require a TAN list generator for each user
- priority: low, because TAN list not very secure, so maybe don't implement this provider
**RSASecureIDAuthenticationProvider implements TwoFactorAuthenticationProviderInterface**
- use an hardware token
- require special API knowledge, maybe not for the core, but this could be implemented with an own extension
**YubicoAuthenticationProvider implements TwoFactorAuthenticationProviderInterface**
- use an hardware token (yubikey)
- require special API knowledge: \url{https://developers.yubico.com/}
- Example for TYPO3 - https://extensions.typo3.org/extension/sf_yubikey/