我可以从浏览器创建 IoT 中心设备吗?
Can I create an IoT Hub Device from browser?
目标:使用节点模块 azure-iot-hub.[= 从浏览器 (angular2) 创建一个 azure 物联网集线器设备13=]
问题: azure-iot-common 依赖于一个包 crypto ,它在浏览器中不起作用。
重建步骤:
import { Component, OnInit } from '@angular/core';
let iothub = require(‘azure-iothub’);
const connectionString = ‘HostName=<my-host>.azure-devices.net;SharedAccessKeyName=<my-key-name>;SharedAccessKey=<my-key>=’;
@Component({
selector: 'acn-shop',
template: `
<div class="al-main">
<div class="al-content container-fluid">
<h1>Azure IoT Hub Devices</h1>
</div>
</div>`
})
export class ShopComponent implements OnInit {
constructor() {
}
public ngOnInit() {
this.connect();
}
public connect() {
console.log('Calling connect()');
const registry = iothub.Registry.fromConnectionString(connectionString);
}
}
来自 Chrome 工具控制台
Error: Uncaught (in promise): TypeError: crypto.createHmac is not a function
TypeError: crypto.createHmac is not a function
at Object.hmacHash (authorization.js:36)
at Function.create (shared_access_signature.js:67)
at Object.create (shared_access_signature.js:15)
at Function.fromConnectionString (registry.js:65)
at ShopComponent.Array.concat.ShopComponent.connect (shop.component.ts:32)
… (goes on for a bit) ...
- 在 github - https://github.com/ipfs/js-ipfs/issues/270 上也有类似的问题 - 建议将 crypto 切换到 webcrypto
可能的解决方案: 将 crypto 切换为 webcrypto - 需要重写 azure-iot-common/lib/authorization.js
问题:
- 有没有人使用节点模块 azure-iot-hub 从浏览器创建集线器设备?
- 有没有人使用其他方法从浏览器创建集线器设备?
- 如果问题 1 为否,2 - 我的潜在解决方案是否可行?
库 https://github.com/PeculiarVentures/webcrypto-liner will give you a crypto object you can use in the browser (even downlevel/IE) https://github.com/PeculiarVentures/node-webcrypto-ossl 会给你一个 Node.
切换到 webcrypto 应该没有问题,请参阅 https://github.com/diafygi/webcrypto-examples#hmac 以获取有关如何调用的示例。
azure-iothub 节点模块是 service 客户端 SDK,用于创建将用于管理 IoT Hub 实例的后端应用程序,不用于设备。
在设备方面,您需要使用设备客户端 SDK 模块 azure-iot-device。
也就是说,即使您解决了各种依赖项问题(例如您发现的 Crypto 问题),这仍然不起作用,因为 IoT 中心服务不支持 CORS,这意味着它不会接受来自 Web 客户端的请求。对 IoT 中心的 CORS 支持在我们的积压工作中,但尚未确定优先级,因此我们没有 ETA。
您可以尝试解决此限制的方法是 运行 网站后端的设备客户端节点模块,当新的网络浏览器客户端连接时创建设备客户端的新实例到您的网站。
目标:使用节点模块 azure-iot-hub.[= 从浏览器 (angular2) 创建一个 azure 物联网集线器设备13=]
问题: azure-iot-common 依赖于一个包 crypto ,它在浏览器中不起作用。
重建步骤:
import { Component, OnInit } from '@angular/core';
let iothub = require(‘azure-iothub’);
const connectionString = ‘HostName=<my-host>.azure-devices.net;SharedAccessKeyName=<my-key-name>;SharedAccessKey=<my-key>=’;
@Component({
selector: 'acn-shop',
template: `
<div class="al-main">
<div class="al-content container-fluid">
<h1>Azure IoT Hub Devices</h1>
</div>
</div>`
})
export class ShopComponent implements OnInit {
constructor() {
}
public ngOnInit() {
this.connect();
}
public connect() {
console.log('Calling connect()');
const registry = iothub.Registry.fromConnectionString(connectionString);
}
}
来自 Chrome 工具控制台
Error: Uncaught (in promise): TypeError: crypto.createHmac is not a function
TypeError: crypto.createHmac is not a function
at Object.hmacHash (authorization.js:36)
at Function.create (shared_access_signature.js:67)
at Object.create (shared_access_signature.js:15)
at Function.fromConnectionString (registry.js:65)
at ShopComponent.Array.concat.ShopComponent.connect (shop.component.ts:32)
… (goes on for a bit) ...
- 在 github - https://github.com/ipfs/js-ipfs/issues/270 上也有类似的问题 - 建议将 crypto 切换到 webcrypto
可能的解决方案: 将 crypto 切换为 webcrypto - 需要重写 azure-iot-common/lib/authorization.js
问题:
- 有没有人使用节点模块 azure-iot-hub 从浏览器创建集线器设备?
- 有没有人使用其他方法从浏览器创建集线器设备?
- 如果问题 1 为否,2 - 我的潜在解决方案是否可行?
库 https://github.com/PeculiarVentures/webcrypto-liner will give you a crypto object you can use in the browser (even downlevel/IE) https://github.com/PeculiarVentures/node-webcrypto-ossl 会给你一个 Node.
切换到 webcrypto 应该没有问题,请参阅 https://github.com/diafygi/webcrypto-examples#hmac 以获取有关如何调用的示例。
azure-iothub 节点模块是 service 客户端 SDK,用于创建将用于管理 IoT Hub 实例的后端应用程序,不用于设备。
在设备方面,您需要使用设备客户端 SDK 模块 azure-iot-device。 也就是说,即使您解决了各种依赖项问题(例如您发现的 Crypto 问题),这仍然不起作用,因为 IoT 中心服务不支持 CORS,这意味着它不会接受来自 Web 客户端的请求。对 IoT 中心的 CORS 支持在我们的积压工作中,但尚未确定优先级,因此我们没有 ETA。
您可以尝试解决此限制的方法是 运行 网站后端的设备客户端节点模块,当新的网络浏览器客户端连接时创建设备客户端的新实例到您的网站。