Я много читал о теме, но все, что я нахожу, - это устаревшие или частичные ответы, которые на самом деле не очень помогают мне, а на самом деле меня просто путают. Я пишу Rest API (Node + Express + MongoDB), к которому обращается веб-приложение (размещенное в том же домене, что и API), и приложение для Android.
Я хочу, чтобы API был доступен только моим приложениям и только авторизованным пользователям. Я также хочу, чтобы пользователи могли регистрироваться и регистрироваться только с помощью своей учетной записи Facebook, и мне нужно иметь доступ к некоторым базовым данным, таким как имя, профиль и адрес электронной почты.
Возможный сценарий, который я имею в виду:
- Пользователь регистрируется в веб-приложении с помощью Facebook, приложение предоставляется разрешение на доступ к информации пользователя Facebook и получение токен доступа.
- Веб-приложение просит API подтвердить, что этот пользователь на самом деле зарегистрирована в нашей системе, отправив электронное письмо и токен, полученный Facebook.
- API проверяет, что пользователь существует, он хранит в БД (или Redis) имя пользователя, токен и отметка времени, а затем возвращается к клиентскому приложению.
- Каждый раз, когда клиентское приложение попадает в одну из конечных точек API, оно должно будет предоставить имя пользователя и токен, кроме другой информации.
- API каждый раз проверяет, что предоставленное имя/токен пары соответствует самому недавнее имя/токен пары, хранящиеся в БД (используя временную метку на заказ) и что прошло не более 1 часа с момента хранения эти данные (опять же используя временную метку). Если это так, API будет обрабатывать запрос, в противном случае выдается 401 Несанкционированный ответ.