The OAuth3 is something I'm creating. It's 100% "backwards compatible".
It's OAuth2 but instead of saying "and every implementation is just different enough to make it not work with the code you already have" I'm saying "and you only need one implementation because they'll all use the exact same set of directives".
In this sense, any OAuth2 implementation can become an OAuth3 implementation simply by adding one file to the user-facing endpoint: oauth3.json
facebook could become an OAuth3 provider simply by adding
facebook.com/oauth3.json even though their api is *mostly* at
graph.facebook.com/api/v2.
I also want to standardize some things that are "out in the wild" such as `granted_scopes`, `expires_at`, `app_scoped_id`, and other common helpful parameters that aren't in the spec, but that providers (i.e. facebook) use and are important for all implementors.
So as I continue I'll standardize "an oauth3 provider should do xyz this way", but I'll add directives to the oauth3.json spec so that any provider that has an "in house" implementation can map something like `token_valid_until` to `expires_at` so that an oauth3 consumer doesn't have to know "oh, they call theirs this and it's in epoch seconds instead of ISO timestamp".
If a provider doesn't have a mapping in their oauth3.json, you just assume it isn't supported.
The only piece of information you'll need with oauth3 is something you could easily present to end users in a form field:
Login website:
<button type="submit">Login</button>