Использование ключей API в приложении react

у меня есть приложение React, которое использует две сторонние службы. Приложение было запущено с помощью react-create-app.

обе эти службы требуют ключа API.

один ключ поставляется через тег script, как это:

<script type="text/javascript" src="https://myapi?key=MY_KEY">
</script>

другой ключ API используется в запросе. Я храню фактический ключ в константе и использую его для формирования запроса. Вот так:

const MY_OTHER_KEY = 'MY_OTHER_KEY'
let url = `http://myotherapi?key=${MY_OTHER_KEY}&q=${query}`

Google лучшие советы по практике по обработке ключей API говорит:

не вставляйте ключи API непосредственно в код

это подводит меня к моему первому вопросу:

1. Как использовать переменные в index.html?

в своем , у меня есть два тега, которые выглядят так:

<link rel="manifest" href="%PUBLIC_URL%/manifest.json">
<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">

очевидно, %PUBLIC_URL% - это переменная. Как добавить переменную %MY_KEY% как избежать встраивания ключа API непосредственно в мой код?

чтобы получить что-то вроде это:

<script type="text/javascript" src="https://myapi?key=%MY_KEY%">
</script>

связанный с этим вопросом, безопасно ли хранить ключ API в константе, как я делаю для MY_OTHER_KEY?

Google также говорит:

не храните ключи API в файлах внутри исходного дерева вашего приложения

это подводит меня ко второму вопросу:

2. Не API ключ все равно в связке?

скажем, я делаю то, что Google говорит и Я!--11-->

... храните их в переменных среды или в файлах вне вашего исходное дерево приложения

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

3. Есть ли канонический способ использование ключей API в приложении react? Или это зависит от индивидуального разработчика?

само собой разумеется, я ищу способ реагировать на решение этой проблемы, если таковой существует.

Спасибо за вашу помощь!

1 ответов


1. Как использовать переменные в индексе.HTML-код?

ответ 1 : перейдите через Добавление Пользовательских Переменных Среды чтобы узнать, как добавить переменные среды типа, показанного в качестве примера.

2. Не API ключ все равно в связке?

ответ 2 : даже если у вас есть свой ключ (MY_KEY) в качестве переменной среды в теге скрипта, он будет получать отображается на странице и будет виден. Как правило, это ключи браузером и предназначены для использования на стороне клиента. Их можно ограничить, предоставив заголовок HTTP Referer в вашем запросе. Подробнее об эффективности защиты этих ключей здесь. Однако ключи API (например,MY_OTHER_KEY) не должны использоваться на стороне клиента и не должны отображаться в теге скрипта или храниться на стороне клиента JS.

3. Есть ли канонический способ использования ключей API в react app? Или это зависит от индивидуального разработчика?

ответ 3: канонический способ использования стороннего ключа API для вашего клиентского приложения для отправки запроса на ваш бэкэнд API. Затем ваш серверный API форматирует запрос согласно стороннему API, добавляет ключ и делает вызов стороннему API. Как только он получит ответ, он может либо распаковать его и перевести его в объекты домена, которые ваше интерфейсное приложение поймет, либо отправить raw ответ назад к интерфейсному приложению. Таким образом, ключ API остается на бэкэнде и никогда не отправляется на клиентскую сторону.