api - 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,但没有成功。
解决方案
Nest 通过 HTTPS 运行其 API,它使用端口 443。即使他们允许端口 80,您也不应该使用它;您将在未加密的情况下传输您的凭据或 API 令牌,这很危险。
如果您的代码在 ESP8266 上运行,请务必使用 SSL 库。仅仅对端口 443 说 HTTP 协议是不够的。
您没有共享任何代码,因此我无法提供进一步建议,但请考虑使用 BearSSL::WiFiClientSecure 类进行连接。
有一个很好的例子
您需要知道 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()
的线路;那是您使用服务器指纹的地方。