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.

Хорошо, теперь мы закончили настройку и готовы к написанию кода! Но сначала паттерн высокого уровня.

  1. Получите ключ user_id из тела объекта ответа, который Auth0 отправляет на ваш сервер при входе в систему.
  2. Отправить запрос POST на https://YOUR_AUTH0_DOMAIN/oauth/token
  3. Из тела этого ответа возьмите access_token, который мы будем использовать для выполнения запроса GET к https://YOUR_AUTH0_DOMAN/api/v2/users/USER_ID (используя user_id из первого шага).
  4. Свойство identities тела ответа, возвращенного из предыдущего запроса GET, представляет собой массив, содержащий объекты для каждого IdP, который у вас есть в файле для этого пользователя.
  5. Свойство 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) выглядят одинаково в среднем шрифте?