Использование ключей 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 остается на бэкэнде и никогда не отправляется на клиентскую сторону.