Implement a builder that will call an OAuth provider for authentication using a client flow, a user flow or, if available, a refresh token.