Description
We've received a number of requests/PRs for various interesting authentication methods (e.g. #1378, #1432, #738, and more), and this is more or less a repost of something posted on one of those Issues.
XIVLauncher may benefit from supporting plugins designed to allow integration with authentication providers. These plugins would provide an API surface for users to add support for their own custom authentication integrations however they see fit.
The primary intent of the authentication plugin system would be to provide a deep connection between XIVLauncher and any given password manager or provider. The API surface should include functionality for:
- Providing a list of saved accounts from the backend store
- Providing the credentials (username + password + optionally OTP) from any given backend
- Retrieving an OTP code from a backend, allowing devs to write their own OTP providers
This would open a number of use cases, such as:
- Allowing XIVLauncher to grab all Square Enix accounts from 1Password, allowing the user to choose the saved password to use, and logging in with it.
- Allowing developers to store their (encrypted) credentials backed by a U2F security key rather than the Windows Credential Store.
- Allowing porting the OTP server feature to its own plugin.
The Authentication Plugin feature should be documented and open for developers to use, although the project can officially support certain "known-good" integrations (e.g. those for 1Password, Bitwarden, and others). A type of "plugin store" should be out of scope for this feature - support is provided only for official integrations, others are supported only provisionally.
This system does have a slight impact to XIVLauncher's security, but I would consider these changes to be a non-issue to a benefit. Password managers feel more secure than the local Windows Credential Store. Developers may choose to implement bad ideas such as plugins with hardcoded OTP secrets, but this is no worse than existing integrations with the currently-existing webserver.
This system would be preferred over the webserver as it's overall simpler and can provide a better experience by removing the need for launch scripts and similar. It would also arguably be more secure, is simpler, and doesn't require firewall management.