==================== Two-factor providers ==================== .. sectionauthor:: Christoph Wurst Two-factor auth providers apps are used to plug custom second factors into the Nextcloud core. Implementing a simple two-factor auth provider ---------------------------------------------- Two-factor auth providers must implement the `OCP\\Authentication\\TwoFactorAuth\\IProvider `_ interface. The example below shows a minimalistic example of such a provider. .. code-block:: php `_. You can have the registry injected via constructor dependency injection. Whenever the provider state is changed (user enables/disables the provider), the ``enableProviderFor`` or ``disableProviderFor`` method must be called. .. note:: This provider registry was added in Nextcloud 14. For backwards compatibility, the server still occasionally uses the ``IProvider::isTwoFactorAuthEnabledForUser`` method if the provider state has not been set yet. This method will be removed in future releases. Registering a two-factor auth provider -------------------------------------- You need to inform the Nextcloud core that the app provides two-factor auth functionality. Two-factor providers are registered via ``info.xml``. .. code-block:: XML OCA\TwoFactor_Test\Provider\TwoFactorTestProvider Providing an icon (optional) ---------------------------- To enhance how a provider is shown in the list of selectable providers on the login page, an icon can be specified. For that the provider class must implement the `IProvidesIcons `_ interface. The light icon will be used on the login page, whereas the dark one will be placed next to the heading of the optional personal settings (see below). Provide personal settings (optional) ------------------------------------ Like other Nextcloud apps, two-factor providers often require user configuration to work. In Nextcloud 15 a new, consolidated two-factor settings section was added. To add personal provider settings there, a provider must implement the `IProvidesPersonalSettings `_ interface. Make a provider activatable by the admin (optional) --------------------------------------------------- In order to make it possible for an admin to enable the provider for a given user via the occ command line tool, it's necessary to implement the `OCP\\Authentication\\TwoFactorAuth\\IActivatableByAdmin `_ interface. As described in the linked interface documentation, this should only be implemented for providers that need no user interaction when activated. Make a provider deactivatable by the admin (optional) ----------------------------------------------------- In order to make it possible for an admin to disable the provider for a given user via the occ command line tool, it's necessary to implement the `OCP\\Authentication\\TwoFactorAuth\\IDeactivatableByAdmin `_ interface. As described in the linked interface documentation, this should only be implemented for providers that need no user interaction when deactivated.