Какова цель секретного клиента, если он не используется для входа в Google в приложении React Natvie (ios/android), имеющем внутренний api? Как это безопасно?

#react-native #google-oauth #passport.js #google-signin

Вопрос:

У меня есть собственное приложение react(скажем, ABC), из которого я собираюсь войти в Google, я получаю idToken и безопасно отправляю его по протоколу Https на сервер, затем он проверяет idToken и получает доступ. Но во всем этом процессе clientSecret нигде не используется. Мои идентификаторы клиентов могут использоваться кем угодно, скажем, приложением XYZ для доступа к пользовательским данным. Как это безопасно?

С другой стороны, на моем веб-сайте react и бэкэнд-сервере, где я использовал passport, требовался секрет клиента. Я что-то здесь упускаю?

И если процесс, используемый в собственном приложении, безопасен, я могу использовать тот же процесс на веб-сайте react, т. Е. Избавиться от стратегии паспорта.

Ответ №1:

Идентификатор клиента включен в HTML, предоставляемый браузерам, как вы указываете, он небезопасен и не предназначен для этого. Идентификатор клиента просто идентифицирует приложение.

Для веб-приложений требуются авторизованные источники JavaScript, а для внутренних служб также необходимы авторизованные URI перенаправления. Запросы/ответы проверяются службой OAuth Google с использованием этих настроек.

Требуется протокол HTTPS, который включает подписанный сертификат и помогает гарантировать, что трафик поступает из источника, размещенного и обслуживаемого с вашего проверенного домена.

Для ответов на вход обычно используется подписанный JWT, который может быть надежно проверен на серверной части (если не используется OAuth 2.0 или gapi).

Секрет клиента, конечно, никогда не должен включаться в HTML, передаваемый браузеру, и должен храниться только в безопасном месте, вне системы управления версиями и на внутреннем сервере.

Использование nonce также поможет вам избежать повторных атак. Смотрите переменную состояния для приложений на стороне сервера или Войдите В систему С атрибутом Google nonce.