This extension to the existing doorkeeper grant flows, solves exactly this problem: https://github.com/doorkeeper-gem/doorkeeper-grants_assertion
The assertion flow is an exchange between a provider's access_token, for an access token from your oauth provider.