Правильный способ вызова API с паролем в заголовке - PullRequest
0 голосов
/ 30 июня 2018

У меня есть простой веб-сайт, который не делает ничего, кроме вызова API при нажатии кнопки. API im call (Домашний помощник) требует, чтобы пароль был включен в заголовок. Это нормально работает при тестировании, но как мне сделать это безопасным способом?

Мой ajax-вызов API в настоящее время содержит пароль в виде открытого текста и может быть просмотрен любым, кто проверяет файл .js.

    function ToggleAPI(){
    $.ajax
    ({
      type: "post",
      url: "https://exampledomain.org:8123/api/services/switch/toggle",
      dataType: 'json',
      headers: {
            'x-ha-access': 'MyPasswordThatCanBViewdByAnyone',
            'content-type': 'application/json'
        },
      async: false,
      contentTtpe: 'application/json',
      data: JSON.stringify( {
        "entity_id": "SomeId"
      }),
      success: function (data){
        console.log("Sucess",data);
      },
      error: function(err){
          console.log("Error",err);
      }
    });

}

API работает на том же компьютере, что и веб-сервер, на котором размещен сайт. (Настройка - Raspberry Pi с Home Assistant и сервером NGINX, на котором размещен веб-сайт)

Как правильно вызывать API и предоставлять пароль, не вводя его в файл .js?

1 Ответ

0 голосов
/ 30 июня 2018

Сначала вы хотите направить все через Nginx и отключить публичный доступ к Pi. Свяжите сетевой интерфейс Pi, чтобы прослушивать только запросы в локальной сети и внешние запросы брандмауэра, чтобы заблокировать все порты, кроме 80 (или 443, если у вас есть SSL).

В блоке сервера для вашего веб-сайта в файле conf Nginx вы теперь можете установить местоположение, которое будет отправлять запросы Pi к Pi. URL-адрес не должен совпадать с URL-адресом Pi, если вы хотите, чтобы он был более запоминающимся. Примерно так:

location /switch{
proxy_pass http://pi.ip.address.here:8123/api/services/switch/toggle/;
proxy_set_header x-ha-access MyPasswordThatCanBViewdByAnyone;
proxy_set_header X-Real-IP $remote_addr;
}

Перезапустите Nginx, и теперь запрос к https://exampledomain.org/switch будет перенаправлен Nginx вашему Pi с добавленным заголовком пароля и исходным IP-адресом клиента в заголовке X-Real-IP

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...