Введение
У меня есть собственная база данных учетных записей пользователей, и я создаю сервер авторизации oauth2 для централизации логики аутентификации на сайтах моих компаний с использованием authorization code
типа предоставления.
Допустим, я развернул страницу входа на сервер авторизации на https://auth.my.company.com
и развернул веб-сайт на https://my.website1.com
. Когда пользователь нажимает кнопку login
в https://my.website1.com
, типичный поток кода авторизации oauth2 будет запущен, как показано на рисунке ниже.
Объяснить картину:
- Пользователь имеет доступ к
https://my.website1.com
, который отображает кнопку входа в систему.
- Пользователь переходит на централизованную страницу входа с URL
https://auth.my.company.com?client_id=mysite1&redirect_url=https://my.website1.com/oauth/callback
- Пользователь вводит имя пользователя и пароль и отправляет форму входа.
- После того, как сервер аутентификации проверит учетные данные пользователя, он перенаправит пользователя обратно на redirect_url
https://my.website1.com/oauth/callback?auth_code=abcd
, передав параметр auth_code=abcd
- Бэкэнд-сервер веб-сайта связывается с сервером авторизации, используя входной код auth_code для аутентификации пользователя, сервер авторизации возвращает токен доступа.
- Сайт отвечает пользователю, что процесс входа в систему прошел успешно.
Проблема
На https://my.website1.com
мне бы хотелось, чтобы пользователь также мог войти в систему со своей учетной записью Facebook, которая будет связана с учетной записью в моей базе данных учетных записей пользователей. Я также хотел бы централизовать этот процесс (то есть, чтобы мой другой сайт https://my.website2.com
мог повторно использовать тот же процесс входа в систему). Поэтому я подумываю реализовать 2-хоповый поток oauth, как показано на следующем рисунке.
- Пользователь имеет доступ к
https://my.website1.com
, который отображает кнопку входа в систему.
- Пользователь перешел на мою централизованную конечную точку входа в Facebook
https://auth.my.company.com/facebook
- Авторизация разрешает свой идентификатор клиента Facebook и URL перенаправления, а затем перенаправляет пользователя на страницу входа в Facebook.
- Пользователь авторизуется через Facebook.
- Facebook перенаправляет пользователя обратно на мой сервер авторизации, передавая код авторизации.
- Мой сервер авторизации использует код авторизации из Facebook для аутентификации пользователя с помощью API Facebook
- Мой сервер авторизации перенаправляет пользователя обратно на
https://my.website1.com
, передавая собственный сгенерированный код авторизации.
- Бэкэнд-сервер веб-сайта связывается с сервером авторизации с использованием входного auth_code для аутентификации пользователя, сервер авторизации возвращает токен доступа.
- Сайт отвечает пользователю, что процесс входа в систему прошел успешно.
Вопрос
Я не могу найти никаких ссылок на этот вид двухпрыжкового звука, поэтому боюсь, что я делаю это неправильно. Я хотел бы знать, есть ли стандартные подходы для управления централизованным социальным логином, подобным этому.