Auth0 - очень удобный сервис для абстрагирования от проблем аутентификации и безопасности; Auth0 также отлично справляется с интеграцией входа в систему из различных социальных сетей. Но, как и во всем инженерном деле, есть компромиссы. Я попытаюсь объяснить процесс, необходимый для получения токенов доступа поставщика удостоверений, передаваемых от Auth0.
Процесс
Я предполагаю, что вы знакомы с базовой настройкой Auth0 и отличиями настройки классического веб-приложения от настройки одностраничного веб-приложения. Если это предположение неверно, у Auth0 есть отличные документы для этого!
Помимо обычной настройки Auth0, необходимо выполнить несколько дополнительных шагов, чтобы воспользоваться преимуществами токенов доступа IdP. Сначала вам нужно зарегистрировать приложение у внешнего поставщика API (например, Facebook).

После регистрации нового приложения вы можете перейти в свою учетную запись Auth0 и создать client.

Теперь, когда у вас есть новый клиент, вам нужно войти в его настройки и добавить разрешенные URL-адреса обратного вызова. Это должен быть URL-адрес вашего развернутого приложения и http://localhost:PORT для тестирования (необязательно). Теперь, когда ваш клиент создан, у вас должен быть доступ к селектору API-интерфейсов слева. Щелкните API и перейдите к своему приложению, затем к Non Interactive Clients и добавьте read:user_idp_tokens в области действия приложения. Затем нажмите Connection > Social и перейдите к API, который вы пытаетесь использовать, в нашем случае: Facebook. В этом окне вы должны ввести учетные данные из ранее зарегистрированного приложения, а также выбрать, какие разрешения запрашивать у пользователя.

Мы почти подошли к коду, все, что осталось, - это предоставить вашему стороннему API действующий URL-адрес перенаправления OAuth, если это необходимо! Продолжая наш пример: чтобы сделать это с помощью Facebook, перейдите к своему недавно созданному приложению, щелкните + Add Product в меню навигации слева и выберите Facebook Login, в поле Valid OAuth redirect URLs введите https://YOURAUTH0ACCOUNTNAME.auth0.com/login/callback.
Хорошо, теперь мы закончили настройку и готовы к написанию кода! Но сначала паттерн высокого уровня.
- Получите ключ
user_idиз тела объекта ответа, который Auth0 отправляет на ваш сервер при входе в систему. - Отправить запрос POST на
https://YOUR_AUTH0_DOMAIN/oauth/token - Из тела этого ответа возьмите
access_token, который мы будем использовать для выполнения запроса GET кhttps://YOUR_AUTH0_DOMAN/api/v2/users/USER_ID(используя user_id из первого шага). - Свойство
identitiesтела ответа, возвращенного из предыдущего запроса GET, представляет собой массив, содержащий объекты для каждого IdP, который у вас есть в файле для этого пользователя. - Свойство
access_tokenэтого объекта возвращаетaccess_token, необходимое нам для доступа к внешнему API (в нашем случае Facebook).
Получение токена доступа Auth0
Тело этого ответа содержит access_token и token_type, которые нам понадобятся для следующего запроса.
Получение вашего токена доступа IdP
Тело ответа, возвращенное этим запросом GET, будет выглядеть примерно так:
Важно отметить, что если у вас есть токены доступа IdP от нескольких сторонних сайтов, для каждого из них будет объект в массиве identities, поэтому в этом случае потребуется дополнительная логика. Однако в нашем случае все, что нам нужно сделать, это получить доступ к нашему токену доступа Facebook следующим образом: body.identities[0].access_token, и мы готовы поиграть с API Facebook!
Надеюсь, теперь вы чувствуете себя уверенно, используя внешние API через Auth0!
примечание: почему 0 (ноль) и o (буква o) выглядят одинаково в среднем шрифте?