2016-07-11 33 views
0

使用事件中心并发现了一些我觉得很奇怪的事情。将数据发布到事件中心

如何将数据发送到eventhub作为我不是的设备。

private static Task<HttpResponseMessage> PostTelemetryAsync(string test) 
     { 
      var serviceNamespace = "dev-hub"; 
      var hubName = "eventhub"; 
      var url = string.Format("/{0}/publishers/testdevice/messages/", hubName); 

      // Create client. 
      var httpClient = new HttpClient 
      { 
       BaseAddress = new Uri(string.Format("https://{0}.servicebus.windows.net/", serviceNamespace)) 
      }; 

      var payload = JsonConvert.SerializeObject(test); 

      var sas = createToken("dev-hub", "anotherDevice", "IdmUSeHmcrLfjSfc2ssJVvLcsMIHM/uqG1xSLUIh5t4="); 


      httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", sas); 

      var content = new StringContent(payload, Encoding.UTF8, "application/json"); 

      content.Headers.Add("ContentType", "application/json"); 

      return httpClient.PostAsync(url, content); 
     } 
     private static string createToken(string resourceUri, string keyName, string key) 
     { 
      TimeSpan sinceEpoch = DateTime.UtcNow - new DateTime(1970, 1, 1); 
      var week = 60 * 60 * 24 * 7; 
      var expiry = Convert.ToString((int)sinceEpoch.TotalSeconds + week); 
      string stringToSign = HttpUtility.UrlEncode(resourceUri) + "\n" + expiry; 
      HMACSHA256 hmac = new HMACSHA256(Encoding.UTF8.GetBytes(key)); 
      var signature = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(stringToSign))); 
      var sasToken = String.Format(CultureInfo.InvariantCulture, "SharedAccessSignature sr={0}&sig={1}&se={2}&skn={3}", HttpUtility.UrlEncode(resourceUri), HttpUtility.UrlEncode(signature), expiry, keyName); 
      return sasToken; 
     } 

在上面的代码中,我为设备anotherDevice生成一个SAS令牌,但发布到url ... publishers/testdevice/messages /。这是一个不同的设备。

我使用的事件处理器认为数据是从testdevice发送的,但SAS令牌是为另一个设备生成的。

它应该像这样工作吗?如何将SAS令牌用于其他设备以将数据发送到集线器,或者我在此处丢失了什么?

+0

自从您在此处发布密钥后,您应该重新生成密钥。 ;) –

+0

不用担心..不是正确的键或名称.. :) –

+0

答案是否澄清了问题,或者您需要更多信息? –

回答

0

它是授权您的应用程序发送数据的sas令牌。您可以使用相同的sas令牌对所有发布商进行追踪。认为授权是分发给设备的共享密钥,因此在发送之前不需要注册发布者。使用令牌只是发送指标的关键,而不是注册哪个设备发送数据的方式。