Interface for authentication plugins.
Authentication must be fast since it takes place at the beginning of every request. Multiple plugins may be registered at the same time. They are instantiated one by one, as needed. The first plugin to successfully return a user object wins.