Как аутентифицировать пользователя Firebase в сервисе IFTTT? - PullRequest
0 голосов
/ 22 декабря 2018

Я пытаюсь создать службу IFTTT и подключить ее к своему бэкэнду Firebase.

Мне нужно аутентифицировать пользователя, как указано в документах IFTTT: https://platform.ifttt.com/docs/api_reference#service-authentication

Протокол IFTTT поддерживает аутентификацию OAuth2, включая поддержку токенов обновления, если это необходимо.

Ваш сервисный API должен использовать токены доступа для аутентификации и в качестве источника идентификации.Один токен доступа должен соответствовать одной учетной записи пользователя или владельцу ресурса в вашей службе.

Если используются токены обновления, они не должны быть устаревшими.Если токены обновления не используются, токены доступа не должны быть устаревшими.

Но я могу получить только кратковременные токены доступа из Firebase, как мне кажется.Где я могу получить или как генерировать такие токены из Firebase auth SDK?


Обновление в ответ на @FrankvanPuffelen:

Я создамСлужба IFTTT, работающая на Node-сервере (возможно, просто Cloud Functions), который будет использовать RTDB Firebase для отправки отформатированного HTTP-запроса обратно в IFTTT.IFTTT требует от меня авторизации учетных записей пользователей.Их требуемый UX выглядит примерно так:

  • Если пользователь IFTTT пытается использовать мой сервис на веб-сайте IFTTT,
  • появляется диалоговое окно авторизации для моего сервиса.
  • Пользователь входит в систему и подтверждает доступ IFTTT к своим данным в моем сервисе.
  • Обмен некоторых токенов OAuth 2.0.
  • Серверы IFTTT будут периодически отправлять запросы (аутентифицируемые этими токенами) от именипользователя на мой сервер.

Часть вопроса: могу ли я использовать Firebase Auth API для получения этих токенов и т. д. или мне нужно создать новый «слой» OAuth 2.0 смои собственные сгенерированные токены для IFTTT?

PS: я очень плохо знаком с OAuth, поэтому меня это немного смущает, извините, если вопрос не очень ясен.

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Я временно публикую здесь свое решение, я приму его, когда буду уверен, что оно достигнет всего, что мне нужно.Если у кого-то есть предложения о том, как генерировать соответствующие токены / коды авторизации в этом контексте, они приветствуются!


Я использую этот метод аутентификации: В моем API есть пользователи с не- истечение срока действия маркеров доступа OAuth2 и наличие сервера Express, отвечающего на конечной точке облачной функции Firebase HTTPS.В настоящее время на этапе создания прототипа он генерирует поддельные токены из UID, которые успешно принимаются IFTTT.

Это поток аутентификации с интенсивным перенаправлением на основе этого старого примера API IFTTT: https://github.com/IFTTT/connect_with_ifttt_auth_sample

Вот суть этого:

  • Токены и коды авторизации на данный момент просто рандомизированы и зашифрованы UID.
  • /oauth/authorize перенаправляет в мое приложение.
  • Приложение спрашивает пользователя, хотят ли они авторизовать IFTTT
  • Приложение перенаправляет на /oauth/authorize_user
  • /oauth/authorize_user, генерирует пользовательский код и перенаправляет пользователя на IFTTT с этим кодом
  • IFTTT просит /oauth/token обменять код для токенов на предъявителя.
  • IFTTT теперь может делать запросы от имени этого пользователя с этим токеном на предъявителя.

Пример кода здесь: https://gist.github.com/nathanvogel/15ed311258b91d7ec3d25f44047780e2

0 голосов
/ 23 декабря 2018

Итак, IFTTT вызывает облачные функции, которые затем вызывают базу данных реального времени, и вы хотите аутентифицировать пользователя IFTT с помощью базы данных реального времени.Это верно?Если это так, вы можете использовать токен OAuth2 или создать файл cookie сеанса аутентификации Firebase.

Использовать токен OAuth2

Я сделал это не так давно для доступа к базе данных в реальном времени из скрипта Google Apps,Требования относительно просты (если вы их знаете):

  1. Токены OAuth2 необходимо запрашивать с правильными областями: https://www.googleapis.com/auth/userinfo.email и https://www.googleapis.com/auth/firebase.database.
  2. Токен доступа OAuth2должен присутствовать в запросе к базе данных реального времени.
  3. Пользователь, прошедший проверку подлинности, должен быть как минимум редактором проекта Firebase.Обратите внимание, что это не пользователь проверки подлинности Firebase, а учетная запись пользователя Google.

См. Также:

Использование файла cookie сеанса аутентификации Firebase

Вы также можете использовать файл cookie сеанса аутентификации Firebase, который может быть более длительным (до 2 недель)) чем обычный токен идентификатора аутентификации Firebase (до часа).Вы захотите настроить облачную функцию для создания файла cookie сеанса, вызвать его из IFTTT, а затем передать файл cookie сеанса вместе с запросом IFTTT и в базу данных реального времени.

Подробнее об этом см. В разделе:

...