首页 > 解决方案 > POST Nest API 以使用 ESP8266 或 Arduino 获取访问令牌

问题描述

我打算发布 Nest API 以使用 ESP8266 或 Arduino 获取访问令牌。我仔细阅读了https://developers.nest.com/guides/api/how-to-auth#test_for_csrf_attacks使用 arduinoEDK 使用 esp8266 调用 nest api

我尝试使用 URL:/oauth2/access_token 发布 api.home.nest.com 但不知道要使用哪个端口:我尝试了 80、9553 和 443,但没有成功。

标签: apipostaccess-tokenesp8266nest-api

解决方案


Nest 通过 HTTPS 运行其 API,它使用端口 443。即使他们允许端口 80,您也不应该使用它;您将在未加密的情况下传输您的凭据或 API 令牌,这很危险。

如果您的代码在 ESP8266 上运行,请务必使用 SSL 库。仅仅对端口 443 说 HTTP 协议是不够的。

您没有共享任何代码,因此我无法提供进一步建议,但请考虑使用 BearSSL::WiFiClientSecure 类进行连接。

有一个很好的例子

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

您需要知道 Nest 服务器的 SSL 指纹。您可以通过运行找到它

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()的线路;那是您使用服务器指纹的地方。


推荐阅读