Создание нового пользователя в базе данных
В принципе, вам действительно нужно хранить электронную почту пользователя (вместе с любой другой информацией, которая нужна вашей системе для этого пользователя), чтобы иметь возможность «связать» вашего пользователя с «внешней» учетной записью, которую он использует для входа в систему.
Вход в систему, если в БД найден соответствующий пользователь (как определить соответствие без пароля?)
Одна из основных причин полагаться на внешний механизм аутентификации заключается в том, что вам не нужно выполнять хранение / проверку пароля самостоятельно.
Вам просто нужно сопоставить адрес электронной почты, который пользователь использует для аутентификации, с адресом электронной почты, который вы сохранили в своей БД.
Разве другие не могут просто создать фальшивый токен с тем же адресом электронной почты?
Нет, они не могут, иначе это было бы бесполезно.
Токены подписаны сервером аутентификации, и невозможно "подписать" токен, не имея закрытого ключа сервера аутентификации.
Как это проверить безопасным способом
Смотрите здесь:
https://developers.google.com/identity/sign-in/web/backend-auth
В разделе «Проверка целостности токена идентификатора» обсуждается, как вы делаете это самостоятельно или путем вызова внешней конечной точки.
Храните ли вы токен в таблице пользователей вместе с электронным письмом?
Хранить токен пользователя нужно только в том случае, если помимо его аутентификации вы планируете использовать API Google от имени пользователя.
В таком случае, что делать, если токен истекает / изменяется, а как насчет безопасности?
Смотрите здесь:
https://developers.google.com/identity/protocols/OAuth2
Вам нужно будет сохранить токен и токен обновления, и для его обновления необходимо выполнить последовательность действий.
Что касается безопасности, вам нужно убедиться, что ни один пользователь не может видеть токен другого пользователя, поскольку токен позволяет приложению отправлять запросы к API от имени этого пользователя.