TL; реализации DR OAuth2 похожи, но отличаются некоторыми деталями. Если библиотека не была разработана или протестирована с конкретной реализацией сервера, скорее всего, она вообще не будет работать с ней. Мне еще предстоит увидеть библиотеку, которая поддерживает более одного поставщика.
Длинная история:
Хотя все реализации OAuth2 похожи, дьявол кроется в деталях.
Например, сравнивая шаг 1 (код запроса) протоколов Facebook и Google OAuth2:
- с помощью Facebook вы регистрируетесь и вносите в белый список весь домен, для Google вы указываете определенные URL-адреса.
- Facebook позволяет добавлять произвольные & параметры в redirect_uri, Google позволяет только передавать и указывать URL-параметры
- Google требует указать параметр response_type = code, Facebook не
Получение токена доступа также не вполне совместимо:
- Google разрешает только POST-запрос, Facebook поддерживает как POST, так и GET
- Google возвращает ответ JSON, Facebook - строку URL
- Facebook требует точно такой же redirect_uri, что и на шаге 1, Google не проверяет наличие & state
Я не собирался составлять полный список всех отклонений.
Это лишь некоторые примеры, которые я заметил, читая публичную документацию и экспериментируя с API.
ВКонтакте в основном использует причуды Facebook, но на шаге 2 возвращает JSON, аналогично Google.
После того, как вы перепрыгнули через все обручи и получили токен доступа, все становится еще сложнее.
OAuth не пытается охватить структуру API или доступ к ним, поэтому вам нужны совершенно разные процедуры для извлечения имени пользователя и электронной почты из каждой сети.