#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 или на серверной части, я буду запрашивать новый токен по истечении срока действия в любом случае. Еще раз спасибо!