2017-02-10 2 views
3

Я работаю над веб-приложением React-Redux, которое интегрируется с AWS Cognito для аутентификации пользователей/хранения данных и с помощью API Shopify, чтобы пользователи могли покупать товары через наш сайт.Защита клиентских SDK на стороне клиента

С обеих SDKs (Cognito, Shopify), я столкнулся с проблемой,: Их основная функциональность придает данные за кулисами localStorage, требуя как SDKs для запуска на сторону клиента.

Но выполнение этого кода полностью на стороне клиента означает, что маркеры API, которые оба API требуют, абсолютно небезопасны, так что кто-то может просто взять их из моего пакета, а затем аутентифицировать/заполнить корзину/посмотреть инвентарь/что угодно из любого места (правильно?).

Я написал вопросы обоим РЕПО, чтобы указать на это. Here's the more recent one, on Shopify. Я посмотрел на similarquestions на SO, но я ничего не нашел, обращаясь к этим пользовательским SDK/укоренившимся localStorage, и я начинаю задаваться вопросом, не пропал ли я/не понял что-то о безопасности на стороне клиента, поэтому я решил, что должен просто спросите людей, которые знают об этом больше.

Что меня интересует, является ли, абстрактно, хороший способ защитить клиентский SDK таким образом. Некоторые мысли:

  • Изначально я пытался прокси все запросы через сервер, но тогда localStorage функциональность не работает, и мне пришлось подделать его после запроса и добавить целую кучу кода, SDK разработан, чтобы заботиться. Это оказалось непомерно сложным/грязным, особенно с Cognito.

  • Я также рассматриваю возможность создания конечной точки на стороне сервера, которая просто возвращает учетные данные и блокирует запросы из-за пределов домена. В этом случае кредиты не будут находиться в пакете , но разве они не будут в конечном итоге сканироваться кем-либо на сайте после того, как запрос на учетные данные будет выполнен?

  • Является ли идея, что эти секретные ключи фактически не должны быть безопасными, поскольку добавление в корзину Shopify или регистрация пользователя с приложением не обязательно должны быть безопасными действиями? Я просто обеспокоен тем, что, очевидно, я не знаю полного объема действий, которые пользователь мог бы использовать с этими учетными данными, и это кажется очевидной лучшей практикой, чтобы держать их в тайне.

Спасибо!

+0

вы придумали какой-либо идеи? Я хочу создать sdk, но, как поставщик услуг, у меня есть те же проблемы, о которых вы говорили –

ответ

0

Не можете ли вы просто положить ключи и т. Д. В файл .env? Таким образом, никто не может видеть, какие ключи вы сохранили там. Затем вы можете получить доступ к своим ключам через process.env.YOUR_VAR

Для Cognito вы можете хранить такие вещи, как идентификатор пула пользователей, идентификатор клиента приложения, идентификатор пула идентификаторов в файле .env.

NPM пакет для dotenv можно найти здесь: NPM dotenv

Кроме того, какие supersecret вещи вы в настоящее время хранения, что вы беспокоитесь? Под «маркерами API» вы подразумеваете токен OpenId, который вы получаете после аутентификации в Cognito?

0

Я могу ответить на часть Cognito для этого. Ваш секретный ключ AWS и ключ доступа не сохраняются в клиенте. Для вашего приложения React.js вам нужен только идентификатор пула пользователей Cognito и идентификатор клиента приложения в вашем приложении. Это единственные ключи, которые доступны пользователю.

Я расскажу об этом подробно в комплексной обучающей программы здесь - http://serverless-stack.com/chapters/login-with-aws-cognito.html