Azure IoT Hub SAS密钥手册通过连接字符串和HMAC加密通过Forge JS Lib进行



在使用手动sas键生成的javascript(typescript(文件中使用forge javaScript库中的连接字符串在Azure-iot-hub中遇到401,在Azure-iot-Hub中超过401。

连接字符串外观如下:HostName={resourceUri};SharedAccessKeyName={policyName};SharedAccessKey={key}"

i将字符串分解为字典,我自己计算到有效期的时间(添加3600秒(,然后继续使用以下功能计算SAS密钥URL参数:

// MSDN recommendation   
const encodeUriComponentStrict = (str) => {
      return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
        return '%' + c.charCodeAt(0).toString(16);
      });
    }
function hmacHash(password, signingString) {
  const hmac = forge.hmac.create();
  console.log(`password`, password);
  hmac.start('sha256', forge.util.encode64(password));
  hmac.update(signingString);
  const digested = hmac.digest();
  return forge.util.encode64(digested.data);
}
/**
 * Creates a Sas key for an azure iot registry
 * @param hostName the azure iot resource uri
 * @param policy the shared access key name
 * @param key the shared access key
 * @param expiry int64 representation of expiration time
 */
const createSasKeyForRegistry = (hostName: string, policy: string,
    key: string, expiry: number) => {
    let sas : any = {
        _key: key,
        sr: hostName,
        se: expiry,
        skn: encodeUriComponentStrict(policy),
    };
  sas.sig = encodeUriComponentStrict(hmacHash(sas._key, stringToSign(sas.sr, sas.se)));
  return sas;
}

这是一个示例资源PUT IoT设备端点,我可以在控制台中看到: https://{my-resource-uri}.net/devices/807417987db61b41ZX1F239P3Q?api-version=2016-11-14

我可以看到Authorization标头以通常的SAS密钥格式附加:

"SharedAccessSignature sr={resource-uri}&sig=koNqIJF56tzzBpqWYp4tRvxeWIJEHSLugA2O2weELZ4%3D&se=1492307707&skn=iothubowner"

尽管如此,我仍然得到401 ...现在已经呆了几个小时了,尝试了各种事情而没有任何成功。想知道它是否与HMAC加密功能有关?有任何可以验证代码的伪造人员吗?对于有兴趣的人,我在离子2应用程序中(基于Angular 2(,并使用Angular 2的HTTP类执行请求。

谢谢。

,由于我现在没有50个声誉,所以我无法将其发布为评论。

您是否用base64解码了共享acceskekey?

我不熟悉Forge,但这是我对Cryptojs所做的

https://github.com/azure-iothub/device-management/blob/master/main.js#l117

使用getInfromConnectionsTring方法从连接字符串获得连接Info

https://github.com/azure-iothub/device-management/blob/master/main.js#l74

我希望这可以有所帮助。

相关内容

  • 没有找到相关文章

最新更新