API POST Nest для получения токена доступа с ESP8266 или Arduino - PullRequest
0 голосов
/ 10 ноября 2018

Я собираюсь использовать API POST Nest для получения токена доступа с ESP8266 или Arduino. Я внимательно прочитал https://developers.nest.com/guides/api/how-to-auth#test_for_csrf_attacks и Вызов api для гнезда с esp8266 с помощью arduinoEDK

Я пытался POST api.home.nest.com с URL: / oauth2 / access_token, но не знаю, к какому порту: я пробовал 80, 9553 и 443. Безуспешно.

1 Ответ

0 голосов
/ 10 ноября 2018

Nest запускает свой API через HTTPS, который использует порт 443. Даже если они разрешили порт 80, вы не должны использовать это;вы будете передавать свои учетные данные или токен API в незашифрованном виде, что опасно.

Если ваш код работает на ESP8266, обязательно используйте библиотеку SSL.Недостаточно просто передать протокол HTTP на порт 443.

Вы не поделились кодом, поэтому я не могу давать дальнейшие советы, но рассмотрите возможность использования класса BearSSL :: WiFiClientSecure для вашего соединения.

Вот хороший пример этого:

https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266HTTPClient/examples/BasicHttpsClient/BasicHttpsClient.ino

Вам необходимо знать отпечаток SSL для сервера Nest.Вы можете найти это, запустив

openssl s_client -connect api.home.nest.com:443 < /dev/null 2>/dev/null | openssl x509 -fingerprint -noout | cut -d'=' -f2

в окне терминала на компьютере Mac или Linux.Отпечаток пальца позволяет вашему клиенту подтвердить, что сервер является тем, кем он себя считает.

Пока я пишу это, отпечаток пальца в настоящее время:

DE:AA:EB:EE:C0:4B:14:97:27:C8:29:46:5C:05:44:2C:26:DE:55:6B

Имейте в виду, что со временем это может измениться(или даже в зависимости от конкретного сервера, который обрабатывает ваш запрос), поэтому вам может потребоваться изменить его.Вы можете найти строку, которая вызывает client->setFingerprint() в примере по ссылке выше;вот где бы вы использовали отпечаток сервера.

...