2016-07-11 73 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令牌對所有發佈商進行追蹤。認爲授權是分發給設備的共享密鑰,因此在發送之前不需要註冊發佈者。使用令牌只是發送指標的關鍵,而不是註冊哪個設備發送數據的方式。