OAuth аутентификация + авторизация — что происходит после получения oAuth токена?
Доброго времени суток.
Перечитал тонны документации, но нигде не раскрыт последний этап процесса аутентификации юзера (не путать с авторизацией, которая позволяет получить доступ к личным\закрытым данным юзера).
Есть к примеру связка: бекенд -> фронтенд (SPA) -> oAuth.
Пользователь хочет зарегистрироваться\залогиниться, запрашивает у поставщика oAuth код, поставщик код отдает.... в общем в итоге пользователь получает токен. В этом я разобрался.
Но что происходит дальше? Как я понимаю, Бекенд про интимные связи пользователя с поставщиком ничего не знает.
У меня есть следующее предположение, что происходит. Прошу подтвердить\опровергнуть\дополнить.
Пользователь (браузер пользователя) после получения токена должен отправить этот токен в сторону бекенда, с какими то данными, полученными от поставщика oAuth (id пользователя?, почта?, имя?). Бекенд проверяет в БД id?, почту?, если нету совпадений, регистрирует этого пользователя. Если есть в БД записи - логинит.
В случае, если токен умер, весь процесс повторяется? Или после этапа регистрации включаются сессии и бекенд периодически обновляет токен? За счет чего\как вообще, в случае социальной регистрации, бекенд поддерживает аутентификацию фронтенда?
Из-за непонимания, что происходит после подтверждения пользователя со стороны поставщика oAuth, я не могу понять, как мне поступить со следующей задачей:
Я пишу SPA и еще не разу в SPA не настраивал аутентификацию. Хочу сделать возможность регистрации пользователя через Гугл + мне нужно будет для SPA еще получать авторизацию на данные пользователя в Ютубе, и я не понимаю\не знаю, как все правильно сделать. В случае отсутствия SPA все делается просто - все делается со стороны сервера.
В случае же с SPA я вижу несколько вариантов:
1. Аутентификация пользователя (регистрация\логин) и авторизация доступа к Ютубу происходит со стороны SPA. Как только пользователь зарегистрировался\залогинился - стучимся к бекенду. Как только пользователь дал добро на использование данных Ютуба - стучимся к бекенду.
2. Все сделать со стороны бекенда. Юзер проходит аутентификацию через бекенд и бекенд на последнем этапе ответа oAuth поставщика сам обрабатывает нужные данные. Как дальше происходит логин пользователя. Сессии? В случае же Ютуба, то пользователь дает разрешение на использования запросов от своего имени не браузеру, а бекенду (тут я вижу минус - дополнительная нагрузка на бекенд, который тут выступает в роли прокси. Не вижу смысла ставить его между браузером и ютубом, если браузер и Ютуб могут общаться напрямую и по окончании, браузер может отправить итог работ бекенду одним запросом).
3. Сделать аутентификацию со стороны бекенда, а ютуб оставить на фронтенде. Если это нормальный вариант, как соорудить данную конструкцию? Передавать с бекенда фронтенду полученный после аутентификации токен, и во фронтенде расширять scope токена для получения доступа к Ютубу? Или не передавать токен, а просто сказать пользователю "дай мне разрешение к твоим данным Ютуба"?
Прошу помочь. Пора к SPA подключать гугл\ютуб, и не знаю, с какой стороны подобраться.
Всю эту конструкцию хочу сделать на Vue (пора подключать гугл\ютуб) + Django (пора понимать, как делать аутентификацию, т.е. регистрация\логин) + GraphQL (все еще в начале пути, так как увлекся Vue, очень понравилось).
Если пользователь вводит имеил/пароль - отправляем прямиком на бекенд для авторизации.
Если пользователь выбирает Гугл аутентификацию - запускаем GAPI, который открывает окошко, где пользователь вводит свои Гугл имеил/пароль и который автоматизирует аутентификацию. GAPI весь этот процесс обрабатывает и возвращает данные, которые вы запросили (Имя пользователя, имеил и так далее) + токен. Мы из GAPI извлекаем этот токен и отправляем его в бекенд.
Со стороны бекенда я использую Питон (Джанго), совместно с библиотекой python social auth (с расширением для Джанго), который принимает от фронтенда Гугловский токен и дальше сам уже регистрирует/авторизирует пользователя.
А потом вы запрашиваете у поставщика нужные вам данные по обычной апи, передавая с запросом токен.
Если токен соответствует нужным правам доступа то вы их получаете.