Как авторизовать зарегистрированных пользователей с помощью Google Auth JWT? (Рисунок)

#oauth-2.0 #oauth #jwt #google-oauth #google-authentication

#oauth-2.0 #oauth #jwt #google-oauth #google-аутентификация

Вопрос:

В настоящее время у меня есть серверная часть, работающая на AWS Lambda, и я использую DynamoDB в качестве базы данных. В Dynamo есть список пользователей, и у каждого пользователя есть определенные разрешения относительно того, к каким маршрутам они имеют доступ через API. Здесь нет проблемы. Я еще не создал интерфейс, но я буду регистрировать пользователей с помощью Google Auth, точнее, с помощью компонента react-google-login.

Мой вопрос: после того, как пользователь вошел на сайт, должен ли я доверять JWT от Google (после проверки его законности здесь с помощью Google API), который возвращает информацию о пользователе (имя, адрес электронной почты), выполняет поиск элемента user внутри Dynamo для получения их разрешений, а затем выполняет их запрос? Это кажется логичным, но я искал какое-то подтверждение. Меня беспокоит то, что кто-то может использовать имя и адрес электронной почты супервизора для авторизации запроса, но если лямбда-выражение должно принимать JWT, созданный Google в качестве записи, я считаю, что эта проблема решена правильно?

У меня также есть ключи API для каждого пользователя для некоторых внешних функций, но я это предусмотрел, поскольку это всего лишь динамический вызов. Меня беспокоят только запросы внешнего интерфейса к Lambda, поскольку я не хочу запускать свой собственный auth / jwt.

Вот что я представлял. Спасибо!

Ответ №1:

Обычно для этой цели следует использовать токены доступа. Токен ID должен предназначаться только для аутентификации пользователя, а токен доступа должен использоваться для авторизации доступа.

Лучшим сценарием было бы иметь отдельный сервер авторизации, который мог бы выдавать токены доступа, и есть несколько решений с открытым исходным кодом, которые вы можете использовать.

Если вы действительно не хотите настраивать свой собственный AS, вы можете следовать описанному вами сценарию — часть с проверкой JWT из Google и проверкой разрешений в DynamoDB — это то, что сервер авторизации обычно делает для выдачи токена доступа.

Просто не забудьте тщательно проверить входящий JWT — не только подпись с помощью Google, но и проверить, является ли это токеном, созданным для вашего клиента / аудитории и т. Д. В противном случае кто-то может получить токен Google ID JWT от своего клиента и получить доступ к вашему API. В этой статье перечислены лучшие методы обеспечения безопасности при работе с JWT.

Также помните, что у токенов ID может быть короткое время истечения срока действия, и нет средств для их автоматического обновления (например, вы можете сделать это с помощью токена обновления в случае токена доступа), поэтому вам может потребоваться повторная проверка подлинности довольно часто.

Комментарии:

1. Спасибо за подробный ответ! Я подробно прочитал о том, как проверить токен с помощью Google, и решил, что это лучший маршрут. В этой статье также есть несколько полезных советов, спасибо, что поделились ими. Re: срок действия, я знаю. Я полагаю, что Google также предоставляет вам токен обновления при входе в систему, поэтому, будь то в приложении react или на серверной части, я буду запрашивать новый токен по истечении срока действия в любом случае. Еще раз спасибо!